2016-04-30 5 views
0

Ich habe ein Universitätsprojekt, in dem ich binäre Dateien disasemble bin. Deshalb habe ich Capstone ausprobiert. Ich habe Wochen mit Java versucht, aber es hat nicht funktioniert, seit gestern habe ich mir ein wenig Python beigebracht. Um die Binary zu las ich versucht:Capstone Zerlegen von Binärdatei in Python

file = open('binary_file') 
content = file.readlines() 

von diesem Link: Lesen Binärdatei (.out) in Python und zerlegen mit Capstone und den Anweisungen von capstone zu zerlegen http://www.capstone-engine.org/lang_python.html

Ich habe die Lösungen aus einer Online Disassembler und das Ergebnis ist etwas mehr als 13000 Zeilen. Wenn ich meins starte, bekomme ich nur eins (0x1000: sc 0x2b). Ich kann den Fehler nicht finden, weil es in meinen Augen in Ordnung ist, aber ich habe keinen Plan von Python oder Capstone.

Übrigens funktioniert der Testcode von der Capstone Seite gut, also ist nichts falsch mit der Installation, die ich denke.

Code:

from capstone import * 

file = open('C:/...sth', 'rb') 
content = file.read() 

ergebnism = open("C:/.../ergebnis.txt", "w") 
mi = Cs(CS_ARCH_MIPS, CS_MODE_MIPS32) 
for i in mi.disasm(content, 0x1000):  
    print("0x%x:\t%s\t%s" %(i.address, i.mnemonic, i.op_str)) 
    #for (address, size, mnemonic, op_str) in mi.disasm_lite(content,0x1000):  
    # print("0x%x:\t%s\t%s" %(address, mnemonic, op_str)) 
    ergebnism.write("0x%x:\t%s\t%s" %(i.address, i.mnemonic, i.op_str)) 
    ergebnism.write("\n") 
ergebnism.close() 

file2 = open('C:/...erdb', 'rb') 
content2 = file2.read() 

ergebnisp = open("C:/.../ergebnisp.txt", "w") 
pp = Cs(CS_ARCH_PPC, CS_MODE_64) 
for i in pp.disasm(content, 0x1000): 
    print("0x%x:\t%s\t%s" %(i.address, i.mnemonic, i.op_str)) 
    #for (address, size, mnemonic, op_str) in pp.disasm_lite(content2, 0x1000): 
    #print("0x%x:\t%s\t%s" %(address, mnemonic, op_str)) 
    ergebnisp.write("0x%x:\t%s\t%s" %(i.address, i.mnemonic, i.op_str)) 
    ergebnisp.write("\n") 
ergebnisp.close() 
+0

Ja, wirklich toll. Danke, dass Sie meinen Text zweimal richtig gelesen haben, aber ich habe immer noch keine Antwort auf die Frage und morgen muss ich sie senden. Und ich weiß nicht, wie man die Korrektur annimmt, aber das ist gegenwärtig wirklich nicht in meinem Interesse – AzadefiaS

Antwort

0

Disassembler Bibliotheken wie Capstone behandeln alles, was Sie füttern als Befehlsbytespeicher aber normale Binärdateien sind in der Regel eine Menge andere Dinge neben Anweisungen enthalten. Die meisten beginnen mit einer Art Header, nicht mit Code.

Daher ist eine Analyse erforderlich, um festzustellen, welche Teile eines Binärcodes Code, Daten, Ressourcen, Verschiebungstabellen und was nicht sind, und nur den tatsächlichen Code (d. H. Anweisungsbytes) an die Disassembler-Engine zu liefern. Diese Analyse wird auch benötigt, um bestimmte Umgebungsparameter für den zu demontierenden Code zu bestimmen, wie die Adresse, unter der er vom Betriebssystem geladen wird, die Adresse des Einstiegspunkts oder die Umsetzungen, die angewendet werden müssen.

Diese Analyse wird automatisch von Programmen wie IDA (von denen gibt es eine free version); Diese werden oft als "Disassembler" bezeichnet, aber die Disassemblierungslogik für rohe Befehle macht nur einen winzigen Teil ihrer Analysefähigkeiten aus. Weitere Informationen finden Sie unter Disassembler for batch/automated processing über Reverse Engineering.

Natürlich, das ist egal, wenn Ihre Binärdateien nur rohe Befehlsströme enthalten ...