GNU und Reverse Engineering

Gast #4820818
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
Gast #4821138
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?
Gast #4821217
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.
Gast #4821228
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.
Gast #4822255
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren