2016-04-30 2 views
0

У меня есть университетский проект, в котором я должен дизассемблировать двоичные файлы. Поэтому я пробовал Capstone. Я пробовал недели с Java, но он не работал, так как вчера я научил себя немного Python. Чтобы прочитать Binary я пробовал:Capstone Disassemble from Binary File in Python

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

по этой ссылке: Чтение бинарного файла (.OUT) в Python и разбирать с Capstone и инструкцией разобрать из замкового http://www.capstone-engine.org/lang_python.html

У меня есть решения от онлайн дизассемблер, а результат - более 13000 строк. Когда я запускаю мой, я получаю только один (0x1000: sc 0x2b). Я не могу найти ошибку, потому что в моих глазах все в порядке, но у меня нет плана Python или Capstone.

Кстати, тестовый код с страницы Capstone работает отлично, поэтому ничего плохого в установке я не думаю.

Код:

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

Да, действительно здорово. Thanlk вы для исправления моего текста два раза, но я до сих пор не получил ответа на вопрос, и завтра я должен его отправить. И я не знаю, как принять исправление, но это НАСТОЯЩЕЕ действительно не в моих интересах – AzadefiaS

ответ

0

Дизассемблер библиотеки Capstone относиться ко всему, вы кормите их в качестве инструкции байты но нормальные бинарные файлы, как правило, содержат много других вещей, кроме инструкций. Большинство из них начинаются с какого-то заголовка, а не с кода.

Следовательно, необходим некоторый анализ, чтобы определить, какие части двоичного кода являются кодом, данными, ресурсами, таблицами перемещения и еще что-то еще, и подавать только фактический код (например, байты инструкций) в механизм дизассемблера. Этот анализ также необходим для определения определенных параметров окружающей среды для кода, который должен быть разобран, например, адрес, на который он будет загружен операционной системой, адрес точки входа или перестановки, которые необходимо применить.

Этот анализ автоматически выполняется такими программами, как IDA (из которых free version); их часто называют «дизассемблерами», но на самом деле логика разборки исходной команды составляет лишь крошечную часть возможностей анализа. Для получения дополнительной информации ознакомьтесь с темой Disassembler for batch/automated processing over in Reverse Engineering.

Конечно, все это спорно, если ваши двоичные файлы содержат только сырая инструкцию потоки ...