OD 实验(二十) - 对反调试程序的逆向分析(一)

程序:

Keyfile.dat 里的内容

该文件中要至少有 9 个

ReverseMe.A:

运行程序

用 OD 打开该程序,运行

弹出的是错误的对话框

该程序发现 OD 对它的调试,所以该程序对 OD 进行反调试

重新载入程序,按 F8 往下走

这个循环是对 Keyfile.dat 的内容进行判断的

循环过来,来到一个 call 语句

执行该 call 语句就会弹出那个弹窗

这个 call 指令调用的函数就在下面

这个地方调用了一个 IsDebuggerPresent 函数

该函数判断程序进程是否由用户模式的调试器调试,如果当前进程在调试器中,返回值为非零值,如果当前进程不在调试器中,返回值为零

按 F8 往下走

返回值 eax 的值为 1,是非零

然后执行跳转,跳到弹出是错误的对话框

Reverse.B:

运行程序

用 OD 载入程序,运行

程序运行到该处会暂停,再运行

程序就终止了

重新载入程序,按 F8 一步一步往下走

这里还是执行了 call 指令

调用 IsDebuggerPresent 函数

接着往下走

 把 esp 给 401121

继续运行程序,程序就终止了

Reverse.C:

运行程序

用 OD 载入程序,运行

程序直接终止了

重新载入程序,按 F8 往下走

执行 call 指令之后会先用 IsDebuggerPresent 函数进行判断是否被反调试

eax 的值为 1,执行跳转,然后执行 ExitProcess 函数退出程序

Reverse.D:

运行程序

用 OD 载入程序,运行

重新载入程序,按 F8 往下走

这里 eax 为 1 的话,跳转到 jmp eax 这

此时 eax 的值为 1,jmp eax 跳转到此处的话肯定会出错

posted @ 2018-10-19 20:03  Sch01aR#  阅读(2448)  评论(0编辑  收藏  举报