首页
社区
课程
招聘
[讨论]某反**系统的KiTrap01 Hook
发表于: 2009-4-5 11:06 12164

[讨论]某反**系统的KiTrap01 Hook

2009-4-5 11:06
12164
闲来无事,找个反**系统的最软柿子捏捏,研究其原理也是一种快速的学习方法,比起没头没脑的看书效率要高吧,呵呵...
.text:00016672 ; =============== S U B R O U T I N E =======================================
.text:00016672 X_INT1          proc near
.text:00016672                 pusha
.text:00016673                 pushf
.text:00016674                 push    ds
.text:00016675                 push    ss
.text:00016676                 push    es
.text:00016677                 push    fs
.text:00016679                 push    gs
.text:0001667B                 cmp     al, 0D2h        ; 此处AL里的内容是啥,为何要和D2比较
.text:0001667D                 jnz     short AL_NOT_EQUL_D2
.text:0001667F                 mov     ds:0B581BE58h, eax
.text:00016684                 mov     eax, dr0
.text:00016687                 mov     ds:0B581BE68h, eax
.text:0001668C                 mov     eax, dr1
.text:0001668F                 mov     ds:0B581BE6Ch, eax
.text:00016694                 mov     eax, dr2
.text:00016697                 mov     ds:0B581BE70h, eax
.text:0001669C                 mov     eax, dr3
.text:0001669F                 mov     ds:0B581BE74h, eax
.text:000166A4                 mov     eax, dr6
.text:000166A7                 mov     ds:0B581BE78h, eax ; 保存调试寄存器的内容
.text:000166AC                 xor     eax, eax
.text:000166AE                 mov     dr0, eax
.text:000166B1                 mov     dr1, eax
.text:000166B4                 mov     dr2, eax
.text:000166B7                 mov     dr3, eax
.text:000166BA                 mov     eax, dr6
.text:000166BD                 and     eax, 0Fh        ; 判断是陷阱标志还是调试寄存器触发单步Kitrap01
.text:000166C0                 jz      short SINGLE_STEP_INTERRUPT
.text:000166C2                 xor     eax, eax        ; 调试寄存器触发Kitrap01
.text:000166C4                 mov     ax, dx          ; 此处dx的内容是什么?
.text:000166C7                 mov     ds:0B581BE5Ch, eax
.text:000166CC                 mov     eax, ds:0B581BE58h
.text:000166D1                 and     eax, 0FFh
.text:000166D6                 mov     ds:0B581BE60h, eax
.text:000166DB                 mov     eax, ebp
.text:000166DD                 mov     eax, [eax+4]
.text:000166E0                 mov     ds:0B581BE64h, eax ; 以上几句不明白什么意思
.text:000166E5                 inc     dword ptr ds:0B581BE7Ch
.text:000166EB                 jmp     short ORG_INT1
.text:000166ED ; ---------------------------------------------------------------------------
.text:000166ED
.text:000166ED SINGLE_STEP_INTERRUPT:                  ; CODE XREF: X_INT1+4Ej
.text:000166ED                 jmp     short ORG_INT1
.text:000166EF ; ---------------------------------------------------------------------------
.text:000166EF
.text:000166EF AL_NOT_EQUL_D2:                         ; CODE XREF: X_INT1+Bj
.text:000166EF                 mov     eax, dr0
.text:000166F2                 mov     ds:0B581BE68h, eax
.text:000166F7                 mov     eax, dr1
.text:000166FA                 mov     ds:0B581BE6Ch, eax
.text:000166FF                 mov     eax, dr2
.text:00016702                 mov     ds:0B581BE70h, eax
.text:00016707                 mov     eax, dr3
.text:0001670A                 mov     ds:0B581BE74h, eax
.text:0001670F                 mov     eax, dr6
.text:00016712                 mov     ds:0B581BE78h, eax
.text:00016717                 xor     eax, eax
.text:00016719                 mov     dr0, eax
.text:0001671C                 mov     dr1, eax
.text:0001671F                 mov     dr2, eax
.text:00016722                 mov     dr3, eax
.text:00016725
.text:00016725 ORG_INT1:                               ; CODE XREF: X_INT1+79j
.text:00016725                                         ; X_INT1:SINGLE_STEP_INTERRUPTj
.text:00016725                 mov     eax, edx
.text:00016727                 cmp     al, 64h
.text:00016729                 jz      short INTERRUPT_RET
.text:0001672B                 mov     eax, edx
.text:0001672D                 cmp     al, 65h
.text:0001672F                 jz      short INTERRUPT_RET
.text:00016731                 call    GetOrg_INT1
.text:00016736                 mov     eax, ds:0B581BE54h
.text:0001673B                 cmp     eax, 0
.text:0001673E                 jz      short INTERRUPT_RET
.text:00016740                 pop     gs
.text:00016742                 pop     fs
.text:00016744                 pop     es
.text:00016745                 pop     ss
.text:00016746                 pop     ds
.text:00016747                 popf
.text:00016748                 popa
.text:00016749                 jmp     dword ptr ds:0B581BE54h ; 原始中断例程入口处
.text:0001674F ; ---------------------------------------------------------------------------
.text:0001674F
.text:0001674F INTERRUPT_RET:                          ; CODE XREF: X_INT1+B7j
.text:0001674F                                         ; X_INT1+BDj ...
.text:0001674F                 pop     gs
.text:00016751                 pop     fs
.text:00016753                 pop     es
.text:00016754                 pop     ss
.text:00016755                 pop     ds
.text:00016756                 popf
.text:00016757                 popa
.text:00016758                 push    eax
.text:00016759                 mov     eax, ds:0B581BE68h
.text:0001675E                 mov     dr0, eax
.text:00016761                 mov     eax, ds:0B581BE6Ch
.text:00016766                 mov     dr1, eax
.text:00016769                 mov     eax, ds:0B581BE70h
.text:0001676E                 mov     dr2, eax
.text:00016771                 mov     eax, ds:0B581BE74h
.text:00016776                 mov     dr3, eax
.text:00016779                 pop     eax
.text:0001677A                 iret
.text:0001677A X_INT1          endp

