我有一个大学项目,我必须解压缩二进制文件。所以我试过了凯普斯。我用Java试了几个星期,但它没有用,所以从昨天起我自学了一点Python。要阅读Binary我试过:
file = open('binary_file')
content = file.readlines()
从这个链接:在Python中读取二进制文件(.out)并用Capstone反汇编以及从capstone http://www.capstone-engine.org/lang_python.html中反汇编的指令
我有来自在线反汇编程序的解决方案,结果是超过13000行。当我开始我的时候我只得到一个(0x1000:sc 0x2b)。我无法找到错误,因为在我看来它没事,但我没有Python或Capstone的任何计划。
顺便说一句,来自Capstone页面的Testcode运行正常,所以我认为安装没有任何问题。
代码:
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 :(得分:0)
像Capstone这样的反汇编程序库会将您提供的所有内容视为指令字节,但正常的二进制文件除了包含指令外,还包含许多其他内容。他们中的大多数都是从某种头开始,而不是代码。
因此,需要进行一些分析以确定二进制的哪些部分是代码,数据,资源,重定位表等等,并且仅将实际代码(即指令字节)提供给反汇编引擎。此分析还需要确定要反汇编的代码的某些环境参数,例如操作系统将加载的地址,入口点的地址或需要应用的重定位。此分析由IDA等程序自动完成(其中有free version);这些通常被称为反汇编者'但事实上,原始指令反汇编逻辑只占其分析能力的一小部分。有关详细信息,请查看有关逆向工程的主题Disassembler for batch/automated processing。
当然,如果你的二进制文件只包含原始指令流,那么这一切都没有用......