Python接口动态二进制仪器框架PIN

时间:2010-12-03 11:52:11

标签: python instrumentation python-c-extension dynamic-analysis

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

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

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

2 个答案:

答案 0 :(得分:3)

查看ProcessTap项目。似乎准确地实现了您所寻找的内容:http://code.google.com/p/processtap/

答案 1 :(得分:0)

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

我不确定回调是如何工作的,我对SWIG知之甚少。此外,如果您尝试使用Python的程序使用Python,则可能会失败。但这就是我试图解决这个问题的方法。