首页
社区
课程
招聘
[原创]游戏保护那些事儿~~过滤函数里,tp爆非法模块的解决方法
发表于: 2013-1-27 07:07 13278

[原创]游戏保护那些事儿~~过滤函数里,tp爆非法模块的解决方法

2013-1-27 07:07
13278

在前面AD一下:www.AntiGameProtect.com 反游戏保护技术研究

在hookport过滤函数中,一不小心就种了tp的圈套~~下面是处理方法:

NTSTATUS __stdcall NewNtOpenProcess(
        OUT PHANDLE             ProcessHandle,
        IN ACCESS_MASK          AccessMask,
        IN PVOID                           ObjectAttributes,
        IN PCLIENT_ID           ClientId
        )
{
        PEPROCESS EProcess;
        NTSTATUS status;
        ZWOPENPROCESS OldZwOpenProcess;
        ULONG ulPage;

        __asm{
                push eax
                mov eax,[ebp+4]
                mov ulPage,eax
                pop eax
        }
        //如果是自己的驱动调用,则返回哦
        if (ulPage >= ulMyDriverBase && ulPage <= ulMyDriverBase+ulMyDriverSize)
        {
                goto _FunctionRet;
        }
        if (KeGetCurrentIrql() != PASSIVE_LEVEL)
        {
                goto _FunctionRet;
        }
        //如果退出了
        if (!bIsInitSuccess)
                goto _FunctionRet;

        //是否要保护
        if (!bProtectProcess)
                goto _FunctionRet;

        //过滤掉桌面进程以及csrss进程
        if (_stricmp(PsGetProcessImageFileName(RPsGetCurrentProcess()),"explorer.exe") == 0 ||
                RPsGetCurrentProcess() == CsrssEProcess)
        {
                goto _FunctionRet;
        }
        if (MmIsAddressValidEx(ClientId))
        {
                if (IsFromDebugProcessId(ClientId->UniqueProcess))
                {
                        //乾坤大挪移
                        ClientId->UniqueProcess = PsGetCurrentProcessId();

                        if (DebugOn)
                                KdPrint(("open OD process by %s\n",PsGetProcessImageFileName(RPsGetCurrentProcess())));
                }
                //如果调用者不是csrss,那么所有来自任何进程打开csrss的操作,都XXXX
                if (PsGetCurrentProcessId() != CsrssID)
                {
                        if (ClientId->UniqueProcess == CsrssID)
                        {
                                //乾坤大挪移
                                ClientId->UniqueProcess = PsGetCurrentProcessId();

                                if (DebugOn)
                                        KdPrint(("open csrss process by %s\n",PsGetProcessImageFileName(RPsGetCurrentProcess())));
                        }
                }
        }
_FunctionRet:
        //tp的菊花痒了,非得用原始KeServiceDescriptorTable里面的函数,经过tp的钩子,才不报非法模块
        OldZwOpenProcess = KeServiceDescriptorTable->ServiceTable[ZwOpenProcessIndex];

        //让OD能XXXXXX
        if (IsFromDebugProcess(RPsGetCurrentProcess()))
        {
                OldZwOpenProcess = OriginalServiceDescriptorTable->ServiceTable[ZwOpenProcessIndex];
        }
        return OldZwOpenProcess(
                ProcessHandle,
                AccessMask,
                ObjectAttributes,
                ClientId
                );
}


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

收藏
免费 6
支持
分享
最新回复 (9)
雪    币: 297
活跃值: (120)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
哈哈,刚睁开眼,就看到这么好的东西,沙发我全占啦
2013-1-27 09:30
0
雪    币: 11138
活跃值: (158)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
过tp呀,学习学习。
2013-1-27 10:09
0
雪    币: 1895
活跃值: (1657)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
4
这论坛。。碉堡了。。。
2013-1-27 11:45
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
网站怎么还要翻墙才能去
2013-1-27 11:49
0
雪    币: 6542
活跃值: (4341)
能力值: ( LV10,RANK:163 )
在线值:
发帖
回帖
粉丝
6
           TX的工资比较高啊,应该让他们多加加班.
2013-1-27 12:18
0
雪    币: 71
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
厉害
学习了
2013-1-27 12:43
0
雪    币: 51
活跃值: (61)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
8
厉害
学习了
2013-3-18 19:54
0
雪    币: 42
活跃值: (26)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
顶一个  我还得再去学习基础呀
2013-3-19 13:47
0
雪    币: 18
活跃值: (117)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
markkkkkkk
2013-10-12 15:07
0
游客
登录 | 注册 方可回帖
返回
//