我试图使用 pefile 和 capstone 用 python 反汇编 PE 可执行文件,以便稍后从该代码中获取 CFG。我的想法是获取包含可执行代码的 PE 文件部分并将所有这些字节传递给顶点。我不知道究竟应该将哪个部分传递给顶点,因此不会反汇编超过必要的代码,并且可以在构造 CFG 时解析 RVA(即 jo 0x10df9 和地址 0x10df9 在反汇编指令列表中) . 我试过了
md.disasm(pe.get_memory_mapped_image(), pe.OPTIONAL_HEADER.AddressOfEntryPoint)
但我担心它会从入口点反汇编到 PE 的末尾,我只想反汇编可执行代码。我一直在阅读有关 PE 格式的内容,并且更有可能代码将始终位于 .text 部分。我也在考虑把那部分放在:
code_section = pe.get_section_by_rva(pe.OPTIONAL_HEADER.AddressOfEntryPoint)
然后将那个部分的数据从EntryPoint中的字节开始传递给顶点,我认为这可以将数据从起始点分隔到该部分的末尾。
md.disasm(code_section.get_data(pe.OPTIONAL_HEADER.AddressOfEntryPoint))
但是在本节的末尾可能是不应该反汇编的代码(我认为,不确定)。所以我要问的是我应该将哪些字节传递给 Capstone 来反汇编 PE 文件的可执行代码。