首页
社区
课程
招聘
实在无聊,讨论下NP倒底Hook了哪几个API涵数
发表于: 2006-12-3 16:40 12321

实在无聊,讨论下NP倒底Hook了哪几个API涵数

2006-12-3 16:40
12321
bool CHookDllApi::SUB_IsHook(char *lpszApi)
{
        if(lpszApi==NULL || lpszApi[0]==NULL) return false;
        //kernel
        if(strcmp(lpszApi,"VirtualProtect")==NULL) return true;
        if(strcmp(lpszApi,"ReadProcessMemory")==NULL) return true;
        if(strcmp(lpszApi,"WriteProcessMemory")==NULL) return true;
        if(strcmp(lpszApi,"MoveFileW")==NULL) return true;
        if(strcmp(lpszApi,"OpenProcess")==NULL) return true;
        if(strcmp(lpszApi,"MapViewOfFile")==NULL) return true;
        if(strcmp(lpszApi,"MapViewOfFileEx")==NULL) return true;
        if(strcmp(lpszApi,"VirtualProtectEx")==NULL) return true;
        if(strcmp(lpszApi,"LoadLibraryExW")==NULL) return true;
        if(strcmp(lpszApi,"CreateProcessInternalW")==NULL) return true;
        //user
        if(strcmp(lpszApi,"PostMessageA")==NULL) return true;
        if(strcmp(lpszApi,"PostMessageW")==NULL) return true;
        if(strcmp(lpszApi,"SendMessageW")==NULL) return true;
        if(strcmp(lpszApi,"GetWindowThreadProcessId")==NULL) return true;
        if(strcmp(lpszApi,"SendMessageA")==NULL) return true;
        if(strcmp(lpszApi,"SetWindowsHookExA")==NULL) return true;
        if(strcmp(lpszApi,"SetWindowsHookExW")==NULL) return true;
        //ntdll
        if(strcmp(lpszApi,"ZwProtectVirtualMemory")==NULL) return true;
        if(strcmp(lpszApi,"ZwQuerySystemInformation")==NULL) return true;
        if(strcmp(lpszApi,"ZwReadVirtualMemory")==NULL) return true;
        if(strcmp(lpszApi,"ZwSuspendProcess")==NULL) return true;
        if(strcmp(lpszApi,"ZwSuspendThread")==NULL) return true;
        if(strcmp(lpszApi,"ZwTerminateProcess")==NULL) return true;
        if(strcmp(lpszApi,"ZwTerminateThread")==NULL) return true;
        if(strcmp(lpszApi,"ZwWriteVirtualMemory")==NULL) return true;

        return false;
}

我只发现了这几个API 但有关进程隐藏的那几个API,没有发现被HOOK

NP是通过什么来隐藏自身和子game进程的呢?
我对Ring0级调试不太熟悉,追踪NP执行流程到启动驱动那一块时,就没有继续追踪下去了,很遗憾

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (31)
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
2
9521来回答楼主吧
2006-12-3 16:44
0
雪    币: 201
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
最初由 shoooo 发布
9521来回答楼主吧

2006-12-3 17:18
0
雪    币: 201
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4


原来npggNT.des非ring0级

有点晕

只是Hook了ReadProcessMemory等API造成不能读取的假像
2006-12-3 17:39
0
雪    币: 304
活跃值: (82)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
5
弱弱的问一句,NP是什么?
是壳吗?
2006-12-3 17:41
0
雪    币: 201
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
GameGuard

专门用来保护游戏的程序
反调试技术比较历害
2006-12-3 17:46
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
7
写个东西读取文件比较一下内存就知道了
2006-12-3 17:53
0
雪    币: 201
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
最初由 forgot 发布
写个东西读取文件比较一下内存就知道了


嗯 现在的坎就在不知道NP是怎样隐藏自身进程的 在相关API中 没有发现Hook痕迹 写了个工具 让OD绕开被Hook的这些API 但attach不到游戏进程
2006-12-3 18:05
0
雪    币: 117
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
强人!来支持一下
2006-12-3 19:25
0
雪    币: 207
活跃值: (217)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
楼主加入我们的Anti-nProtect群一起讨论吧