大概的流程就是获取调试信息,然后跳转到原中断处理程序,其中用到了EAX,EDX寄存器,不知道这两个寄存器时干嘛用的,另外这个hook是如何知道正在调试游戏进程的呢?希望大家可以讨论讨论,也希望高手能指教一二...

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (22)
雪    币: 210
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
没人讨论,自己顶一下。
2009-4-6 02:03
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
罪过...罪过..........
2009-4-6 02:40
0
雪    币: 210
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
那就怪了,我开着保护系统,调试一般的程序,单步,硬件断点都正常,一旦调试游戏进程,单步和硬件断点都无法正常工作。这是为什么呢?肯定是int1在作怪的吧。
2009-4-6 10:34
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
检测进程是否被调试以及干扰调试的方法多了去了,为什么一定要认为他是在int1这里处理的?
2009-4-6 10:50
0
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
既然挂钩了 int 1

就有挂钩的理由
2009-4-6 11:29
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
请看3楼.......
2009-4-6 11:41
0
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
楼上没玩过驱动?
2009-4-6 11:44
0
雪    币: 210
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
我把保护系统的所有线程都挂起了,内核钩子也都恢复了,应该没理由能干扰调试了,其中这几句
.text:000166C7                 mov     ds:0B581BE5Ch, eax
.text:000166CC                 mov     eax, ds:0B581BE58h
.text:000166D1                 and     eax, 0FFh
.text:000166D6                 mov     ds:0B581BE60h, eax
.text:000166DB                 mov     eax, ebp
.text:000166DD                 mov     eax, [eax+4]    ; 获取函数返回地址
.text:000166E0                 mov     ds:0B581BE64h, eax ; 以上几句不明白什么意思
.text:000166E5                 inc     dword ptr ds:0B581BE7Ch
比较怪,ebp+4那应该是某个返回地址,不知道这样设计是啥意思,也有可能是保护系统处理自己的异常,如果被恢复了异常处理不了就会BSOD,这是我的理解,不一定对。
2009-4-6 11:47
0
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
不用线程一样监视的

西游Q计的驱动就没有线程

是2D游戏?

有空我也玩玩

你可以用 海风 的强大插件保护OD

大多反调试都会挂

如果单步还挂,那就考虑下

驱动挂接了int1的情况了
2009-4-6 11:48
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
其实偶是个小菜........ ````驱动玩得不多````没研究过int 1```
2009-4-6 11:57
0
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
完美的 神鬼传奇 就有了

楼主去看看
2009-4-6 11:59
0
雪    币: 210
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
嗯,好的,谢谢大家,谢谢楼上的。
总感觉反调试是在int1,不用线程监视的话,也就是hook啊hook(套用猪娃哥的话 )。恢复了内核SSDT和Inlinehook,一般都能搞定。另外,我搞了另一个没有int1的版本,可以调试,有int1的却不行,郁闷....
2009-4-6 12:06
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
如果楼主在捏的是那啥高丽棒子的某软柿子的话.....那楼主就真的把它想复杂了..-0-```国内的驱动反XX没看过
2009-4-6 12:07
0
雪    币: 210
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
就是棒子的,哪篇文章,麻烦给个地址我看下。
2009-4-6 12:08
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
说得太白了不好..........总之你离成功不远了..- -!....考虑全面点,那个int 1根本不用管他是怎么处理的.....
2009-4-6 12:10
0
雪    币: 210
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
嗯,谢了 ,我再去研究研究
2009-4-6 12:20
0
雪    币: 210
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
真奇怪了,我把INT1恢复就能单步,一旦挂上就不行。看来还是Kitrap挂钩反调试了,就是弄不明白它是怎么做到反调试的。
2009-4-7 18:53
0
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
挂你 int1 在你调试器收到异常前给和谐了
2009-4-7 19:32
0
雪    币: 210
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
楼上怎么说,不是很明白啊
2009-4-7 22:53
0
雪    币: 389
活跃值: (967)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
21
3层里面还有 ANTI ...直接给64号端口发消息重启
2009-5-5 21:39
0
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
22
Xtrap.鉴定完毕
貌似Xtrap市场开始扩大了。
楼主可以搜索NetRoc贴得src
2009-5-6 01:45
0
雪    币: 210
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
NetRoc的src过时了,新版的非常强悍....,前几个版本很容易就能搞定.
2009-5-14 10:27
0
游客
登录 | 注册 方可回帖
返回
//