利用INT 2DH 反调试

         取材于rootkit.com的一篇文章,因为简单就不按照原文严格翻译了。原文链接http://rootkit.com/newsread.php?newsid=669

第2dh 号中断处理函数是KiDebugService ,执行Int 2dh 指令时,进程如果没有处于被调试状态,将会抛出异常,如果在被调试状态则能够正常执行。我们可以利用这一点检测调试器的存在。
; Besides  this int  2Dh can also be used  as  code obfuscation method.
; With attached debugger, after executing 
int  2Dh, system skips one  byte
; after 
int  2Dh:
;
;       
int      2dh
;       nop                     ; never executed
;       ...
;
原文的这一段 说执行完 int 2dh指令后会跳过一字节指令的描述貌似有问题。实际测试了下,还是照常执行的。
OllyDbg 的行为比较特别。被OllyDbg 调试时如果Int 2dh 指令之后的下一条指令长于一字节,那么会引起异常,下一指令自然不执行。如果等于一字节长度那么不会引起异常,下一指令被跳过不执行。
顺便贴下我测试用的例子。
#include  < Windows.h >
#include 
< stdio.h >
 
DWORD dwTest
= 0 ;
DWORD test()
{
       printf(
"正常 Test = %d ",dwTest);
       
return EXCEPTION_EXECUTE_HANDLER;
}

void  main()
{
       __try
       
{
              __asm   mov eax,dwTest
              __asm     
int 2dh
              __asm   inc eax;被OD 调试时这句被跳过。
              __asm   mov dwTest,eax
              printf(
"检测到调试器 Test = %d ",dwTest);
       }

       __except(test())
       
{
        
       }

       system(
"pause");
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值