使用 IdaPython 查找具有特定参数的所有 x-ref

逆向工程 艾达 蟒蛇
2021-07-08 13:08:59

我有一个函数0xabcd被调用了几次,比如Func(1,2,3)and Func(4,4,5)

我想找到第三个参数所在的所有引用5

import idautils
for f in list(idautils.XrefsTo(0xabcd)):

如何使用 IDAPython 从所有 x-ref 中获取第三个参数?

1个回答

正如目前所说,对于这样一个普遍问题,没有简单的解决方案。

静态分析是一个相当复杂的主题,没有现成可用的通用解决方案。

为什么这可能很困难的一些基本示例是:

  1. 考虑第三个参数Func用户提供的 input 的情况因此不可能静态地知道该值。

  2. 此外,一个值可能来自其他外部来源(操作系统、互联网等)。

  3. 即使仅限于静态程序,在将变量传递给之前对其进行操作的代码Func也可能很复杂且难以理解。

一个天真静态的解决方案可能是一个更可行的解决方案。例如,假设第三个参数Func是硬编码的立即数而不是变量的解决方案只需要很少的静态分析并且可以实现,尽管 IDA 不是最适合此类任务(我建议您采用看看angr

或者,有人可能会争辩说调试是更好的解决方案,Func在调用时设置断点并解析参数。这又不是 IDA 的强项,但现在 IDA 的调试器已经足够好用于完成这样的任务。