我试图用python使用pefile和capstone反汇编PE可执行文件,以便稍后从该代码中获取CFG。我的想法是获取包含可执行代码的PE文件部分,并将所有这些字节传递给capstone。我不知道究竟应该将哪一部分传递给顶点,因此在构造CFG时,不再需要编译代码,并且可以解析RVAs(即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中的字节开始传递给capstone的那个部分的数据,我认为它可以划分从该部分的起点到结尾的数据。
md.disasm(code_section.get_data(pe.OPTIONAL_HEADER.AddressOfEntryPoint))
但是在该部分的末尾可能是不应该被反汇编的代码(我想,不确定)。所以我要问的是我应该将哪些字节传递给Capstone来反汇编PE文件的可执行代码。
答案 0 :(得分:2)
您不需要将参数传递给get_data。
这应该可以正常工作
INSERT INTO event_tags ( event_id, tag_id )
SELECT events.id, 2
FROM events AS E
WHERE E.info = 'HybridAnalysis'
AND NOT EXISTS
(SELECT
1
FROM event_tags AS ET
INNER JOIN events AS E1
E1.event_id=ET.event_id
WHERE E1.info = 'HybridAnalysis'
);