3

在 Ollydbg 中,我有一个正在调试的程序的指令地址,它具有特定的值。该值在许多循环中传递。有没有什么方法可以让我“跟踪”该值,而无需手动单步执行每个循环并尝试跟踪值被转移到的位置?对于 15000 多个指令循环,我根本无法手动执行此操作。

我最终试图将它追踪到一个加密函数,此时它应该消失,我会知道我已经达到了这个程序中的加密。如果有某种方法我可以“自动跟随”它并在程序完全消失时暂停它,那么它应该会引导我使用我的加密功能。

我怀疑这样的事情是可能的,但我认为问它不会有坏处。

如果需要,我的操作系统是 Windows 7 x86。

4

2 回答 2

3

我没有使用过或听说过的调试器,可以让你像那样“跟踪”。

关于唯一的选择是编写某种调试器插件(如果调试器支持)或特殊程序来驱动调试器中的执行,逐条指令,并查看值的去向,到哪个寄存器,到哪些其他内存位置等。它可能不会从内存和寄存器中完全“消失”。而且它可能太慢而无法实用。

如果你有可用的源代码,我想你没有,你可能会更好地进行代码审查,但是你会知道那个函数在哪里并且不会问这个问题。

于 2013-03-19T07:36:30.477 回答
1

静态分析可以更好地处理您的任务。

另一方面,还有拍美,它的代码跟踪和数据流分析模块。

它的工作原理是设置成千上万个断点(在扫雷示例中为 50k),然后记录它们被击中的时间以及设置的上下文。您可能需要运行几次,最好在每次执行期间更改您正在跟踪的值(它是输入吗?)。是的,这是非常暴力的方法,对于大文件可能会变得非常慢。

于 2013-03-19T08:03:12.830 回答