用户层过游戏反挂保护的可行性
我们以就上魔力私服为例,改私服通过hook ssdt来保护游戏进程,其中被hook的内核函数有四个ntOpenProcess,ntWriteVirtualMemory,ntReadVirtualMemory,ntCreatThread。当然其用户空间也inline hook了几个函数我们先不讨论,我们讨论分析一下在用户空间过掉内核层保护的可行性。
0 ^3 X% r2 _; Z4 r; p妖城在线论坛 假定使用的是INTEL cpu并且是xp sp3系统,我们都知道用户空间的函数通过调用NTDLL.DLL导出的中介函数来进行fastsystemcall来进入内核,也就是从R3进入R0。以ntOpenProcess为例,其系统调用号为7A,通常用户空间函数Openprocess通过调用系统描述符表的第7A*4项来实现其功能,也就是ntOpenProcess。我来来看一下NTDLL.DLL中的中介函数ntOpenprocess代码:; F; L4 n( L) p/ D! ]+ Y8 Q n' U
(使用工具W32asm)
6 {; A# Y9 o7 e! c- l:7C92D5FE mov eax,0000007A魔力私服,最新魔力宝贝私服技术交流9 p: e/ K. O+ ?( B& ?# [- {
...魔力私服,最新魔力宝贝私服技术交流) B& T1 [) F U# Z2 D
...
4 @2 s6 W K9 `9 [0 b, s1 B可以看到函数入口处的第一行代码就是将系统调用号赋值给eax寄存器,如果我们将这个调用号改变呢?当然还牵涉到参数的个数问题,如果我们找到一个和ntOpenProcess参数一样的函数呢?(本人还没有去找,ntoskel有几百个导出函数,总会有好多一样的吧)这种方法是不是可以绕过游戏保护呢?妖城在线论坛! ^) g+ J2 _5 o G, P' G) P/ R% O( ^
ps:只讨论用户层实现方法,内核的方法太多就不讨论了吧