首页
社区
课程
招聘
[求助]一个奇怪的反调试手段,Event
发表于: 2015-9-27 23:55 15029

[求助]一个奇怪的反调试手段,Event

2015-9-27 23:55
15029
这两天在研究TX的那根233B线程,虽然可以直接终止它达到调试器附加不闪退的效果,但是我并不想这么做。知道它做了什么不是更有趣嘛。

说下我的研究过程:
用windbg ->F6 ->附加TP游戏
会收到0xC0000005 异常,不用管它,游戏有VEH会自己接管,windbg ->Event Filters过滤掉0xC000005异常。

接着,收到了 80000002 异常,#~ 查看异常发生的线程,xxxx233B (很多人以为该线程自己触发int3 自己接管,其实并不是)  gn ->游戏挂掉咯,因为游戏找不到异常处理函数。

这时候,我想知道游戏为何没有自己接管这个异常。
然后我便HOOK了 KiUserExceptionDispatcher(虽然游戏自己也HOOK了,但是可以在它Hook过后的地址再HOOK嘛~)  ,过滤出来0x80000002 的异常,然后我用ollydbg下一个断,想看看它为何没有找到异常处理函数 (并不能条件断点,异常太多了,od会卡死)
走过150行VM代码(没有任何意义的VM) 然后进入了RtlDispatchException ,经过VEH 2个处理函数都不接管,在即将进入SEH的时候,没想到 test bl,0x3 这一句 直接跳过了SEH (bl是 PEB地址的最后2个字节,这里不明白为啥有这样一个判断) ,最后是UEF,看了下异常处理函数链,根本就没有UEF处理函数~~ 最后又走过了一大堆VM,ZwRaiseException ... 进程挂掉...

这时我便知道了,这个异常根本没有接管函数。。。
于是我便修改了int3地址的内存~!!!游戏没有挂掉,这说明了,在调试器没有附加的时候,这根线程根本不会所谓的"自己触发异常自己接管"

还有,要提一下,其实异常根本不是所谓的int 3,在ZwRaiseException下断,发现,它构造了假的异常信息。 返回调用ZwRaiseException的上一层,发现调用了ZwQueryInformationProcess  查询ProcessCookie ,判断是否查询成功,查询失败就
ZwRaiseException 构造一个假的异常地址 Code为 80000002的异常

于是我便HOOK ZwQueryInformationProcess   如果查询 ProcessCookie  返回EAX总等于0

好了windbg附加   游戏不出int3了 ,但是更加蛋疼的事情来了,触发了新的异常
来自 SSOPlatform.dll code c0000005 ,它也没有异常处理函数!!游戏挂了。。这个真有点束手无策了,因为游戏的VM段 不断有0xC0000005异常 自己接管,太混乱了

这时我便想知道 ,SSOPlatform.dll 触发的这个内存访问异常在没有调试器的时候会不会触发 既然它没有异常处理函数。。结果出来了,调试器不附加,这个地址 进程根本不会走

于是我便思考,为啥调试器附加的时候 会走这些地址触发异常呢? 我便GetThreadContext 233B线程的EIP,发现EIP在调试器没有的时候根本不动。。。
而EIP在哪里呢。。居然是 ZwWaitForSingleObject 那儿(add esp,4 应该是从内核等待信号出现后便会从这里开始走下去)   它等待的句柄是 一个EVENT。。它有信号了之后干嘛呢。。全是在vm里面,我跟了几分钟都没走出来 就不跟了。。。

总结如下:233B线程一直在等待一个事件的信号,当调试器附加的时候,事件便会变成有信号状态。然后触发它本不触发的异常。。异常也没有接管函数,导致了进程的挂掉。
我把进程所有的线程都挂起了,然后ollydbg附加游戏,只让233b 一根线程走,居然也等到到了信号。。。。。产生异常,,游戏挂掉

这时候问题来了 ,为何调试器一附加, 这个事件便会有信号? 是什么给了它信号。。

也许是一个未曾引起关注的反调试手段呢,假如它等待到了信号,触发到的不是异常,而是进行一些其他的猥琐手段,那么就更难受了。。

纯粹是为了研究 解惑。。。求高人帮助一下。。。中秋节快乐~

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (21)
雪    币: 41
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
字有点多。。看的有点乱,但是都是我的分析流程,有欠缺的地方,请指点一下。
2015-9-27 23:58
0
雪    币: 231
活跃值: (2666)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
帮顶下,分析的太仔细啦
2015-9-28 05:54
0
雪    币: 118
活跃值: (72)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
这个必须学习呀,感谢分享学习经验。
2015-9-28 07:05
0
雪    币: 155
活跃值: (147)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
知道原因比什么都重要,支持lz找出这个event
2015-9-28 08:20
0
雪    币: 43
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
MarK!
2015-9-28 09:48
0
雪    币: 255
活跃值: (677)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
如果你在没完全附加后中断前 暂停OD 那么这个信号就不会产生  很显然是中断后产生的
2015-9-29 04:00
0
雪    币: 41
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
谢谢回帖。在附加之前,我已经suspend进程了。  接下来附加之后,只让那一根线程跑,他还是等待到了信号和你所说的有一点出入

附加的流程我已经逆向过了,DebugActiveProcess只是创建调试对象,杜撰调试信息,设置进程调试端口,

,创建远程线程int3。但是为何一附加中断,这个事件便有了信号呢,是什么事件呢。。
2015-9-29 08:04
0
雪    币: 79
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
mark  最近在调试一程序 也遇到类似的情况  楼主怎么针对一个线程进行单独调试
2015-9-29 09:07
0
雪    币: 41
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
先挂起所有线程,然后ollydbg附加,让单独一根线程恢复,然后F9
2015-9-29 09:17
0
雪    币: 79
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
单独分析一个线程的话  关键是正确的执行流程很难把握  多线程相互守护  暂停其他线程 肯定会使要分析的线程执行流程跑偏   
2015-9-29 14:17
0
雪    币: 41
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
有道理。
2015-9-29 15:16
0
雪    币: 209
活跃值: (271)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
没有人研究过这个问题吗
2015-10-6 20:55
0
雪    币: 18
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
楼住你在开着游戏时调试其他进程程序会退不?
2015-10-6 22:32
0
雪    币: 41
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
和其他程序没有关系的....
2015-10-8 10:54
0
雪    币: 13
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
思路帖,大赞楼主!
2015-10-8 11:17
0
雪    币: 306
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
其实我想说,这个贴子的技术含量才高
因为
很多人,只说结果,根本不说分析过程
所以
X鸟,只能仰望,无从入手
而这贴,已经把法门说出来了
如果还看不懂

给自己再降一格吧
2015-10-10 07:48
0
雪    币: 6
活跃值: (1503)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
呵呵,分析思路很重要,支持
2015-10-10 08:57
0
雪    币: 18
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
楼主有最新的研究结果。我现在可以附加,可以接受最简单的调试信息,但不能下断,等几天我再看看
2015-11-23 22:26
0
雪    币: 248
活跃值: (3789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
这是个什么事件?调试事件?
2015-11-24 03:06
0
雪    币: 2312
活跃值: (4625)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
同样遇到这个问题顶一下
2018-6-3 23:01
0
雪    币: 477
活跃值: (1412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
安卓上也有
2020-9-27 23:07
0
游客
登录 | 注册 方可回帖
返回