OD定位IsDebuggerPresent检测地址

  1. 编写个小程序,调用IsDebuggerPresent来检测调试器是否存在

作者千越

2.打开原版汉化OD并附加到程序里,这里不能使用第三方OD,因为第三方OD集成了许多插件,有一定强度的反调试功能。
附加后,OD自动在模块入口处断下。
在这里插入图片描述
3.Ctrl+F9,执行到返回,程序跑起来之后再按Ctrl+N,调出来查看程序用了哪些模块命令。
找到了,这个程序调用了IsDebuggerPresent。
在这里插入图片描述

4.右键,这里我选择第一个,进入函数地址对应的汇编窗口
在这里插入图片描述
5.可以看到函数对应的代码段在这里插入图片描述
FS寄存器指向当前活动线程的TEB结构(线程结构)
偏移 说明
000 指向SEH链指针
004 线程堆栈顶部
008 线程堆栈底部
00C SubSystemTib
010 FiberData
014 ArbitraryUserPointer
018 FS段寄存器在内存中的镜像地址
020 进程PID
024 线程ID
02C 指向线程局部存储指针
030 PEB结构地址(进程结构)
034 上个错误号

由此可知,第一行的含义是获取PEB结构地址,并送入寄存器EAX里;
第二行的含义是EAX的地址再加上偏移2,再次送入寄存器EAX里;
第三行的含义是返回EAX的值。

给第一行代码下断点,然后F9运行起来,可以看到此时已经被断下,在栈窗口中看到了访问此地址的别的地址
在这里插入图片描述
6.点击栈窗口中的0146FB14(也就是第一行地址),回车,此时汇编窗口会切换到这个函数的地址
在这里插入图片描述
可以看到上面有个CALL,后面的备注就是这个函数,还看到下面有个检测到调试器的对话框,程序的检测逻辑一目了然

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值