用python反汇编没有简单的解决方案?

2024-09-28 21:17:44 发布

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

我正在尝试创建一个python脚本,它将反汇编一个二进制文件(确切地说是一个Windows exe)并分析其代码。 我需要获取某个缓冲区的能力,并提取某种包含有关其中指令信息的结构。在

我以前在C语言中使用过libdisasm,我发现它的界面非常直观和舒适。 问题是,它的Python接口只能通过SWIG使用,我无法在Windows下正确编译。在

在可用性方面,diStorm提供了一个很好的开箱即用的接口,但它只提供每个指令的助记符,而不是一个二进制结构,它的枚举定义了指令类型和其他类型。 这对于我的目的来说是相当不舒服的,并且需要花费大量的时间来包装接口,使其适合我的需要。在

我还研究了BeaEngine,它实际上提供了我需要的输出,一个包含关于每个指令的二进制信息的结构,但它的接口非常奇怪,而且违反直觉,当提供错误的参数时,它几乎会立即崩溃。 CTypes对你的python崩溃来说是一种终极的死亡。在

所以,我很乐意听到其他解决方案,它们比使用djgcc或mingw来实现SWIGed libdisasm,或者为diStorm编写OOP包装器要省时一些。 如果有人对如何编译SWIGed libdisasm有一些指导,或者更好的是,编译的二进制文件(pyd或dll+py),我很乐意听到/拥有它。:)

谢谢。在


Tags: 文件代码脚本信息类型windows指令二进制
3条回答

我建议您看看Pym's disassembly library,它也是Pym's online disassembler的后端。在

好吧,在多管闲事之后,我成功地编译了SWIGed libdisasm! 不幸的是,它似乎在错误(有时是正确的)使用时使python崩溃。 我是怎么做到的:

  1. 我编译的libdisasm.lib库使用VisualStudio 6,您需要的唯一源代码是使用的LISDISASM版本的源代码,以及STDITE.H和IpType。h(Visual C++兼容版本,谷歌IT)。在
  2. 我用下面的命令行浏览给定的libdisasm\uoop.I文件

    swig-python-shadow-ox86disasm_wrap.c-outdir。libdisasm\u oop.i

  3. 使用Cygwin在libdisasm根目录中运行./configure。从这里得到的唯一真实信息是config.h

  4. 然后我创建了一个新的DLL项目,添加了x86disasm_wrap.c,将c:\PythonXX\libs和c:\PythonXX\Include文件夹添加到相应的变量中,设置为Release configuration(重要的是,在包含python.h之前,要么这样做,要么做#undef _DEBUG)。 另外,您可能需要修复config.h的路径。

  5. 编译了DLL项目,并将输出命名为\u x86disasm.dll. 把它和SWIG生成的x86放在同一个文件夹中禁用.py你就完蛋了。

有什么建议可以为python提供其他不那么死板的disasm库吗?在

您可以尝试使用ctypes直接与libdisasm接口,而不是通过SWIG层。这可能需要更多的开发时间,但是您应该能够使用ctypes访问底层功能。在

相关问题 更多 >