180306 逆向-反调试技术(1)BeingDebugged

1625-5 王子昂 总结《2018年3月6日》 【连续第521天总结】
A. 反调试技术(1)
B.

BeingDebugged

Win32API为程序提供了IsDebuggerPresent来判断自己是否处于调试状态,懒惰的程序员使用这个API来自欺欺人

实现源码为:

IsDebuggerPresent(VOID)
{
    return NtCurrentPeb()->BeingDebugged;
}

这个函数读取了当前进程PEB中的BeingDebugged标志
PEB(Process Environment Block,进程环境块)是每个进程都拥有的一个结构,其中包含了大量的进程相关标志
它的地址存放在TEB(Thread Environment Block, 线程环境块)之中,而TEB的地址会被该线程的FS段寄存器存储

换句话说,该API只是通过内存中的一个标志位来判断进程是否被调试……调试器改内存是手到擒来的事情,甚至OD还有插件可以免去手工操作的繁琐。
因此使得这个API沦为鸡肋。。。
真的是这样吗?

才不会这么简单~

在PEB中的BeingDebugged被设为True后,还会有一些其他的变化产生。

  1. 加载时会将PEB中的NtGlobalFlag中的一个位改变,使其值为0x70,而正常状态下不是
  2. 在WRK中有一个宏也会随着NtGlobalFlag的改变而在RtlCreateHeap中用RtlDebugCreateHeap创建调试堆。这个调试堆中含有大量的标志(例如0xBAAD0F0D和0xFEEEFEEE等),而正常情况下这个地
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值