7904889
2006-12-3 19:34
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
np 应该SDDT 查找进程, 应该 hook SDDT 网上有代码 Regmon。

最直接和有效的还是保护目标进程不让注入,不让注入一种隐藏自己,一种干掉被注入的线程。

不被注入就可以用OD调了。
2006-12-3 19:35
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
最初由 酷酷 发布
嗯 现在的坎就在不知道NP是怎样隐藏自身进程的 在相关API中 没有发现Hook痕迹 写了个工具 让OD绕开被Hook的这些API 但attach不到游戏进程


最好自己模拟一下OD加载的过程就明白那些地方出错了,OpenProcess不能打开目标进程,导致不能得到目标程序详细信息。。。。。。
2006-12-3 19:41
0
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
13
OpenProcess因为HOOK了SSDT
2006-12-3 20:09
0
雪    币: 222
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
名称位于 kernel32, 条目 103
地址=7C819513
名称=CreateProcessInternalW

名称位于 kernel32, 条目 140
地址=7C85A123
名称=DebugActiveProcess

名称位于 kernel32, 条目 157
地址=7C801625
名称=DeviceIoControl

名称位于 kernel32, 条目 421
地址=7C80ADA0
名称=GetProcAddress

名称位于 kernel32, 条目 596
地址=7C801AF1
名称=LoadLibraryExW

名称位于 kernel32, 条目 641
地址=7C80B905
名称=MapViewOfFile

名称位于 kernel32, 条目 642
地址=7C80B896
名称=MapViewOfFileEx

名称位于 kernel32, 条目 652
地址=7C821261
名称=MoveFileW

名称位于 kernel32, 条目 813
地址=7C8309E1
名称=OpenProcess

名称位于 kernel32, 条目 862
地址=7C8021CC
名称=ReadProcessMemory

名称位于 kernel32, 条目 1234
地址=7C801AD0
名称=VirtualProtect

名称位于 kernel32, 条目 1235
地址=7C801A5D
名称=VirtualProtectEx

名称位于 kernel32, 条目 1284
地址=7C80220F
名称=WriteProcessMemory

名称位于 GDI32, 条目 428
地址=77EFB471
名称=GetPixel

名称位于 USER32, 条目 5
地址=77D18A80
名称=GetWindowThreadProcessId

名称位于 USER32, 条目 9
地址=77D18CCB
名称=PostMessageW

名称位于 USER32, 条目 63
地址=77D1B8BA
类型=输出    (已知)
名称=SendMessageW

名称位于 USER32, 条目 103
地址=77D1CB85
类型=输出    (已知)
名称=PostMessageA

名称位于 USER32, 条目 308
地址=77D2E4AF
类型=输出    (已知)
名称=SetWindowsHookExW

名称位于 USER32, 条目 325
地址=77D2F118
类型=输出    (已知)
名称=SendInput

名称位于 USER32, 条目 332
地址=77D2F39A
类型=输出    (已知)
名称=SendMessageA

名称位于 USER32, 条目 384
地址=77D311E9
类型=输出    (已知)
名称=SetWindowsHookExA

名称位于 USER32, 条目 514
地址=77D55E4B
类型=输出    (已知)
名称=SetCursorPos

名称位于 USER32, 条目 622
地址=77D662FD
类型=输出    (已知)
名称=mouse_event

名称位于 USER32, 条目 623
地址=77D66341
类型=输出    (已知)
名称=keybd_event

名称位于 ADVAPI32, 条目 103
地址=77DE5C9D
区段=.text
类型=输出
名称=CreateProcessWithLogonW

对于某些函数,直接自己编写hooked的函数头,然后再直接跳转到old function address+5即可。

对于修改被保护进程的代码段内存,大家有什么好建议,讨论一下。
2006-12-3 21:38
0
雪    币: 325
活跃值: (97)
能力值: ( LV13,RANK:530 )
在线值:
发帖
回帖
粉丝
15
对于某些函数,直接自己编写hooked的函数头,然后再直接跳转到old function address+5即可。

