Abo
  • Services:
Anzeige
Code des Bootloaders
Code des Bootloaders (Bild: Christer Weinigel)

Firmware disassemblieren

Was soll ich jetzt damit anstellen? Eine Möglichkeit, um mehr über das System herauszufinden, ist es, die Firmware zu disassemblieren. Dabei wird der binäre Maschinencode mit Hilfe eines Disassemblers in eine symbolische Assemblersprache umgewandelt, die ein Mensch versteht. Einfachere Varianten übersetzen den Maschinencode rein mechanisch in symbolische Instruktionen, bessere können den Programmablauf analysieren und auch die Struktur des Codes ermitteln. Manche Disassembler-Programme ermöglichen auch ein interaktives Vorgehen, so können Anmerkungen eingefügt oder die Übersetzung beeinflusst werden. Sogenannte Decompiler können sogar Maschinencode in höhere Sprachen übersetzen, wie zum Beispiel C oder Go.

Anzeige

Programme zum Disassemblieren

Ich benötige ein Werkzeug, mit dem ich auf einen Codebereich schauen und Anmerkungen einfügen kann, während ich lerne, den Code zu verstehen. Deswegen schaute ich mir verschiedene Disassembler an.

IDA ist eines der besten kommerziellen Programme. Ich habe es schon vor zehn Jahren benutzt, und auch wenn es etwas schrullig war, hat es gut funktioniert und sollte heute sogar noch besser sein. Aber für die Analyse von ARM-Code ist es recht teuer und ich will für ein Hobbyprojekt nicht soviel Geld ausgeben.

Ich probiere auch einige Online-Disassembler, aber sie kommen mit meinem Speicherabbild nicht zurecht. Also probiere ich auch einige Open-Source-Programme aus. Manche sehen sehr provisorisch aus oder sind lange Zeit nicht aktualisiert worden. Trotzdem schaue ich mir einige genauer an.

Ich probiere Radare. Es scheint tauglich für meine Ansprüche, aber es wirkt, als ob die Programmierer an das Motto glauben: "Es war schwer zu schreiben, also sollte es auch schwer zu nutzen sein". Ich verstehe die Dokumentation nicht, sie wirkt wie eine Übersicht für Leute, die es bereits kennen. Und ich komme nicht mit der Benutzeroberfläche zurecht.

Capstone sieht vielversprechender aus. Es ist ein Fork von Bestandteilen in LLVM, die mit Maschinencode arbeiten. Mir gefällt die Idee, auf LLVM zurückzugreifen, denn es unterstützt viele Prozessoren und das würde auch für den Disassembler gelten. Aber Capstone bietet nur eine Infrastruktur und keine interaktiven Werkzeuge, die mir gefallen, und mir fehlt die Zeit, selber etwas zu schreiben.

Valgrind dient eigentlich zum Speichercheck. Es dekodiert den Maschinencode im Speicher und übersetzt ihn in eine Zwischensprache, fügt dann Code zur Speicherüberprüfung hinzu und übersetzt es wieder in Maschinencode zurück. Valgrind unterstützt ARM und die Zwischensprache sieht nutzbar aus. Aber auch hier handelt es sich eher um Infrastruktur ohne Benutzeroberfläche.

Schließlich stoße ich auf Medusa. Das Programm ist längst noch nicht fertig, es kann nicht alle Instruktionen übersetzen, läuft nicht immer stabil und hat noch einige Bugs. Allerdings kann ich aufgrund des offenen Quellcodes einige Fehler umgehen und die fehlenden Instruktionen ergänzen. Ich entscheide mich schließlich für das Programm.

Ich lade meine Datei in Medusa und beschäftige mich damit, wie das Programm funktioniert. Praktisch an Medusa ist dessen Datenbankformat. Es handelt sich um eine Textdatei in einem leicht verständlichen Format. Ich füge darin einige Bezeichner für diejenigen Speicherbereiche ein, die SoC-Registeradressen entsprechen. So kann ich das Resultat des Disassemblers leichter lesen und verstehen.

Der First-Stage-Bootloader wird analysiert

Ich fange wieder mit dem First-Stage-Bootloader an, er ist klein und hat keinerlei Abhängigkeiten. Perfekt, um mich auch mit Medusa vertraut zu machen. Ich finde zuerst Code, der auf die GPIO-Register zugreift und mit dem DDR-Speicher-Controller kommuniziert. Einen Teil des Codes, der anscheinend mit dem Koprozessor zu tun hat, kann Medusa nicht korrekt übersetzen. Der Code des Bootladers kommuniziert mit dem Flash-Speicher-Controller.

  • Diasembler-Ausgabe (Bild: Christer Weinigel)
  • Diasembler-Ausgabe  (Bild: Christer Weinigel)
  • Diasembler-Ausgabe (Bild: Christer Weinigel)
  • FPGA-Quellcode (Bild: Christer Weinigel)
  • Owon-Bootscreen (Bild: Christer Weinigel)
Diasembler-Ausgabe (Bild: Christer Weinigel)

