首页
社区
课程
招聘
[讨论][再次更新][把戏揭秘]一些小把戏,大家提提意见。
发表于: 2009-7-11 00:04 14121

[讨论][再次更新][把戏揭秘]一些小把戏,大家提提意见。

2009-7-11 00:04
14121
收藏
免费 0
支持
分享
最新回复 (38)
雪    币: 418
活跃值: (63)
能力值: ( LV12,RANK:260 )
在线值:
发帖
回帖
粉丝
26
这个两天是泛指,
表示过一段时间,哈哈
2009-7-25 16:26
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
27
关于调试器的检测,有很多方法。比如很容易想到的就是针对调试器的特征,如进程、窗口、驱动等。还有一些方法是根据程序在被调试时的行为与正常运行时不完全相同(所谓调试器的海森堡效应,也有译为海森勃等),比如常见的SEH陷阱检测调试器。

而我里用到的方法是关于程序运行时间的。但是,又不同于常规的通过测量关键执行路径的执行时间进行检测的方法。目前只是个原型,没有仔细论证过,可能会在有的系统中无法运行。这里简单说一下它的原理,至于代码,因为是很早以前写的,没有整理,等整理后,再放出来。

我的思路是基于这样的事实:操作系统的调度算法应该能尽量保证平衡性。比如,线程A每1毫秒(这个1毫秒,以下下面的100毫秒,都是这个把戏当中的关键参数,我也没有仔细研究过应该有多少,这个值目前带有很大随意性)对一个全局变量执行递增操作,而线程B每隔100毫秒去读取这个变量,那么这个变量的值应该与100相差不多:如果确实如此,说明所有的线程都在全速运行。线程B于是可以将变量清0,并等待下一个100毫秒。

这里的关键是,所有的线程都必须连续不断地运行,除了主动睡眠延迟外,不能被强制挂起。否则,当线程B被调度时,它读到的那个全局变量的值将远小于100。考虑到内核调度器的不确定性,我们可以设定一个门限值(这又是个很关键的参数),比如80。如果线程B睡醒后读到的全局变量小于80,则认为进程被人为地暂停了,而这很有可能是被调试的。

此外,我们还可以故意产生调试异常,比如“句柄不可关闭”异常。这样,在正常运行时,不产生异常,线程全部全速运行。而当程序被调试时,内核会向调试器发送调试异常,同时将被调试的进程挂起。如果调试器处理这个事件的时间超过我们设定的门限值,那么线程B就会检测出来。

至于算法,实在是非常简单,先输入SOW:XXXXXX,意为先种(sow)一个种子,然后点确定,便会提示第一步正确,进行下一步。下一步呢,只是一个if语句,对第二步输入的字符串执行一个判断,因为编译器会进行短路求值,因而反汇编代码看起来是几个连续的分支语句,不难。

提示:如果我上面说的方法原理你还没有完全想明白,那就下断点CreateThread,找到我所创建的工作线程,读一下线程函数吧,为了调试,把后面ExitProcess附近的关键跳给爆掉即可。注意不要将CreateThread给NOP掉,因为工作线程中同时还负责刷新显示结果的控件,如果将CreateThread给NOP掉,你将看不到成功的提示。
2009-7-26 19:49
0
雪    币: 388
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
28
昨晚摸索着跟到了CreateThread创建的函数 ,当时虽然不知道是这函数是干什么用的, 就是检查出这个函数会循环产生一个数值进行比较,未跳过SLEEP函数的时候会挂掉OD, 今天看到LZ的分析才明白一点。
至于算法,如果按照上面我的的方法 均跳过SLEEP函数,产生的效果是输入SOW:XXXXXX没有问题 但是输入后面的注册码的时候 就没有反应了,我不知道这是为什么?
2009-7-27 18:28
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
29
执行后不管他. 随便浏览一些网站..他必自動结束.
2009-7-28 00:17
0
雪    币: 388
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
30
sessiondiy 你的思维方式是咋样的  这个都能测试出来
2009-7-28 08:57
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
31
什么思维方式?
我看Yahoo新闻他就结束了.
2009-7-28 10:29
0
雪    币: 388
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
32
无语了 运行着Crackme 然后看新闻 :<
2009-7-28 17:08
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
33
00402A90      55            push ebp  //retn  就不会异常了
2009-7-30 01:15
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
34
对,这个问题我也考虑过。因为我假设线程可以理想地获得执行时间,而当系统负载重的时候,由于调度器并不是硬实时的,就会导致线程超时。

所以说,这个想法还没法用于实践当中。只是概念阶段。
2009-7-31 00:21
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
35
书呆你最近又忙着考试了?
已很少见你发帖了.
2009-7-31 03:47
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
36
最近太忙了,没甚时间。基本上只是回一些零回复的贴而已。
2009-8-3 22:47
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
37
希望各位大大们 Crack 后多讲讲经验...
上传的附件:
2009-8-4 09:58
0
雪    币: 264
活跃值: (11)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
38
太猥琐了 书呆版把这个anti想办法发扬光大吧..
2009-8-4 16:58
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
39
打了个柯睡, 梦到前天书呆说: 在准备要毕业的课业, 每天回到宿舍都12点了,
每天都累到快趴了.

事实证明, 梦是不准的.
2009-8-5 01:08
0
游客
登录 | 注册 方可回帖
返回
//