比较来自 ollydbg 的两条跟踪

逆向工程 ollydbg 追踪 比较
2021-07-10 21:40:14

我有一个程序,根据我计算机上存在的文件执行不同的程序。我想在两种情况下运行跟踪(使用默认文件和文件的编辑版本),然后比较跟踪以查看不同之处。

在 ollydbg 中是否有内置方法可以执行此操作?我绝不对 ollydbg 抱有任何期望,但我愿意投入任何时间和精力来解决这个问题——我只需要一点指导。

谢谢!

1个回答

版本中使用:OllyDbg的V2,但方法是类似的V1

ollydbg 允许您记录我过去做过一些粗略的差异的跟踪,如下所示,您可以尝试即兴发挥

这是用于演示的源代码

请记住,我有源代码,所以我编译了它并使用 /FIXED 链接器切换到 vs 2017 链接器链接,这样 ASLR 就不会发挥作用,如果您有预构建的二进制文件并且无法强制将其加载到同一地址,则会使生活变得更加艰难每次文本差异都会很乏味

例如 push 402080 将 push f02080 这应该无关紧要,但文本差异将显示差异,它是纯噪音

#include <stdio.h>
#include <stdlib.h>
void main (int argc , char *argv[]) 
{
    if (argc !=2 ) 
    {
        printf("usage %s password\n" , argv[0]);
        exit(-1);
    }
    int password = atoi(argv[1]);
    if(password == 1337) 
    {
        printf("good\n");
        exit(1);
    }
    else
    {
        printf("Try again\n");
        exit(0);
    }
}

打开一个空白的 ollydbg 并像这样设置跟踪选项并关闭它

在此处输入图片说明

打开命令提示符并以错误的方式运行可执行文件

ollydbg.exe diffway.exe 4567  

当 ollydbg 在初始断点处停止时,打开跟踪窗口 1) 查看运行跟踪或...图标
2) 右键单击
3) 记录到文件 -> 文件名(例如 wrongpass.txt)-> ok
4)ctrl+f11 进行跟踪这将以终止结束
5) 跟踪窗口 -> 右键单击​​ -> 停止日志记录 -> 关闭 ollydbg

以 right pass 和 rightpass.txt 作为文件名重复该过程

您现在将拥有两个执行的两个文本文件

sed grep awk diff 现在是你的朋友

撕掉我们对寄存器不感兴趣的修改过的寄存器列

sed s/"...=.*"//g wrongpass..txt >> ripwrongpass.txt
sed s/"...=.*"//g rightpass..txt >> riprightpass.txt
diff -w riprightpass.txt ripwrongpass.txt

我们在这里得到了执行之间的第一个分歧


    :\>diff -w riprightpass..txt ripwrongpass..txt
    170028,170029c170028,170029
     主 00401050 推 0043E1B4
     主 00401055 呼叫 004010C0
    ---
     主 00401066 PUSH 0043E1BC
     主 0040106B 呼叫 004010C0
    170477a170478,171087
    > main 00410D40 MOVZX EAX, BYTE PTR DS:[ECX*8+EAX+43EF78];
    > 主 00410D48 SHR EAX, 4


在此处输入图片说明