Ich untersuche den Code nicht allzu genau. Ich weiß ungefähr, was vor sich geht, und die Details sind nicht so wichtig. Was mich interessiert, ist der Code, der den Second-Stage-Bootloader in den DDR-RAM lädt, und ab wo er ausgeführt wird.

  • Diasembler-Ausgabe (Bild: Christer Weinigel)
  • Diasembler-Ausgabe  (Bild: Christer Weinigel)
  • Diasembler-Ausgabe (Bild: Christer Weinigel)
  • FPGA-Quellcode (Bild: Christer Weinigel)
  • Owon-Bootscreen (Bild: Christer Weinigel)
Diasembler-Ausgabe (Bild: Christer Weinigel)

Ich finde Code-Anweisungen, die die ersten 128 KByte vom Flash-Speicher an die Adresse 0x30000000 laden, die Startadresse des DDR-RAMs. Dann werden vom Offset 0xac4 an 70 KByte zur Adresse 0x33c00000 kopiert - die letzten 512 KByte des DDR-RAMs - und dann führt die CPU ab dort den Code aus.

 Reverse Engineering: Wie das Oszilloskop bootetDer Second-Stage-Bootloader ist als Nächstes dran 

eye home zur Startseite
mifish 24. Nov 2016

+1 interessanter artikel

muhviehstah 23. Nov 2016

wäre binwalk hierbei nicht hilfreich gewesen?

muhviehstah 23. Nov 2016

kt

Elchinator 22. Nov 2016

Das wesentlichste Teil - die Hardware - scheint ja ab Werk durchaus brauchbar zu sein...

derdiedas 22. Nov 2016

Danke Golem - und nun bin ich doch wieder motiviert - zwar kein Linux zu installieren...



Anzeige

Stellenmarkt
  1. IABG Industrieanlagen-Betriebsgesellschaft mbH, Koblenz, Ottobrunn bei München
  2. SEITENBAU GmbH, Konstanz
  3. Robert Bosch GmbH, Reutlingen
  4. über Ratbacher GmbH, Karlsruhe


Anzeige
Blu-ray-Angebote
  1. (u. a. Reign, Person of Interest, Gossip Girl, The Clone Wars)
  2. 69,99€ (DVD 54,99€)
  3. (u. a. Forrest Gump 9,97€, Gods of Egypt 9,97€, Creed 8,99€, Cloud Atlas 8,94€)

Folgen Sie uns
       


  1. Surge 1

    Xiaomis erstes Smartphone-SoC ist ein Mittelklasse-Chip

  2. TC-7680

    Kabelmodem für Gigabit-Datenraten vorgestellt

  3. Störerhaftung

    Regierung will Netzsperren statt Abmahnkosten

  4. Voice ID

    Alexa soll Nutzer an der Stimme erkennen können

  5. Chrome

    Bluecoat bremst Einführung von besserem TLS-Protokoll

  6. HTC D4

    Cog Systems will das sicherste Smartphone der Welt zeigen

  7. Raspberry Pi Zero W

    Zero bekommt WLAN und Bluetooth

  8. Gebäudesteuerung

    Luxusklinik vergaß IT im Netz

  9. Internet.org

    Facebook plant neue Flüge für Solardrohne Aquila

  10. Toughbook CF-33

    Panasonics Detachable blendet mit 1.200 Candela/qm



Haben wir etwas übersehen?

E-Mail an news@golem.de


Anzeige
Asus Tinker Board im Test: Buntes Lotterielos rechnet schnell
Asus Tinker Board im Test
Buntes Lotterielos rechnet schnell
  1. Tinker-Board Asus bringt Raspberry-Pi-Klon
  2. Sopine A64 Weiterer Bastelrechner im Speicherriegel-Format erscheint

Trappist-1: Der Zwerg und die sieben Planeten
Trappist-1
Der Zwerg und die sieben Planeten
  1. Weltraumteleskop Erosita soll Hinweise auf Dunkle Energie finden
  2. Astrophysik Ferne Galaxie schickt grelle Blitze zur Erde
  3. Astronomie Vera Rubin, die dunkle Materie und der Nobelpreis

Limux: Die tragische Geschichte eines Leuchtturm-Projekts
Limux
Die tragische Geschichte eines Leuchtturm-Projekts
  1. Limux München prüft Rückkehr zu Windows
  2. Limux-Projekt Windows könnte München mehr als sechs Millionen Euro kosten
  3. Limux Münchner Stadtrat ignoriert selbst beauftragte Studie

  1. Re: Was ist daran "durchaus brauchbar"?

    Reci | 15:40

  2. Re: Mehrere Betriebssysteme...

    nightmar17 | 15:40

  3. Fläsch?

    jayrworthington | 15:37

  4. Re: Das gelang schon vor 50 Jahren

    TheShortOfIt | 15:35

  5. Re: Das Gehäuse

    brotiger | 15:32


  1. 15:23

  2. 14:57

  3. 14:40

  4. 14:28

  5. 13:44

  6. 12:47

  7. 12:21

  8. 12:00


  1. Themen
  2. A
  3. B
  4. C
  5. D
  6. E
  7. F
  8. G
  9. H
  10. I
  11. J
  12. K
  13. L
  14. M
  15. N
  16. O
  17. P
  18. Q
  19. R
  20. S
  21. T
  22. U
  23. V
  24. W
  25. X
  26. Y
  27. Z
  28. #
 
    •  / 
    Zum Artikel