首页
社区
课程
招聘
[原创]一种猥琐简单的时间检测反调试法
发表于: 2013-10-28 13:34 10119

[原创]一种猥琐简单的时间检测反调试法

2013-10-28 13:34
10119

反调试技术中有一种时间检测法,其历史古老而悠久,基本原理就是利用代码在自然运行和在调试运行的执行速度不一样来检测程序是否被调试,这种方法在怎么设定那段代码进行检测或到底设定多少执行时间算是在调试运行上有点费脑筋,这里就介绍一种简单猥琐但有效的时间检测方法,原理清晰易懂,小朋友都可以上手,是不是原创不知,这里就厚着脸皮说是原创了。

当当当,原理介绍正式开始
   用过调试器的朋友们都知道(啊,没用过,拖出去枪毙5分钟),当程序被断下后程序就成一具僵尸了,啥也干不了,包括Windows的消息也不能处理,其中也包括WM_TIMER消息,细心的同学就会立马发现了,不是有TIME,不就可以搞时间检测。具体搞法如下:
1、用Settimer搞一个定时器,时间你想怎么定就怎么定(当然不能太长,要搞个1小时人家都把你注册码都搞出来了)
2、在定时器回调函数中用GetTickCount检测当前时间,然后和上一次的时间相比较,如果时间差大于Settimer设定的时间,说明有小朋友在对我们的程序搞小动作了。

原理结束,是不是很简单。虽然简单,但我们可以看下效果:


没有OD附加前的时间差值基本都是1000ms,最后那一下下就是我刚附加测试的进程然后F9跑起来来后的检测时间,多达7秒多(当然我手速太慢),然后就是华丽丽的弹出进程被调试的消息框,然后就没有然后了
程序比较简单,源码我就不附上了,bin在下面,有兴趣的朋友可以拿去玩玩
BIN:
TimeTest.zip


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 5
支持
分享
最新回复 (19)
雪    币: 458
活跃值: (306)
能力值: ( LV12,RANK:400 )
在线值:
发帖
回帖
粉丝
2
哈哈,果然猥琐,学习了。
2013-10-28 14:01
0
雪    币: 11
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
还有在虚拟机中的代码执行时间
2013-10-28 14:08
0
雪    币: 142
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
各种手段,灵活运用.
2013-10-28 14:11
0
雪    币: 5224
活跃值: (3467)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
当当当,的确古老,哈哈哈。
2013-10-28 14:13
0
雪    币: 56
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
的确挺古老的

关键是怎么把计时的代码藏好
2013-10-28 14:26
0
雪    币: 602
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7

我把笔记本关了一下,然后打开就这样了,当当当,支持分享
上传的附件:
2013-10-28 17:02
0
雪    币: 659
活跃值: (499)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
8
恩,是种意外情况,可以考虑进去
2013-10-28 17:20
0
雪    币: 659
活跃值: (499)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
9
[QUOTE=kangcin;1234705]
我把笔记本关了一下,然后打开就这样了,当当当,支持分享[/QUOTE]

关了一下笔记本会进入待机状态,也会停止消息响应,是种意外情况,值得考虑
2013-10-28 17:21
0
雪    币: 148
活跃值: (278)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
有些游戏就是搞的这种
2013-10-28 18:23
0
雪    币: 11
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
timer是不准确的……
2013-10-28 18:28
0
雪    币: 2331
活跃值: (2220)
能力值: (RANK:400 )
在线值:
发帖
回帖
粉丝
12
Hack shield有类似的检测手法.
2013-10-28 18:59
0
雪    币: 496
活跃值: (291)
能力值: ( LV13,RANK:400 )
在线值:
发帖
回帖
粉丝
13
......如果用户机器性能很差,然后这个就各种误判了
2013-10-28 19:01
0
雪    币: 14
活跃值: (24)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
还真没想到  谢谢楼主 学习了
2013-10-28 19:06
0
雪    币: 1632
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
太古老了,好几个插件可以hook GetTickCount,F12暂停几分钟,回来还是9ms...安静了、
2013-10-28 19:09
0
雪    币: 371
活跃值: (72)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
16
如果你的机器卡了一下,然后就各种误判...
2013-10-28 19:11
0
雪    币: 659
活跃值: (499)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
17
不需要很准确的,比如这个例子中timer设置的是1s,而我检测是否大于1.5s,当然也可以检测的更大点,这个时间设置可以自己把握
2013-10-28 20:08
0
雪    币: 659
活跃值: (499)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
18
那个游戏这么猥琐...这类方法其实很简单,破解也很简单,只要知道原理,但如果没意识到就比较难分析出来了。
2013-10-28 20:10
0
雪    币: 124
活跃值: (469)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
19
游戏好像比这合理,我分析的那个过一段时间就显示非法,可能是时间累积计算的,可惜没找到
2013-10-28 20:56
0
雪    币: 24
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
timmer是相当不准的计时方式。当然。gettickcount 也不是很准。好像多少多少毫秒以下就不是准的。具体的微软上写了。
2014-1-9 13:56
0
游客
登录 | 注册 方可回帖
返回
//