【问题标题】:Following/Tracing a value as it's passed around in different registers / memory locations?跟踪/跟踪在不同寄存器/内存位置传递的值?
【发布时间】:2013-03-07 18:48:14
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c++ debugging assembly encryption reverse-engineering


    【解决方案1】:

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

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

    如果您有可用的源代码(我想您没有),您可能最好进行代码审查,但是您会知道该函数在哪里并且不会提出问题。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-18
        • 2012-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多