2017-03-29 4 views
0

Ich möchte Maschinencode von XBee DigiMesh Firmware (Cortex-M3, EM357) zu extrahieren, so habe ich SREC-Datei mit 3 Abschnitten im Inneren. Ich nehme an, dass einer dieser Abschnitte ein Code-Abschnitt ist, aber arm-none-eabi-objdump meldet sehr oft "unbekannter Befehl". Weiß jemand, warum das passiert?Kann Maschinencode von Cortex-M3-Firmware nicht extrahieren

Dies ist, wie ich versuche, dies zu tun:

arm-none-eabi-objcopy --input-target=srec --output-target=binary -j .sec2 xbp24-dm_8073.ehx2.dec sec2.bin 
arm-none-eabi-objdump -D -bbinary -marm -Mforce-thumb sec2.bin 

Update: gibt es Antwort auf https://reverseengineering.stackexchange.com/questions/15049/cant-extract-machine-code-from-cortex-m3-firmware

+0

fragen Sie dies auf der Website [Reverse Engineering] (http://reverseengineering.stackexchange.com/) –

Antwort

0

Der Cortex-m3 unterstützt thumb2, was variable Instruktionslänge ist, kann man nicht einfach am Anfang beginnen und einen Befehlssatz variabler Länge disassemblieren. Man kann/wird leicht aus dem Takt geraten und die Ausgabe wird zu Müll und bleibt für immer so. Wahrscheinlich nicht in diesem Fall, aber Sie werden Fehler haben, das wird erwartet. Es ist durchaus möglich, dass sie Elemente hinzugefügt haben, um einen Disassembler zu verwirren.

Auch Sie könnten eine Menge Daten haben hier, oder es könnte Code komprimiert werden, oder wer weiß was sonst ...

Sein einem Cortex-m das erste Stück Worte sind keine Vektortabelle, so Was ist dieser Code? Wenn Sie die Ausgabe auf die Weise untersuchen, wie Sie die gnu-Tools verwendet haben, sieht das nicht wie echter Code aus, also vielleicht verschlüsselt oder komprimiert oder anders. Siehst du Stack-Frames, die gebaut werden und Funktionen, die mit einem Pop (ldmia) enden, das das Link-Register mit einigen statischen Wörtern danach enthält, was dann wie der Anfang der nächsten Funktion aussieht? Zugegeben, es könnte nicht alles kompilierter Code sein, aber einige davon sollten wie kompilierter Code aussehen.

Wenn Sie versuchen, einige Firmware zu hacken, sollten Sie vielleicht herausfinden, wie/wo dies geladen ist und einen Befehlssatz-Simulator erstellen/verwenden. ohne eine Vektor-Tabelle zu beginnen mit, aber viel Spaß.

so, wie Sie Ihre Demontage haben Sie die Adresse Inhalt

S123110001BE8110204D5401BE96102452... 
0x1100 : 0x01BE 
0x1102 : 0x8110 
0x1104 : 0x204D 
0x1108 : 0x5401 
0x110C : 0xBE96 
0x110E : 0x1024 

und so weiter verloren, dass oder byteswapped wahrscheinlich

0x1100 : 0xBE01 
0x1102 : 0x1081 

Sie könnten, dass die SREC nehmen und ein Programm erstellen:

.hword 0xbe01 
.hword 0x1081 

eins für jeden zusammenhängenden Adressbereich von Elementen, wenn die Adresse springt, beginnt ein neues Datei, erstellen Sie ein Linker-Skript, um die Startadressen jedes Abschnitts abzudecken, assemblieren Sie, erstellen Sie eine _start-Beschriftung in einem von ihnen, verknüpfen Sie mit dem Skript, dann haben Sie eine Elfe, die Sie zerlegen können, ich erwarte immer noch, dass es problematisch ist, aber einige von die relative Adressierung wäre sinnvoll und/oder absolut adressierbar.

Beachten Sie auch, Ihren Eintrittspunkt

S903189351 

dass real vorausgesetzt, kein Grund davon ausgehen, dass es ist.

Verwandte Themen