我有一个小问题,我已经将一些固件加载到 IDA,但它没有正确分析它,所以我确实定位并标记了所有字符串,但这并没有帮助我在代码中找到对它们的引用。如何在 IDA 中搜索对某些内存位置(字符串)的引用?
在 IDA Pro 中搜索字符串参考时需要帮助
逆向工程
艾达
字符串
2021-06-25 01:00:35
1个回答
这是一个很长的镜头,但我认为发生的事情是这样的:
你的固件没有任何 ELF 或类似的头文件(这不是一个真正的问题,它应该是这样的),但应该被加载到内存中的特定位置,而不是0。或者,也许确实如此有一些头文件,IDA 无法识别,所以它在 0 处加载这些头文件,真正的二进制文件在它应该在的位置后面几个字节。
为了这个例子,让我们假设固件应该在 address 加载0x1000
,而 IDA 加载它0x0000
- 你可以在第一次打开二进制文件时指定加载地址;如果不更改,则默认为 0。
现在,一个应该0x1234
位于运行二进制文件中的地址的字符串将位于0x0234
您的 IDA 数据库中。但是您代码中的处理器指令仍将使用0x1234
. 但是因为 IDA 在那里找不到任何合理的东西,它只会假设它是一个数字,或者那里可能有一些东西,但它不会是你的字符串,所以 IDA 可能会在那个时候放一个标签,但它不会识别与您的字符串的连接。
所以你真正应该做的是尝试找出 a) 固件是否有一些不属于二进制文件的头,在这种情况下,你应该在分析之前删除它们,以及 b) 固件属于哪个地址,并制作确保在分析时说明该地址。
恐怕您手动定位和标记字符串的工作是徒劳的;IDA 确实有重新定位二进制文件和调整引用的命令,但这些命令首先假设二进制文件已正确加载/分析/交叉引用。现在重新定位您的二进制文件对您没有帮助,因为这些交叉引用不存在。
其它你可能感兴趣的问题