Hallo .... ich hab ein Problem was mich seit Tagen beschäftigt. Habe von einem µC-Prozessor die *.bin Datei ausgelesen gibt es ein Programm was mir die *.bin Datei wieder in Assembler zurück wandelt so das man es verständlich lesen kann. für hilfreiche Antworten wäre ich euch dankbar. Grüße
So ein Programm heißt "Disassembler". Wirklich glücklich wirst Du damit aber auch nicht, weil alle symbolischen Bezeichnungen und alle Kommentare fehlen.
Servus ..... Danke für euere Antwort. Habe ich schon gemacht aber wie schon gesagt glücklich bin ich nicht geworden er zeigt mir schon die Adressen an und die operationen die er durchführt aber sehr schwer lesbar ist dieser Code dachte da gibt es noch was angenehmer ist zum lesen. Der Prozessor ist von Motorola MC68HC11F1 Grüße
Mehr steckt an Informationen auch nicht drin, wenn man nur den Binärcode hat.
Wenn man nur den Binärcode (Hex-Datei) hat, nützt ein Disassembler evtl. nur wenig. Der kann nämlich nicht unterscheiden, ob das Byte zu einem Text gehört, oder ob es ein z.B. Befehl ist. Da kann, besonders wenn Texte "wild" im Programmcode verteilt sind, beim disassemblieren totaler Mist rauskommen, berücksichtige das bitte. Texte kann man (noch) finden wenn man einen Hex-Editor benützt der einmal die Hexdatei und daneben die ASCII-Äquivalente anzeigt. Aber das ist nur ein Notnagel.
Die einfachste Lösung ist, die Funktion des Programms zu analysieren und dann selbst ein neues Programm zu schreiben. ...
IDA ist meiner Meinung nach das beste Tool zum Reverse Engeneering und Analysieren. Aber da mußt du trotzdem schon ganz schön auf Zack sein um was anständiges hinzukriegen. http://de.wikipedia.org/wiki/The_Interactive_Disassembler
Was für ein µC ists denn? Bei AVRs hab ich reAVR verwendet. Ist ganz ordentlich und kann auch meist zwischen Daten und Befehlen unterscheiden.
Um mit einem Disassembler einen unbekannten EPROM-Inhalt (Bin-Datei) entschlüsseln zu können, braucht es äußerst genaue Kenntnisse des Prozessors, (interne Register und deren Funktion, Befehlssatz, Auswirkungen der Befehle auf den Prozessorstatus usw.) der verwendeten Hardware (Mem-Map, I/O-Adressen usw.) und sehr großes Programmier-Knowhow in Assembler. Ist eine dieser Voraussetzungen nicht da, ist das Scheitern absolut vorprogrammiert. Ein Disassembler ist nicht unbedingt nötig, wenn auch sehr praktisch und zeitsparend. Ich hatte gaaaaaaaanz früher (also heute gar nicht mehr wahr ;-) Kollegen, die am Hexbyte den Befehl erkannt haben (beim Z80 C3h + Sprungadresse für einen absoluten Jump z. B.), die also die Bin-Datei mit einem Hexeditor aufgerufen haben und dann angesagt haben, was das Programm wie macht.
Ich bedanke mich schon mal im voraus bei euch an eurer Teilnahme an meiner Lösung. Sinn und Zweck ist es das ich ein Kommunikationsprotokoll implementieren möchte das Gerät hat eine RS232 Schnittstelle. Ich habe den Prozessor ausgelesen um zu wissen welche Werte er im RAM speichert und wie ich Werte setzen kann. Dazu habe ich meine BIN Datei die ich soweit analysieren muss was er für Steps durchführt sprich die Analyse des Programms im µC. IDA und anderen diversen disassembler brachten keine Erfolg da sie eigentlich unlesbaren Code erzeugen der mir nicht weiter hilft. Den Befehlssatz sowie das DataSheet vom µC habe ich mir schon bereits besorgt und weiß auch welche Register und I/O Ports usw... wie arbeiten. Mein Problem ist es wie Analysiere ich die BIN Datei sodaß ich den Programmablauf intern des µC weiß? Grüße
> Sinn und Zweck ist es das ich ein Kommunikationsprotokoll implementieren > möchte das Gerät hat eine RS232 Schnittstelle. > Ich habe den Prozessor ausgelesen um zu wissen welche Werte er im RAM > speichert und wie ich Werte setzen kann. Verstehe ich das richtig, dass Du die Bin-Datei soweit ändern willst, dass Du praktisch einen Trojaner einschummelst, der Dir interne RAM-Werte während des normalen Programmbetriebs über die serielle ausgibt bzw. setzt? Hut ab, wenn Du das hinbekommst.
*GAST* schrieb: > Mein Problem ist es wie Analysiere ich die BIN Datei sodaß ich den > Programmablauf intern des µC weiß? Du siehst dir an wo du (bedingte) Sprünge, Funktionsaufrufe usw. hast. Wenn du jetzt noch schreibst welcher µC das ist, dann könnte man dir weitere Infos geben. Beachte aber auch, dass viele µC einen ausleseschutz haben und dann nur Zufallsdaten oder irgendwas anderes ausgeben!! *GAST* schrieb: > IDA und anderen diversen disassembler brachten keine Erfolg da sie > eigentlich unlesbaren Code erzeugen der mir nicht weiter hilft. Wenn dir der Code von IDA noch zu unleserlich ist, dann wirst du insgesamt keinen Erfolg haben... Wenn du C nach assembler compilierst, dann verliert man alle Bezeichnungen von Variablen, manchmal ändert sich sogar die Reihenfolge von Befehlen und Sachen die in Variablen gespeichert waren, werden so optimiert dass es nur noch in den Prozessorregistern selbst abläuft. Besseren code als sowas (nur ein beispiel, kein weiterer sinn dahinter) wirst du NIE bekommen: ... ldi r16,0xF0 out 0x12,r16 in r15,0x11 cpi r15,3 rjmp asdf clr r0 add r15,r1 adc r17,r0 usw... Wenn du den Prozessor kennst, kannst du sowas wie 0x12 dann durch das jeweilige Register ersetzen. Aber wie schon geschrieben: Dazu braucht man viel Erfahrung.
Johannes O. schrieb: > (nur ein beispiel, kein weiterer sinn dahinter) Aber aber, stell dein Licht mal nicht so unter den Schemel. Woher hast du diesen ausgefeilten Algorhitmus?
Lothar Miller schrieb: > Johannes O. schrieb: >> (nur ein beispiel, kein weiterer sinn dahinter) > Aber aber, stell dein Licht mal nicht so unter den Schemel. > Woher hast du diesen ausgefeilten Algorhitmus? ??? trollolo? ;-) Was ich damit sagen wollte: Es gibt viele Leute die denken: Wenn man da "decompiliert", dann erhält man wieder den C-Code. Aber genau das ist eben nicht der Fall und JA, es ist sehr mühsam sich durch irgendeinen Assemblercode durchzuarbeiten.
@Johannes O. > Wenn dir der Code von IDA noch zu unleserlich ist, dann wirst du > insgesamt keinen Erfolg haben... Genau besser gehts nicht
> Wenn du jetzt noch schreibst welcher µC das ist, dann könnte man dir > weitere Infos geben. 8:21 Uhr > Der Prozessor ist von Motorola MC68HC11F1
Servus miteinander ..... Nicht das wir uns falsch verstehen ich möchte den Programmablauf nicht verändern unter anderem auch kein Trojaner schreiben. Mein Ziel ist es den Prgrammablauf vom uC(Prozessor: MC68HC11F1 von Motorola) zu verstehen und zu analysieren sodas ich über die RS232 Schnittstelle mit dem µC kommunizieren kann. Und ich will nicht den Programmablauf verändern im Gegenteil ich will Werte auslesen die er über seine Ports einließt und im RAM ablegt oder Werte zu setzen die er auch dann umsetzt im Gerät. Danke für den Tipp ich werde die Adressen mal ersetzen durch die Register vielleicht bekomme ich dann bischen Licht ins Dunkele :-) Um das Gerät handelt es sich um ein Plasma Generator. Grüße
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.