用python拆解 - 没有简单的解决方案?

Abc*_*599 7 python swig disassembly

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

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

在可用性方面,diStorm提供了一个很好的开箱即用接口,但它只提供每条指令的助记符,而不是一个二进制结构,其枚举定义了指令类型,而不是.这对我的目的来说非常不舒服,并且需要很多我所看到的用于包装界面的时间以使其符合我的需要.

我也看过BeaEngine,它确实提供了我需要的输出,一个带有关于每条指令的二进制信息的结构,但它的界面非常奇怪且反直觉,并且当提供错误的参数时它会立即崩溃.CTypes类似于终极死亡到你的python崩溃.

因此,我很高兴听到其他解决方案,这比使用djgcc或mingw来制作SWIGed libdisasm或为diStorm编写OOP包装器要少一些时间.如果有人对如何编译SWIGed libdisasm或者更好的编译二进制文件(pyd或dll + py)有一些指导,我很乐意听到/拥有它.:)

谢谢你.

Abc*_*599 2

好吧,经过多次干预,我成功编译了 SWIGed libdisasm!不幸的是,它似乎因不正确(有时是正确)的使用而使 python 崩溃。我是怎么做到的:

  1. 我使用 Visual Studio 6 编译了 libdisasm.lib,您唯一需要的是您使用的 libdisasm 版本中的源代码,以及 stdint.h 和 inttypes.h(Visual C++ 兼容版本,google 一下)。
  2. 我使用以下命令行切换了给定的 libdisasm_oop.i 文件

    swig -python -shadow -o x86disasm_wrap.c -outdir 。libdisasm_oop.i

  3. 使用 Cygwin 在 libdisasm 根目录中运行 ./configure。你从中得到的唯一真实的东西是 config.h

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

  5. 编译DLL项目,并将输出命名为_x86disasm.dll。将其放在与 SWIG 生成的 x86disasm.py 相同的文件夹中,然后就完成了。

对于其他不太崩溃的 python disasm 库有什么建议吗?