如何使用 PyDBG 获取对函数的所有引用?

逆向工程 恶意软件 调试器
2021-06-26 16:48:05

我想获取使用 PyDbg 调用某个函数的二进制文件中的所有地址。函数的地址将作为参数提供。

我实际上是否必须扫描所有代码,寻找调用该函数的调用还是有更优雅的方法?

更新:

该函数未导出或导入。

更新 2:

例如ImmDbg 如何找到所有引用并显示它们?

2个回答

因为你想要所有的call指令(可能是假的calls 使用pushandjmp和类似的使用不透明谓词)你不会绕过静态分析() 的二进制文件。如果二进制文件以任何方式打包或加密,则意味着您需要首先通过该层。

Igor 的解决方案将是您最好的选择,除了将文件加载到一个好的反汇编器中并找到您感兴趣的函数的所有交叉引用之外。但它具有 Igor 已经指出的局限性。

静态分析在区分数据和代码时要处理很多歧义和问题。但是优秀的反汇编者非常擅长做出正确的猜测,并且会在有疑问的情况下以一种或另一种方式交互式标记项目。

结论

这意味着 PyDbg 可能不是解决手头问题的正确工具,除非您设法强制它使用适当的成熟反汇编程序来获取所有交叉引用。但是更好的选择可能是radare2,然后,如果您更熟悉PyDbg,则将获得的知识应用于PyDbg 中的调试目标。

  1. 在函数地址上放置一个断点。
  2. 命中时,获取 dword 处ESP- 这将是返回地址。

显然,这只会捕获实际调用,而不是所有潜在调用。