【问题标题】:Capstone Disassemble from Binary File in PythonCapstone 从 Python 中的二进制文件反汇编
【发布时间】:2016-04-30 19:15:08
【问题描述】:

我有一个大学项目,我必须在其中反汇编二进制文件。因此,我尝试了 Capstone。我用 Java 尝试了几个星期,但它没有用,所以从昨天开始我自学了一点 Python。要阅读我尝试过的二进制文件:

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

从此链接:Reading Binary File (.out) in Python and disassemble with Capstone 以及从 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()

【问题讨论】:

  • 是的,真的很棒。谢谢你两次更正我的文字,但我仍然没有回答这个问题,明天我必须发送它。而且我不知道如何接受更正,但这目前真的不符合我的兴趣

标签: python file binary disassembly capstone


【解决方案1】:

像 Capstone 这样的反汇编程序库将您提供给它们的所有内容都视为指令字节,但普通的二进制文件往往包含许多其他内容,而不是指令。它们中的大多数都以某种标题开头,而不是代码。

因此需要进行一些分析来确定二进制文件的哪些部分是代码、数据、资源、重定位表等等,并且只将实际代码(即指令字节)提供给反汇编引擎。还需要这种分析来确定要反汇编的代码的某些环境参数,例如操作系统将加载代码的地址、入口点的地址或需要应用的重定位。

这种分析是由像IDA这样的程序自动完成的(其中有一个free version);这些通常被称为“反汇编程序”,但实际上原始指令反汇编逻辑仅占其分析能力的一小部分。有关更多信息,请查看有关逆向工程的主题 Disassembler for batch/automated processing

当然,如果你的二进制文件只包含原始指令流,这一切都是没有意义的......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-05
    • 2012-12-26
    • 2015-09-28
    • 1970-01-01
    • 2017-01-03
    • 2017-05-18
    • 1970-01-01
    相关资源
    最近更新 更多