对于修改被保护进程的代码段内存,大家有什么好建议,讨论一下。

1.不用这么麻烦如果只是HOOK 前5个字节
对照kernel32.dll的原始文件  把前面5个字节处理填充回去就可以了
2.恢复SSTD ,不过还是应该想办法跳过或者绕过驱动进入我们的电脑
毕竟驱动不是好玩的
2006-12-3 22:05
0
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
16
恢复SSDT只会重启
2006-12-3 22:07
0
雪    币: 325
活跃值: (97)
能力值: ( LV13,RANK:530 )
在线值:
发帖
回帖
粉丝
17
。。最近都学Themida
不过我在想
NP 怎么能够保证所有的游戏客户端都是运行在Administrator权限上?从而能够成功家在他的驱动?
恐怕不行吧~~  从兼容性的角度 和最新Visit发展动向
NP 都不可能强制加载驱动~
只要不加载驱动 其他的都好说
2006-12-3 22:12
0
雪    币: 222
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
最初由 foxabu 发布
对于某些函数,直接自己编写hooked的函数头,然后再直接跳转到old function address+5即可。

对于修改被保护进程的代码段内存,大家有什么好建议,讨论一下。

1.不用这么麻烦如果只是HOOK 前5个字节
........


如果你直接修改回去,游戏会直接退出,造成GameMon.des非法退出。那么你就再也无法运行任何进程了。因为驱动里面的hook还没有恢复。
当然,对于原来的老的版本np可能是可以这样做的。但是新版np是不行的。
2006-12-3 22:23
0
雪    币: 201
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
最初由 foxabu 发布
对于某些函数,直接自己编写hooked的函数头,然后再直接跳转到old function address+5即可。

对于修改被保护进程的代码段内存,大家有什么好建议,讨论一下。

1.不用这么麻烦如果只是HOOK 前5个字节
........


我用的是模仿NP防Hook的技术

自已copy 系统涵数库

用 copy的DLL中的API替换掉被Hook了API

我觉得尽量不要改NP的自身的东西,因为根本不知道NP是否做了校验,因为NP在每个Hook程序中,有个子线程在运行

2.恢复SSTD
惭愧,对内核级别的东西都不太熟悉...
2006-12-3 22:24
0
雪    币: 222
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
最初由 酷酷 发布
2.恢复SSTD
惭愧,对内核级别的东西都不太熟悉...


确实不能恢复,恢复以后会重启。
不过,我们可以重设某些sstd,然后采用 调试寄存器,实现一些功能(不能超过4个)。
但是,如果游戏利用seh使用了调试寄存器的话,就没有任何办法了。
对于某些游戏,如果你再覆盖了游戏使用seh设置的drx,游戏也会重启,当然这个就和np没关系了。

所有对于破np,最重要的就是破它的内存保护模块,才有实际意义。其他的玩玩就可以了。
2006-12-3 22:33
0
雪    币: 201
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
重启应该是被检测到了

2秒关机是在GameMon.des中用到了
2006-12-3 23:00
0
雪    币: 271
活跃值: (16)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
22
最初由 lflyspace 发布
确实不能恢复,恢复以后会重启。
不过,我们可以重设某些sstd,然后采用 调试寄存器,实现一些功能(不能超过4个)。
但是,如果游戏利用seh使用了调试寄存器的话,就没有任何办法了。
对于某些游戏,如果你再覆盖了游戏使用seh设置的drx,游戏也会重启,当然这个就和np没关系了。

........

内存保护弄的条件断点都下不了 郁闷
2006-12-4 01:58
0
雪    币: 304
活跃值: (82)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
23
以System权限开OD,看有什么进程能对付OD,
2006-12-4 13:43
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
24
BOOT权限才是最高权限吧?

有点搞不懂了
2006-12-4 16:25
0
雪    币: 117
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
继续关注中。。
2006-12-4 21:35
0
游客
登录 | 注册 方可回帖
返回
//