首页
社区
课程
招聘
[讨论]NP在Ring0的保护
发表于: 2007-3-16 11:46 14773

[讨论]NP在Ring0的保护

2007-3-16 11:46
14773
NP=> nProtect GameGuard (907)
  在Ring3,NP的保护很容易破,Hook GetCurrentProcess,然后FreeLibrary(npggNT.des)就行啦。这里先感谢并向堕落天才学习!![http://bbs.pediy.com/showthread.php?threadid=37353]。
  
  NP在Ring0确有拦截,npptNT2.sys加载后,并没有在原函数开始处加jmp XXXXXXXX,而是直接改了SSDT表中的几个函数地址:
NtDeviceIoControlFile (0x42)
NtOpenProcess (0x7A)
NtProtectVirtualMemory(0x89)
NtReadVirtualMemory(0xBA)
NtWriteVirtualMemory(0x115)

下面是NP检查NtOpenProcess的代码:
f880a682 - 55                         - push ebp
f880a683 - 8b ec                      - mov ebp,esp
f880a685 - 51                         - push ecx
f880a686 - 56                         - push esi
f880a687 - 57                         - push edi
f880a688 - 50                         - push eax
f880a689 - 8b 46 ec                   - mov eax,[esi-14]
f880a68c - 89 45 fc                   - mov [ebp-04],eax
f880a68f - 58                         - pop eax
f880a690 - be 48 dc 80 f8             - mov esi,f880dc48
f880a695 - 33 c9                      - xor ecx,ecx
f880a697 - 8b c6                      - mov eax,esi
f880a699 - 41                         - inc ecx
f880a69a - f0 0f c1 08                - lock xadd [eax],ecx
f880a69e - 8b 7d 14                   - mov edi,[ebp+14]
f880a6a1 - 33 c0                      - xor eax,eax
f880a6a3 - 38 05 33 dc 80 f8          - cmp [f880dc33],al  <这些cmp/jxx是检查"非法"操作
f880a6a9 - 74 39                      - je f880a6e4
f880a6ab - 38 05 30 dc 80 f8          - cmp [f880dc30],al
f880a6b1 - 74 31                      - je f880a6e4
f880a6b3 - 3b f8                      - cmp edi,eax
f880a6b5 - 74 2d                      - je f880a6e4
f880a6b7 - 50                         - push eax
f880a6b8 - ff 37                      - push [edi]
f880a6ba - e8 45 fe ff ff             - call f880a504
f880a6bf - 84 c0                      - test al,al
f880a6c1 - 75 21                      - jne f880a6e4
f880a6c3 - 8b 45 fc                   - mov eax,[ebp-04]
f880a6c6 - 3b 05 84 d3 80 f8          - cmp eax,[f880d384]
f880a6cc - 72 0f                      - jb f880a6dd
f880a6ce - 3b 05 88 d3 80 f8          - cmp eax,[f880d388]
f880a6d4 - 76 0e                      - jna f880a6e4
f880a6d6 - 3d 00 00 00 80             - cmp eax,80000000
f880a6db - 73 07                      - jae f880a6e4
f880a6dd - b8 22 00 00 c0             - mov eax,c0000022
f880a6e2 - eb 10                      - jmp f880a6f4
f880a6e4 - 57                         - push edi
f880a6e5 - ff 75 10                   - push [ebp+10]
f880a6e8 - ff 75 0c                   - push [ebp+0c]
f880a6eb - ff 75 08                   - push [ebp+08]
f880a6ee - ff 15 e0 de 80 f8          - call dword ptr [f880dee0]  <这里是原函数的地址
f880a6f4 - 83 c9 ff                   - or ecx,ff
f880a6f7 - f0 0f c1 0e                - lock xadd [esi],ecx
f880a6fb - 5f                         - pop edi
f880a6fc - 5e                         - pop esi
f880a6fd - c9                         - leave
f880a6fe - c2 10 00                   - ret 0010
f880a701 - cc                         - int 3

  我先试着把SSDT里的函数地址改回来,机器立即重启。修改上面这段代码(jmp回原函数)也会导致立即重启,看来NP两个地方都在查。用调试寄存器在f880a682设断点,我也没找到什么地方在读这段代码,NP在我前面处理了异常?
  我最后的试验是在SSDT里新加一个地址(0x11C),写上原NtOpenProcess函数(805cac46),然后用OD调试OD,把被调试的OD里ZwOpenProcess改成mov eax,11c...可是加了地址后就重启。
  大家有没有破NP Ring0保护的思路?我刚开始学写驱动,每天蓝屏N次,就是想有一天能用OD attach上游戏...呵呵

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (24)
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
2
假设你成功的避开了ring3的注入,假设成功的避开ring0 hook.那你怎么对付代码段扫描呢?NP会那文件去效验整个代码段,文件也会用Hash检查的。而且问题是,怎么在NP的服务器验证功能正常的情况下,做到这些事
2007-3-16 13:13
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zby
3
  游戏是MapleStory,国际版的那个。CRC的检查已经有前辈解决了,CheatEngine Forum里有现成的代码,这里不贴了。 不知是谁找到了校验代码的位置,只要dump一个原始映像,加载到游戏进程,把校验代码改一下,让它去读我的dump就行了。
  还有,NP好像不检查文件,因为我用的是已经脱壳了的,这里还要感谢VolX的Aspr2.XX_unpacker_v1.0脚本!!所以...现在就想动态调试
2007-3-16 13:47
0
雪    币: 293
活跃值: (110)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
4
1,Add MyService
2,hook sysenter
3,SystemServiceID->MyServiceID
4,MyService JMP ->SystemService Function + N bytes

NP968下通过
2007-3-16 13:53
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
堕落兄,可以把你QQ告诉我吗?
2007-3-16 14:03
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zby
6
谢谢堕落兄,学习试验中.....
2007-3-16 14:31
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
最初由 堕落天才 发布
1,Add MyService
2,hook sysenter
3,SystemServiceID->MyServiceID
4,MyService JMP ->SystemService Function + N bytes

........


什么是SystemServiceID? 是不是就是系统服务的列表? 那个
KeServiceDescriptorTable什么的。
2007-3-16 14:50
0
雪    币: 242
活跃值: (14)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
最初由 zby 发布
谢谢堕落兄,学习试验中.....

是用KeAddSystemServiceTable吧?


这个兄弟不要给自己设置框框嘛~,反正知道SSDT的位置,怎么写随你便
电脑是你自己花钱买的,当然是你说了算~
2007-3-16 15:04
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
内核hook系统函数的方法据我所知也就两个:

1. 修改KeServiceDescriptorTable中的表项
2. 直接修改系统函数,比如在函数开头写一个jmp到自己的一个函数,然后再回来。

据我调试的结果,np会同时检查这两个地方。你任何修改一个地方都会导致计算机重启。

看堕落天才的说法,似乎是new一个新的KeServiceDescriptorTable,然后修改这个新的table的项。np检查的是没有改过的旧的KeServiceDescriptorTable,这样确实可以逃过两个检查。可惜兄弟我不知道怎么做。

请搞定了的大侠明示。
2007-3-16 15:28
0
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
10
搞maplestroy的真多。。。
只见过v961

不是不检查,Np对aspr做了特殊处理
2007-3-16 16:56
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
最初由 堕落天才 发布
1,Add MyService
2,hook sysenter
3,SystemServiceID->MyServiceID
4,MyService JMP ->SystemService Function + N bytes

........


堕落天才,太有才了没办法
2007-3-16 17:29
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
学习了  
2007-3-16 17:29
0
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
13
如果NP使用了驱动扫描功能,不知道会不会把自己的驱动给卸掉
2007-3-16 17:56
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
NP 实在是太猥琐
2007-3-17 01:12
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
能不能不让重起,都不敢分析了
2007-3-19 00:12
0
雪    币: 213
活跃值: (96)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
16
<武林外传>
老刑:你知道猪八戒小姨子咋死的吗? 小六:怎么死的? 老刑:笨死的。 小六:对,笨死的
2007-3-19 08:44
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
最初由 smallpig 发布
内核hook系统函数的方法据我所知也就两个:

1. 修改KeServiceDescriptorTable中的表项
2. 直接修改系统函数,比如在函数开头写一个jmp到自己的一个函数,然后再回来。

........


没有大侠回答我的问题? 谢谢
2007-3-19 11:48
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
最初由 云重 发布
<武林外传>
老刑:你知道猪八戒小姨子咋死的吗? 小六:怎么死的? 老刑:笨死的。 小六:对,笨死的


老刑:你知道猪八戒小姨子咋死的吗? 小六:怎么死的? 老刑:笨死的。 小六:对,笨死的

确实是这样,哈哈哈
2007-3-21 16:24
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
NP的代码校验确实非常讨嫌, 每次我只要一修改代码,基本上半分钟就给我一个RunTime Error
2007-4-9 20:06
0
雪    币: 214
活跃值: (70)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
20
我又来了
2007-4-9 23:44
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zby
21
NP又升级了,GG Rev1000,现在开IceSword都会重启。。。
2007-4-10 06:30
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
2007-4-10 08:01
0
雪    币: 114
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
NP新难题又出现了
2007-4-11 10:40
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
hook fake-ntoskrl.exe
2007-4-12 10:40
0
雪    币: 114
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
越来越云里雾里了
2007-4-12 12:38
0
游客
登录 | 注册 方可回帖
返回
//