Pagina 1 di 1

[RISOLTO]Hexdump/Hexedit: incongruenza offset

Inviato: dom ott 29, 2017 12:18
da rik70
Stavo "giocando" con un router adsl2+ Netgear DG834.

Seguivo questa guida per il flashing del firmware OpenWRT.

Ho fatto il dump del bootloader come spiegato nella sezione 'Obtaining your current Bootloader', ho verificato l'md5sum

Codice: Seleziona tutto

md5sum mtd2
0530bfdf00ec155f4182afd70da028c1  mtd2
e torna perfettamente:
The MD5 sum of mtd2.bin should be 0530bfdf00ec155f4182afd70da028c1


Ora dovrei modificarlo, come spiegato nel paragrafo 'Disable firmware checksum verification':
Modify the bootloader binary file with a hex editor:

go to offset 0x3944. Here there should be 4 bytes: 44 09 00 0C (representing jal 0x90002510 during execution)
Replace these 4 bytes with 00 (representing nop).

Il problema è che non trovo l'offset 0x3944. Provo allora a cercare i 4 byte '44 09 00 0C':

Codice: Seleziona tutto

hexdump -C mtd2 | grep -i '44 09 00 0C'
e salta fuori:

Codice: Seleziona tutto

00002ce0  03 00 40 14 00 00 00 00  44 09 00 0c 01 00 04 24
00002d00  03 00 40 14 00 00 00 00  44 09 00 0c 21 20 00 00
00003940  fc e1 84 24 44 09 00 0c  01 00 04 24 01 00 04 24
00003960  21 38 00 02 62 0e 00 08  20 00 bf 8f 44 09 00 0c

Noto subito che c'è un '0x3940'.
Sarà lui? Impossibile, penso, anche se 'vicino'.

Ma provo lo stesso - tanto non devo flashare. Lancio hexedit e modifico:

Codice: Seleziona tutto

## prima della modifica:
00003940   FC E1 84 24 44 09 00 0C  01 00 04 24 01 00 04 24

## dopo la modifica:
00003940   FC E1 84 24 00 00 00 00  01 00 04 24 01 00 04 24


Salvo e verifico l'md5, sapendo che non potrà mai "tornare":

Codice: Seleziona tutto

md5sum mtd2
d8a2f4623bf6f64b7427812f0e849aa7  mtd2

E invece torna perfettamente :!:
[...]
Confirm the new MD5 of the modified mtd2.bin is d8a2f4623bf6f64b7427812f0e849aa7.


Com'è possibile... sapete darmi una spiegazione? C'è un refuso nella guida ...o sono io che non sono capace?

Grazie in anticipo.

Re: Hexdump/Hexedit: incongruenza offset

Inviato: dom ott 29, 2017 12:54
da brg
rik70 ha scritto:Il problema è che non trovo l'offset 0x3944. Provo allora a cercare i 4 byte '44 09 00 0C':

Codice: Seleziona tutto

hexdump -C mtd2 | grep -i '44 09 00 0C'
e salta fuori:

Codice: Seleziona tutto

00002ce0  03 00 40 14 00 00 00 00  44 09 00 0c 01 00 04 24
00002d00  03 00 40 14 00 00 00 00  44 09 00 0c 21 20 00 00
00003940  fc e1 84 24 44 09 00 0c  01 00 04 24 01 00 04 24
00003960  21 38 00 02 62 0e 00 08  20 00 bf 8f 44 09 00 0c

Noto subito che c'è un '0x3940'.
Sarà lui? Impossibile, penso, anche se 'vicino'.


Avresti dovuto anche notare che la riga seguente inizia con 3960, che ogni riga contiene 16 byte (= 10 esadecimale) e poi concludere che 3940 si riferiva all'indirizzo del primo byte ("fc"), mentre il byte numero 3944 è proprio quel "44" che cercavi.
Comunque io uso okteta, objdump e nm per fare questa roba.

Edit: quando prima ho scritto il messaggio ero rimasto confuso dagli indirizzi 3940->3960 e pensavo che fossero organizzati a gruppi di 20, invece era solo il grep che aveva scartato la riga del 3950. :oops:

Re: Hexdump/Hexedit: incongruenza offset

Inviato: dom ott 29, 2017 14:35
da rik70
brg ha scritto: [...]concludere che 3940 si riferiva all'indirizzo del primo byte ("fc"), mentre il byte numero 3944 è proprio quel "44" che cercavi
#-o

Ecco che qui casca l'asino, cioè il somaro, ovvero io :)

Quindi la faccenda torna.

Grazie mille.