Hallo Ich hab vor vielen Jahren ein Programm in C Geschrieben und mit make Compiliert. Nun habe ich dieses Tool viele Jahre verwendet und in der Zeit den Quelltext verloren. (ich denke auf irgendeinem Backup ist er aber ich finde ihn nicht). Jetzt würde ich gerne eine Zahl welche ich damals fest einprogrammiere verändern. Ich weiß noch die alte Zahl und ich weiß in welchem If Statement sie stand. Ich bin nicht der Pro Programmierer aber ich denke das ich die Stelle sicher auch in einem Asm code erkennen würde. Gibt es einen decompiler in Linux (Ich habe kein Windows) welcher mir ermöglicht den Code minimal zu verändern und wieder abzuspeichern?
objdump -S --disassemble helloworld > helloworld.dump Kann klappen, muss aber nicht. Grüsse, René
Du kannst ein Tool wie z.B. Hopper oder radare2 benutzen um die Adresse im Binary zu finden, und dann koenntest du die entsprechende Stelle einfach mit einem Hexeditor bearbeiten, speichern, fertig. Hopper (gibt auch eine Testversion): https://www.hopperapp.com/ radare2: https://radare.org/r/index.html Hexeditor deiner Wahl, ich habs gerade mal mit Bless gemacht. (schlechtes) Beispiel:
1 | #include <stdio.h> |
2 | |
3 | int main(void) |
4 | {
|
5 | int x = 42; |
6 | |
7 | printf("x ist %i\n", x); |
8 | |
9 | return 0; |
10 | }
|
Compiliert mit:
1 | $ gcc -Wall -Wextra -O0 -o main test.c |
1 | $ ./main |
2 | x ist 42 |
Siehe Bilder: Hopper aufmachen und Binary reinziehen, die entsprechende Zeile markieren (hopper_01.png) und dann im Menue "Window" auf Hexeditor umschalten. Die vorher markierte Zeile ist jetzt gestrichelt umrandet (hopper_02.png). Man kann die entsprechende Stelle hier bearbeiten und dann ueber "File -> Produce new Executable" ein neues Binary erstellen lassen, welche die Aenderung enthaelt. Ich glaube das bearbeiten und neu erstellen geht in der Hopper-Testversion nicht (Vollversion kostet ~100 Euro). Aber du hast jetzt eine Bytefolge, nach der du mit einem Hexeditor suchen kannst. Stelle bearbeiten, speichern und fertig. :) Die entsprechende Stelle findet man aber auch mit objdump, siehe mein Vorposter: René H. schrieb: > objdump -S --disassemble helloworld > helloworld.dump Ab da ist das vorgehen dasselbe: Stelle mit Hexeditor suchen, aendern, fertig. :)
:
Bearbeitet durch User
Samme schrieb: > Jetzt würde ich gerne eine Zahl welche ich damals fest einprogrammiere > verändern. Wenn die Zahl in irgend einer Form "Speziell" ist, muss sie im Kompilat nichtmal als Hexfolge auftauchen. Außerdem könnte der Compiler durchaus auf die Idee gekommen sein, mehrere Kopien der Zahl im Code zu verwenden. Man wird außer in tivialen Fällen nicht um eine Analyse des Dekompilierten Assemblers herum kommen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.