hex file olvasás
hex file olvasás
azt szeretném megtudni hogyha a procimból kiolvasom a hex filet akkor hogyan tudnám azt decompile-olni bascomba?
-
Hooligan01
Bascomba, tehát basic nyelvre, szép beszédes változókkal (kommentezve - lol) esély nincs rá, ez talán logikus is.
Ha konyítasz az assembly-hez, (~ 10 éves rutin) akkor van értelme ilyesmin munkálkodni... persze csak ha megéri...
Példának egy nagyon egyszerű kis progi visszafejtése:
És az eredmény disassembly után:
Szóval jó szórakozást
Bocs hogy ilyen hosszúra sikerült
Ha konyítasz az assembly-hez, (~ 10 éves rutin) akkor van értelme ilyesmin munkálkodni... persze csak ha megéri...
Példának egy nagyon egyszerű kis progi visszafejtése:
Kód: Egész kijelölése
$regfile = "attiny2313.dat"
$crystal = 20000000
Config Portb = Output
Dim A As Byte
Do
For A = 0 To 255 Step 1
Portb = A
Next A
Loop
End
Kód: Egész kijelölése
; byte constants:
;
k00 = 0x00 ;
k01 = 0x01 ;
k1F = 0x1F ;
k60 = 0x60 ; '`'
k7E = 0x7E ; '~'
kB8 = 0xB8 ; '¸'
kC0 = 0xC0 ; 'Ŕ'
kDF = 0xDF ; 'ß'
kF7 = 0xF7 ; '÷'
kFF = 0xFF ; '˙'
;
; io register addresses:
;
p17 = 0x17
p18 = 0x18
p21 = 0x21
p34 = 0x34
p3D = 0x3D
;
; bit numbers:
;
b0 = 0x00
b1 = 0x01
b2 = 0x02
b3 = 0x03
b4 = 0x04
b5 = 0x05
b6 = 0x06
b7 = 0x07
;---------------------------------------
;
L0000:
rjmp __start ; L0013
; ----------- jump on last line
reti
;----------------------*
; pc=0x2(0x4)
;
reti
;----------------------*
; pc=0x3(0x6)
;
reti
;----------------------*
; pc=0x4(0x8)
;
reti
;----------------------*
; pc=0x5(0xA)
;
reti
;----------------------*
; pc=0x6(0xC)
;
reti
;----------------------*
; pc=0x7(0xE)
;
reti
;----------------------*
; pc=0x8(0x10)
;
reti
;----------------------*
; pc=0x9(0x12)
;
reti
;----------------------*
; pc=0xA(0x14)
;
reti
;----------------------*
; pc=0xB(0x16)
;
reti
;----------------------*
; pc=0xC(0x18)
;
reti
;----------------------*
; pc=0xD(0x1A)
;
reti
;----------------------*
; pc=0xE(0x1C)
;
reti
;----------------------*
; pc=0xF(0x1E)
;
reti
;----------------------*
; pc=0x10(0x20)
;
reti
;----------------------*
; pc=0x11(0x22)
;
reti
;----------------------*
; pc=0x12(0x24)
;
reti
;----------------------*
; pc=0x13(0x26)
;
__start::
; L0013:
ldi r24,kDF
out p3D,r24
ldi r28,kC0
ldi r30,kB8
mov r4,r30
clr r29
mov r5,r29
ldi r30,k7E
ldi r31,k00
ldi r26,k60
ldi r27,k00
in r24,p34
mov r0,r24
andi r24,kF7
out p34,r24
ldi r24,k1F
out p21,r24
ldi r24,k00
out p21,r24
clr r24
L0027:
st X+,r24
sbiw r30,k01
brne L0027
; ----- branch on last line
clr r6
ldi r24,kFF
out p17,r24
L002D:
ldi r24,k00
sts D0060,r24
L0030:
lds r16,D0060
cpi r16,kFF
brcs L0036
; ----- branch on last line
breq L0036
; ----- branch on last line
rjmp L003F
; ----------- jump on last line
L0036:
ldi r26,k60
ld r24,X
out p18,r24
ldi r26,k60
ld r24,X
subi r24,kFF
st X,r24
brcc L003F
; ----- branch on last line
rjmp L0030
; ----------- jump on last line
L003F:
rjmp L002D
; ----------- jump on last line
cli
L0041:
rjmp L0041
; ----------- jump on last line
; pc=0x42(0x84)
;
L0042:
sbiw r30,k01
brne L0042
; ----- branch on last line
ret
;----------------------*
; pc=0x45(0x8A)
;
set
bld r6,b2
ret
;----------------------*
; pc=0x48(0x90)
;
clt
bld r6,b2
ret
;----------------------*
; pc=0x4B(0x96)
;
__text_end::
;
; last flash byte address = 0x0095
; last flash word address = 0x004A
;---------------------------------------
.area bss (abs)
.org 0x0060
;
__first_bss::
;
D0060:
;
__last_bss::
;
; last lds/sts data byte at 0x0060
;---------------------------------------
;<eof>
Bocs hogy ilyen hosszúra sikerült
-
Hooligan01
Csak assembly-be, tehát gépi kódba. Ezt eszi a kontroller...
Ez a fentebb visszaforgatott hex:
Egy programozási nyelv általában "magas szintű". Tehát magát a nyelvezetet a fordító alakítja a céleszköz számára ehetővé.
Még az assembly-ben írt programok is beszédesek az ember számára, hiszen jellegzetes változóneveket használhatsz, struktúráltan írhatod meg a programodat, ilyesmi.
Na ez disasm után felejtős. Elég száraz anyag a végeredmény...
Tehát legalább 1 percig törd a fejed, vajon mivé lehet ezt még visszaforgatni, ismerve az architektúrát amire készült.
De mivel szinte semmi sem lehetetlen, így ez sem. Csak ember legyen a talpán aki átlátja az eredményt
Ez a fentebb visszaforgatott hex:
Kód: Egész kijelölése
:1000000012C0189518951895189518951895189563
:100010001895189518951895189518951895189578
:100020001895189518958FED8DBFC0ECE8EB4E2E06
:10003000DD275D2EEEE7F0E0A0E6B0E084B7082E05
:10004000877F84BF8FE181BD80E081BD88278D934C
:100050003197E9F766248FEF87BB80E080936000DB
:10006000009160000F3F10F009F009C0A0E68C91EC
:1000700088BBA0E68C918F5F8C9308F4F1CFEDCF15
:10008000F894FFCF3197F1F70895689462F80895D6
:06009000E89462F80895F7
:00000001FF
Még az assembly-ben írt programok is beszédesek az ember számára, hiszen jellegzetes változóneveket használhatsz, struktúráltan írhatod meg a programodat, ilyesmi.
Na ez disasm után felejtős. Elég száraz anyag a végeredmény...
Tehát legalább 1 percig törd a fejed, vajon mivé lehet ezt még visszaforgatni, ismerve az architektúrát amire készült.
De mivel szinte semmi sem lehetetlen, így ez sem. Csak ember legyen a talpán aki átlátja az eredményt
-
Hooligan01
-
Hooligan01
Gugli a barátod, wiki a barátnőd....
Csak egy példa a sok közül:
http://avr.jassenbaum.de/ja-tools/reavr.html
Csak egy példa a sok közül:
http://avr.jassenbaum.de/ja-tools/reavr.html
Biztos HEX?
Bascom, mint programozó ->
http://avr.tavir.hu/modules.php?name=Co ... age&pid=49
Van olyan HEX, ami érdekes. Pl mert kisebb chipbe akarod beletuszkolni, mint amihez kitalálták, és a Flash területet túlnövi.... Vagy EEPROM-ként akarod a Flash métretnyit beégetni....
A Pony tényleg felejtős.....
Hacsak nem sok IC-d van, és nem baj, ha 1-2 meghal a kísérletek alatt.....
Bascom, mint programozó ->
http://avr.tavir.hu/modules.php?name=Co ... age&pid=49
Van olyan HEX, ami érdekes. Pl mert kisebb chipbe akarod beletuszkolni, mint amihez kitalálták, és a Flash területet túlnövi.... Vagy EEPROM-ként akarod a Flash métretnyit beégetni....
A Pony tényleg felejtős.....
Hacsak nem sok IC-d van, és nem baj, ha 1-2 meghal a kísérletek alatt.....
