0

我使用 Python 分析二进制文件。我一直在使用调试器进行动态分析(即运行应用程序并使用断点来获取运行时执行)。但是,如果我可以使用一些像PIN这样的二进制仪器框架,结果可以得到改善。PIN 是用 C++ 开发的,并作为封闭源代码(仅限 dll)提供。我们编写了一个叫做 PinTools 的东西来描述我们想要拦截的位置和内容。我想将 PIN 功能移植到 Python 中,以便继续使用 Python。我知道“ctypes”和 boost-python。

我的问题是:为了使用 PIN,我们编写了一个 pintool 并使用 Pin 和 pintool 运行我们的二进制可执行文件(就像使用 JIT 运行应用程序一样)。现在,我不知道是否可以使用 ctypes 等来导入 PIN 函数并使用此 python 代码动态分析二进制文件。您能否就如何进行此任务提供一些建议或指导。

因此,在 nut-n-shell 中,我想为 PIN 框架创建一个 Python 接口(包装器)。

4

2 回答 2

3

查看 ProcessTap 项目。似乎实现了您正在寻找的东西:http ://code.google.com/p/processtap/

于 2011-03-20T06:24:03.127 回答
0

我最近在考虑这个问题,虽然我还没有研究过,但我会这样解决问题:编写一个 pintool,在初始化时,启动一个嵌入式 python 解释器并导入一个 python 模块。我会考虑使用 SWIG 为您要使用的所有 PIN api 调用生成绑定。然后 pintool 将调用导入的 python 模块中的硬编码函数,该函数将调用 api 以注册更多函数并执行您想做的任何事情。

我不确定回调将如何工作,我对 SWIG 了解不够。此外,如果您尝试检测自身的程序使用 Python,这可能会失败。但这就是我试图解决这个问题的方式。

于 2010-12-03T15:08:13.870 回答