我一直在对 Windows PE 文件进行逆向工程,我发现这种模式经常使用,这使得跟踪 API 调用变得有点困难。首先,我将转到文件的导入,然后我将在 PE 文件的 .idata 部分内找到特定的导入,例如WSAStartup如下图所示:
在点击x
或Ctrl-x
键以交叉引用调用此函数的位置时,它仅在 IDA 识别的一个位置被“调用”,如下所示:
这里的问题是,上图的结构/技术是什么?它直接对比了我遇到的“典型”设置,它只是转到 .idata,交叉引用一个函数,并让它显示在代码中直接调用的区域。也没有直接引用每个跳转所在的内存地址,例如 14658844h。
我将在此处再添加一个不同文件但类似目击的图,在这种情况下,此实例出现在控制流图上,并且通过您可以在红色箭头正上方看到的“孤立”jmp 非常明显:
我的假设是,图 2 中显示的这些内存地址(函数 ptrs)以某种方式在代码中间接引用,使用一些偏移量来帮助掩盖这些 API 函数的使用。这是编译器功能还是手动操作?