我有一个程序,根据我计算机上存在的文件执行不同的程序。我想在两种情况下运行跟踪(使用默认文件和文件的编辑版本),然后比较跟踪以查看不同之处。
在 ollydbg 中是否有内置方法可以执行此操作?我绝不对 ollydbg 抱有任何期望,但我愿意投入任何时间和精力来解决这个问题——我只需要一点指导。
谢谢!
我有一个程序,根据我计算机上存在的文件执行不同的程序。我想在两种情况下运行跟踪(使用默认文件和文件的编辑版本),然后比较跟踪以查看不同之处。
在 ollydbg 中是否有内置方法可以执行此操作?我绝不对 ollydbg 抱有任何期望,但我愿意投入任何时间和精力来解决这个问题——我只需要一点指导。
谢谢!
版本中使用: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