IsDebuggerPresent解密

看看IsDebuggerPresent函数的秘密:

7C812E03 >  64:A1 18000000           mov     eax, dword ptr fs:[18]
//指向TEB自身,也就是FS
7C812E09    8B40 30                  mov     eax, dword ptr [eax+30]
//指向PEB
7C812E0C    0FB640 02                movzx   eax, byte ptr [eax+2]
//PEB前进两个字节取Byte
7C812E10    C3                       retn

先取FS:[18]处的指针,跟进,找到偏移为30h处的指针,再跟进,然后移动两个字节就可以看到IsDebuggerPresent标记了。为1表示当前程序处于调试状态,为0表示NOT.这样我们就可以手动修改内存了,哈哈

 简化代码:

__asm
  {
    mov eax, fs:[30h] ;EAX =  TEB.ProcessEnvironmentBlock
    inc eax
    inc eax
    mov eax, [eax]
    and eax,0x000000ff  ;AL  =  PEB.BeingDebugged
    test eax, eax
    jne is_debuging
    jmp is_not_debuging
  }

一句话:DEBUG标记就在进程环境块(PEB)的第三个字节上面
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值