首页
社区
课程
招聘
[求助]某游戏WIN7 hook CreateProcessW勾不到,WIN10可以
发表于: 2016-6-12 17:55 10493

[求助]某游戏WIN7 hook CreateProcessW勾不到,WIN10可以

2016-6-12 17:55
10493
TX某游戏的启动器里面hook CreateProcessW能勾到,并且可以附带着注入进cross****.exe。然后cross****.exe会再启动一次它自己,第二次启动的才是真正的游戏。

现在问题来了:

在WIN10 X64下勾第一个cross****.exe的CreateProcessW,能勾到启动第二个cross****.exe,并且也可以成功注入。
但是某些WIN7 X64下勾第一个cross****.exe的CreateProcessW,毛都勾不到。(注意是某些,在网吧实测的时候有的网吧能注入、有的网吧不能)
两个系统下勾ntdll!NtCreateUserProcess都可以正常勾到,但是WIN7X64注入失败;WIN10X64成功。深究下去发现是SetThreadContext无效(返回成功但无效果)。XT看SetThreadContext、NtSetContextThread无钩子

从内部打印调用堆栈(两个系统的结果一样):
c********Base.dll+0xF583
c********Base.dll+0x7BDEBD
c********Base.dll+0x8B4040
c********.exe+0x3C2A27
ntdll.dll+0x65DE3, 772B5DE3
ntdll.dll+0x65DAE, 772B5DAE

我的CreateProcessW取的是GetProcAddress(LoadLibrary(L"kernel32"), "CreateProcessW");

目前怀疑是不是由于系统的IAT HOOK导致取到“假”的CreateProcessW了?


2016-6-16更新:

目前发现第一个*F会内存加载几个dll(完整PE格式,可IDA,无壳无VM),还会从system32读取ntdll.dll把所有系统服务函数(Zw)加载到内存里(这部分貌似不是memdll,dump之后IDA不能)然后从刚才加载的内存dll中手动调用这些Zw函数(应该是为了防止下钩下断)来完成启动第二个*F的工作和一些其他的事情。比如XP下就会调用他自己复制的ZwCreateProcessEx+ZwCreateThread。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 14
活跃值: (80)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
在第二个游戏进程里 直接HOOK NtCreateUserProcess 即可
2016-6-12 21:08
0
雪    币: 12876
活跃值: (9357)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
3
已经试过第二个进程里HOOK NtCreateUserProcess了。现在问题是SetThreadContext注入失败:GetThreadContext每次取到的EIP都是0x70000或者0x700002,SetThreadContext之后再GetThreadContext发现EIP没变。XT看SetThreadContext、NtSetContextThread、ZwSetContextThread无钩子、莫菲是r0的NtSetContextThread里面做了手脚?但是x64的ssdt不是改不了吗?MSR寄存器我也看过没hook、难道是VT接管syscall?但是这样的话按理说应该win10也改不了ThreadContext啊?而且这是刚创建的进程,要有保护也不会这么早就加上去的。
2016-6-12 22:30
0
雪    币: 83
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
注入方式不需要纠结SetThreadContext 使用这个API只是为了改变EIP
2016-6-13 02:10
0
雪    币: 12876
活跃值: (9357)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
5
果然用QueueUserAPC就行了,蟹蟹!
2016-6-13 09:11
0
游客
登录 | 注册 方可回帖
返回