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
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.
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
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.
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