2013-03-19 18 views
2

在Ollydbg我有一个程序的指令地址,我正在调试具有特定的值。这个价值正在无数循环中传递。是否有任何方法可以“追踪”该值,而无需手动逐步遍历每个循环,并试图跟踪值的传递位置?我根本无法手动为15000+指令循环执行此操作。以下/跟踪一个值,因为它在不同的寄存器/内存位置传递?

我最终试图追踪它到一个加密函数,在这一点上它应该消失,我会知道我已经在这个程序中加密。如果有某种方法,我可以'自动'关闭它,并使程序在完全消失时暂停,然后它应该引导我正确使用我的加密功能。

我在脑海中怀疑这样的事情是可能的,但我认为它不会受到伤害。

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

回答

3

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

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

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

1

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

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

它通过设置成千上万的断点(扫雷示例中的50k)来工作,然后记录它们何时被命中以及如果设置了上下文。您可能需要几次运行,如果您可以在每次执行过程中更改要跟踪的值(是否输入?),那么最好。 是的,这是非常暴力的方法,对于大文件可能会非常慢。