HanDs
管理员

[Visual Studio文章] 一段简单的反调试代码 





学习中请遵循国家相关法律法规,黑客不作恶。没有网络安全就没有国家安全

本站需要登陆后才能查看

对于检测调试器来说,其实 Win32 API 中有现成的 IsDebuggerPresent 可以使用,不过调试器可以很容易地挂钩这个 API,使得被调试的进程检测调试器失败。
这里给出一段简单的代码,比 IsDebuggerPresent 更保险些:

C++代码
  1. #include <stdio.h>   
  2. #include <excpt.h>   
  3.   
  4. int main(void)   
  5. {   
  6.     __try  
  7.      {   
  8.          __asm int 3;   
  9.          puts("Debugger detected!");   
  10.      }   
  11.      __except (EXCEPTION_EXECUTE_HANDLER)   
  12.      {   
  13.          puts("I'm ok!");   
  14.      }   
  15.   
  16.     return 0;   
  17. }  

原理很简单,也就是利用了 Win32 的异常处理机制:当 __try 块中的 int 3 执行后,会触发内核的 KiTrap03 例程,这时如果有调试器的存在,那么 int 3 下面的代码就会被调试器执行;如果没有调试器的存在,那么代码将会跳至 __except 块中执行。
当然,对抗这一段代码的方式也很简单,只需要在调试器的设置中把 int 3 的异常过滤掉,也就是直接传递给应用程序即可。


学习中请遵守法律法规,本网站内容均来自于互联网,本网站不负担法律责任
简单 调试 代码
#1楼
发帖时间:2016-7-9   |   查看数:0   |   回复数:0
游客组
快速回复