Forum: Compiler & IDEs GNU und Reverse Engineering


von Steffen Hausinger (Gast)


Lesenswert?

Hallo zusammen,

angenommen, ich habe den Programmcode aus einem µC ausgelesen. 
Anschließend habe ich ihn disassembliert. Und weil das bei der 
Interpretation noch zu unübersichtlich war, habe ich ihn manuell in 
Pseudo-C-Code decompiliert.

Jetzt möchte ich gerne diesen Pseudo-C-Code per GNU debuggen. Das 
Problem ist, dass ich ihn natürlich nicht mit GCC bauen kann, da es ja 
nur Pseudo-C-Code ist. Wenn ich das aber nicht kann, gibt es auch keine 
Symboldatei (elf), die ich in GDB laden kann.

Mein erster Lösungsansatz: Ich schreibe den disassemblierten Code in 
eine C-Datei und füge den Pseudo-C-Code als Kommentar hinzu. Das Ganze 
lasse ich mit GCC bauen (sollte binärkompatibel zum Original sein, 
oder?) und lade es dann in GDB. So kann ich in GDB den Pseudo-C-Code als 
Kommentar sehen.

Leider kann ich mit dem Ansatz kein Watch machen (bzw. nur auf 
Assembler-Ebene) und außerdem steppe ich natürlich immer durchs Assembly 
(und nicht gleich zum nächsten C-Befehl).

Gibt es noch andere Möglichkeiten? Ist es möglich, aus meinem 
Pseudo-C-Code eine Pseudo-ELF-Datei zu erstellen? Gibt es dafür einen 
Editor?

Grüße
Steffen

von Toni Tester (Gast)


Lesenswert?

Steffen Hausinger schrieb:
> sollte binärkompatibel zum Original sein, oder?

Warum?
Es gibt nicht nur unterschiedliche Compilersettings, sondern auch 
unterschliedliche Compilerversionen...

von Steffen Hausinger (Gast)


Lesenswert?

Toni Tester schrieb:
> Warum?
> Es gibt nicht nur unterschiedliche Compilersettings, sondern auch
> unterschliedliche Compilerversionen...

Ich gehe davon aus, dass der Compiler selbst gar nicht aktiv wird, wenn 
er bereits mit Assemblercode gefüttert wird.

von Clemens L. (c_l)


Lesenswert?

Steffen Hausinger schrieb:
> Ich schreibe den disassemblierten Code in eine C-Datei und füge den
> Pseudo-C-Code als Kommentar hinzu.

Der disassemblierte Code gehört in eine Assembler-Datei (die nach dem 
Assemblieren den selben Maschinencode ergeben sollte).

von Rolf Magnus (Gast)


Lesenswert?

Steffen Hausinger schrieb:
> Gibt es noch andere Möglichkeiten? Ist es möglich, aus meinem
> Pseudo-C-Code eine Pseudo-ELF-Datei zu erstellen?

Wenn du einen Compiler für dein Pseudo-C schreibst. Mir ist der Sinn 
nicht so ganz klar. Wenn du nur Assembler hast, kannst du auch nur 
richtig auf Assembler-Ebene Debuggen. Was soll es denn bringen, von Hand 
irgendeinen Pseudocode zu schreiben, der dem theoretisch entsprechen 
sollte und diesen dann zu debuggen?

> Gibt es dafür einen Editor?

Wofür? Für Pseudocode?

von Steffen Hausinger (Gast)


Lesenswert?

Der disassemblierte, unverarbeitete Code ist sehr komplex. Deshalb habe 
ich ihn abstrahiert und dadurch vereinfacht. Beispiel:
1
    lea RAM_abc,r0
2
    add r1,r0
3
    mov (r0),r1
4
    cmp #0,r1
5
    beq loc_xy
6
    sub #1,r1
7
    mov r1,(r0)
8
xy: ...
wird einfach zu
1
if(RAM_abc[r1] > 0)
2
    RAM_abc[r1]--;

Das Ergebnis ist für meinen Geschmack deutlich übersichtlicher. Das 
Verstehen fällt mir leichter.



Rolf Magnus schrieb:
>> Gibt es dafür einen Editor?
>
> Wofür? Für Pseudocode?

Für elf Dateien. Ich möchte meinen Assembly-Code mit meinem 
Pseudo-C-Code anreichern. Ziel ist es, mit GDB durch den Pseudo-C-Code 
zu steppen, obwohl GDB in Wirklichkeit nur das Assembly ausführt.

von Steffen Hausinger (Gast)


Lesenswert?

Nachtrag: Ähnlich wie in der Darstellung "Mixed Source+Assembly". Dort 
wird, nach meinem Verständnis, auch das Assembly als Basis genommen und 
der C-Code stellt nur die Basis für das Steppen dar.

von Steffen Hausinger (Gast)


Lesenswert?

Ist niemand hier, der sich mit DWARF oder stabs auskennt und mir 
weiterhelfen kann?

von Jack (Gast)


Lesenswert?

Steffen Hausinger schrieb:
> Hallo zusammen,
>
> angenommen, ich habe den Programmcode aus einem µC ausgelesen.
> Anschließend habe ich ihn disassembliert. Und weil das bei der
> Interpretation noch zu unübersichtlich war, habe ich ihn manuell in
> Pseudo-C-Code decompiliert.
>
> Jetzt möchte ich gerne diesen Pseudo-C-Code per GNU debuggen.

GDB ist ein guter Debugger aber leider nicht für Reverse Engineering 
gemacht. Für ernsthaftes Reverse Engineering mit Debugging nimmt man IDA 
Pro

https://www.hex-rays.com/products/ida/index.shtml

Kostet allerdings so um die 1000 Euro.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.