所以我猜测程序正在使用一些代码通过指针算术引用“左转” ,例如
print(BASE_STRING_PTR + offset)
。 这很难被发现;我是IDA的新手,并且一直在使用按钮,但是除了尝试为我想要的地址上方的每个地址尝试“查找引用”之外,没有发现任何东西。我希望更多有经验的逆向工程师会提供一些建议吗?
,如果还有其他工具对此有帮助,那就太棒了,尽管我在Mac上使用它会有所限制。
#1 楼
在这种情况下,最好的方法是使用调试器(IDA Pro的调试器或您选择的其他调试器)。在调试器中运行程序,并在第一个字节上设置硬件读取的断点其中之一。然后以一种使程序可以访问给定字符串的方式与程序进行交互(例如,使字符串显示在屏幕上的某种操作)。硬件断点将触发,使您可以查看调试器中的调用堆栈,以查看程序中的哪些代码导致了给定字符串的访问。
评论
字符串是否显示在.rsrc中?我不确定那是什么。
.rsrc是存储资源的段。如果字符串的地址看起来像.rsrc:ADDR,则它位于.rsrc中。无法正常访问资源,它们是通过WINAPI函数(如LockResource)访问的。但是,如果您不使用Windows,或者您要分析的程序不是Windows程序,那么这完全不相关。
嗯,我认为我要查看的程序部分在.data节中。
好问题。除了搜索字节序列之外,我还没有找到找到指针+偏移量的好方法。您当然可以编写脚本来这样做,在一定范围内搜索字节将相当容易。