我应该将哪个字节传递给Capstone来反汇编PE-fi的可执行代码

2024-05-27 12:52:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用python使用pefile和capstone反汇编PE可执行文件,以便稍后从该代码中获取CFG。我的想法是获取PE文件中保存可执行代码的部分,并将所有这些字节传递给capstone。我不知道的是,我到底应该将哪个部分传递给capstone,这样在构造CFG时,不需要反汇编更多的代码,并且可以解析rva(即jo 0x10df9,地址0x10df9在反汇编指令列表中)。我试过了

    md.disasm(pe.get_memory_mapped_image(), pe.OPTIONAL_HEADER.AddressOfEntryPoint)

但我担心它会从入口点反汇编到PE的末尾,我只想反汇编可执行代码。我一直在读PE格式,很可能代码总是在section.text中。我也在考虑把这一部分和:

^{pr2}$

然后把这个部分的数据从入口点的字节开始传递给capstone,我认为这可以将数据从起始点到该部分的结尾。在

    md.disasm(code_section.get_data(pe.OPTIONAL_HEADER.AddressOfEntryPoint))

但在这一节的末尾可能是不应该被反汇编的代码(我想,不确定)。所以我要反汇编文件的可执行文件是什么。在


Tags: 文件代码可执行文件get字节cfgmdoptional
1条回答
网友
1楼 · 发布于 2024-05-27 12:52:29

您不需要传递参数来获取\u数据。在

这应该行得通

import pefile
from capstone import *

def disassemble(file_path):
    pe = pefile.PE(file_path)

    eop = pe.OPTIONAL_HEADER.AddressOfEntryPoint
    code_section = pe.get_section_by_rva(eop)

    code_dump = code_section.get_data()

    code_addr = pe.OPTIONAL_HEADER.ImageBase + code_section.VirtualAddress

    md = Cs(CS_ARCH_X86, CS_MODE_64)

    for i in md.disasm(code_dump, code_addr):
        print("0x%x:\t%s\t%s" %(i.address, i.mnemonic, i.op_str))

disassemble("/path/to/pe/file")

相关问题 更多 >