动态二进制检测框架 PIN 的 Python 接口
我使用 Python 分析二进制文件。我一直在使用调试器进行动态分析(即运行应用程序并使用断点来获取运行时执行)。但是,如果我可以使用一些二进制仪器 fremework,例如 PIN,结果可以得到改善。 PIN 是用 C++ 开发的,并作为闭源代码(仅 dll)提供。我们编写了一个名为 PinTools 的东西来描述我们想要拦截的位置和内容。我想将 PIN 功能移植到 Python 中,以便我继续使用 Python。我知道“ctypes”和boost-python。
我的问题是:为了使用 PIN,我们编写了一个 pintool 并使用 Pin 和 pintool 运行我们的二进制可执行文件(就像使用 JIT 运行应用程序一样)。现在,我不知道是否可以使用 ctypes 等导入 PIN 函数并使用此 python 代码动态分析二进制文件。您能否提供一些关于如何继续执行此任务的建议或指南。
因此,简而言之,我想创建一个 PIN 框架的 Python 接口(包装器)。
I work in analyzing binary files, using Python. I have been using debuggers to do a dynamic analysis (i.e running the application and using breakpoints to get runtime execution). however, results can be improved if i can use some binary instrumentation fremework like PIN. The PIN is developed in C++ and provided as closed source (only dlls). We write something called PinTools do describe where and what we want to intercepts. I want to port PIN functionality into Python so that i continue using Python. I am aware of "ctypes" and boost-python.
My problem is: in order to use PIN, we write a pintool and run our bibnary executable with Pin and pintool (it is like running application with JIT). Now, I have no idea if I can use ctypes etc. to import PIN functions and use this python code for dynamically analyzing the binary. Can you please provide some suggestions or guidelines on how to proceed with this task.
So, in nut-n-shell, I want to create a Python interface (wrapper) to PIN framework.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
查看 ProcessTap 项目。似乎完全实现了您正在寻找的内容:http://code.google.com/p/processtap/
Check out the ProcessTap project. Appears to implement exactly what you are looking for: http://code.google.com/p/processtap/
我最近在考虑这个问题,虽然我还没有研究过,但我会这样处理这个问题:编写一个 pintool,在初始化时启动嵌入式 python 解释器并导入 python 模块。我会考虑使用 SWIG 为您想要使用的所有 PIN api 调用生成绑定。然后 pintool 将调用导入的 python 模块中的硬编码函数,该函数将调用 api 来注册更多函数并执行您想做的任何操作。
我不确定回调是如何工作的,我对 SWIG 还不够了解。此外,如果您尝试检测的程序本身使用 Python,则这可能会失败。但这就是我开始尝试解决这个问题的方式。
I was thinking about this recently, while I haven't looked into it, I would approach the problem like this: write a pintool that, upon initialization, starts an embedded python interpreter and imports a python module. I'd look at using SWIG to generate bindings for all the PIN api calls you want to use. Then the pintool would call a hardcoded function in the imported python module that would issue calls to the api to register more functions and do whatever you want to do.
I'm not sure how the callbacks would work, I don't know enough about SWIG. Also, this may fail if the program you're trying to instrument itself uses Python. But that's how I'd try to solve this problem to start out.