找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 2165|回复: 3

一种简易的反调试手段

[复制链接]

65

主题

115

回帖

1万

积分

用户组: 超级版主

OS与VM研究学者

UID
1043
精华
35
威望
789 点
宅币
8290 个
贡献
1094 次
宅之契约
0 份
在线时间
2066 小时
注册时间
2015-8-15
发表于 2018-7-6 13:08:10 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
本帖最后由 tangptr@126.com 于 2018-7-6 13:08 编辑

原理很简单,就是利用调试陷阱中断(int 2d指令)结合SEH异常捕获实现。
只需要把
  1. __asm int 0x2d
复制代码

这行代码放进try-catch块里即可,代码如下:
  1. void Main()
  2. {
  3.         __try
  4.         {
  5.                 __asm int 0x2d
  6.                 printf("Debugger detected!\n");
  7.         }
  8.         __except(1)
  9.         {
  10.                 printf("Debugger not detected!\n");
  11.         }
  12.         system("pause");
  13. }
复制代码

当执行到int 2d的时候,发生调试陷阱异常,若有调试器则被调试器捕获,若无调试器则被SEH捕获。当调试器捕获调试陷阱异常时,恢复执行后不会进入SEH异常处理,从而实现检测调试器。
经测试成功检测到了windbg,但无法测试OD,打开OD全是乱码233333
这种方法对VS调试器无效,因为它不捕获这个异常。
回复

使用道具 举报

307

主题

228

回帖

7335

积分

用户组: 真·技术宅

UID
2
精华
76
威望
291 点
宅币
5585 个
贡献
253 次
宅之契约
0 份
在线时间
947 小时
注册时间
2014-1-25
发表于 2018-7-6 13:11:50 | 显示全部楼层
善哉,善哉
回复

使用道具 举报

55

主题

275

回帖

9352

积分

用户组: 管理员

UID
77
精华
16
威望
237 点
宅币
8217 个
贡献
251 次
宅之契约
0 份
在线时间
254 小时
注册时间
2014-2-22
发表于 2018-7-6 15:33:58 | 显示全部楼层
传统反调试手段基本都被研究透了。你说的这个我记得10年前的一个『反反调试插件』就已经把它ANTI了。

点评

吐槽犀利度: 5.0
吐槽犀利度: 5
嗯,最近在挖坟,所以翻出了这些古董。  发表于 2018-7-6 16:29
回复 赞! 靠!

使用道具 举报

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-4-19 01:32 , Processed in 0.039258 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表