linux下动态调试od,OD 实验(二十) - 对反调试程序的逆向分析(一)

程序:

44da69459186c412a3a5a5e3247fb04c.png

Keyfile.dat 里的内容

8e436420e07638c290d119b660d9d04e.png

该文件中要至少有 9 个

ReverseMe.A:

运行程序

7bfdea77ed506654cb45e757db28b155.png

用 OD 打开该程序,运行

27b3f632a435257138b7ff19b0e792b5.png

弹出的是错误的对话框

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

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

8196ab6b2ec562291302da8013fface4.png

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

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

0a80bb5bc65bcdda634bcfa67cec598c.png

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

774cd13bb0f3e4347a1133e59a409c74.png

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

9b80b4da02f421670343a03e8d84ad39.png

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

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

按 F8 往下走

c9bc83e80a1ec34d3b3f09beecf5bc73.png

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

e7c73f0a6a2d71375767247a4c4c5e9f.png

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

Reverse.B:

运行程序

af33117e4b254349e1c43c2801fc66e9.png

用 OD 载入程序,运行

24a1769ab822a14959e349af5257aa8f.png

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

3681d199ce72514625b189c62687d31c.png

程序就终止了

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

a741569d0ab047ac670998c80740f6af.png

这里还是执行了 call 指令

46bccdb6d4a83c7b08af2524c1acbf57.png

调用 IsDebuggerPresent 函数

接着往下走

a13aefb5a50f3af67287c884685b2b2b.png

把 esp 给 401121

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

Reverse.C:

运行程序

5fe91edec41632ca2e402d3452197713.png

用 OD 载入程序,运行

2500c1d123b1a25f96a8ddc1bf48b5a3.png

程序直接终止了

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

4e63e81ccc7885aa0a86fd32ae995794.png

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

38f96f963801bc84b2c6019c6cb086a1.png

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

Reverse.D:

运行程序

70935ceee6c656634f600826a1332dfd.png

用 OD 载入程序,运行

3e14c5e1cb102965d84d7ca4c977f887.png

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

15afb6e173ee09cf3fbbf0ee5e0d30b4.png

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值