技术宅的结界

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

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 69|回复: 3
收起左侧

一种简易的反调试手段

[复制链接]

23

主题

60

帖子

1340

积分

用户组: 管理员

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

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

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

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

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

这行代码放进try-catch块里即可,代码如下:
[C] 纯文本查看 复制代码
void Main()
{
	__try
	{
		__asm int 0x2d
		printf("Debugger detected!\n");
	}
	__except(1)
	{
		printf("Debugger not detected!\n");
	}
	system("pause");
}

当执行到int 2d的时候,发生调试陷阱异常,若有调试器则被调试器捕获,若无调试器则被SEH捕获。当调试器捕获调试陷阱异常时,恢复执行后不会进入SEH异常处理,从而实现检测调试器。
经测试成功检测到了windbg,但无法测试OD,打开OD全是乱码233333
这种方法对VS调试器无效,因为它不捕获这个异常。
flowers for Broken spirits - a woman turned into stake will hold the world in the basin of fire.

266

主题

437

帖子

4539

积分

用户组: 真·技术宅

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

使用道具 举报

34

主题

132

帖子

6832

积分

用户组: 管理员

UID
77
精华
11
威望
112 点
宅币
6292 个
贡献
129 次
宅之契约
0 份
在线时间
87 小时
注册时间
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, 2018-7-18 08:56 , Processed in 0.079434 second(s), 14 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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