[RISOLTO]Hexdump/Hexedit: incongruenza offset

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
rik70
Master
Master
Messaggi: 1779
Iscritto il: gio mar 10, 2011 9:21
Slackware: 14.1
Kernel: 4.0.x-smp
Desktop: Xfce 4.12

[RISOLTO]Hexdump/Hexedit: incongruenza offset

Messaggioda rik70 » dom ott 29, 2017 12:18

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.
Ultima modifica di rik70 il dom ott 29, 2017 14:42, modificato 1 volta in totale.

Avatar utente
brg
Linux 2.4
Linux 2.4
Messaggi: 412
Iscritto il: sab mar 12, 2011 14:20
Slackware: 14.2
Kernel: 4.4.38
Desktop: KDE4
Località: Montecatini
Contatta:

Re: Hexdump/Hexedit: incongruenza offset

Messaggioda brg » dom ott 29, 2017 12:54

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:

rik70
Master
Master
Messaggi: 1779
Iscritto il: gio mar 10, 2011 9:21
Slackware: 14.1
Kernel: 4.0.x-smp
Desktop: Xfce 4.12

Re: Hexdump/Hexedit: incongruenza offset

Messaggioda rik70 » dom ott 29, 2017 14:35

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.