首页
社区
课程
招聘
[原创]第2弹
发表于: 2016-2-19 16:50 17628

[原创]第2弹

2016-2-19 16:50
17628
收藏
免费 4
支持
分享
最新回复 (44)
雪    币: 350
活跃值: (87)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
26
用不着VM这么高级,我们可以模拟它的反外挂客户端,直接让服务器于我的外挂模拟的反外挂客户端通讯,把真的反外挂客户端晾在一边,不就可以了么?
如果得到回复包的格式的话,直接在网卡处拦截网络数据包,修改之后再发给服务器,那你的客户端检测不就作废啦?从源码上看,发送给服务器的消息并没有加密,导致我可以发动用外挂发起中间人攻击,去欺骗你的外挂检测系统!这样当你的客户端检测到外挂,并且发消息给服务器的时候,我就可以拦截你的消息,然后我发一个消息欺骗服务器,

换句话说,你的数据结构是没有加密的,那我的外挂可以在客户端处模仿你的反外挂客户端,这样的话,你的服务器发给我,并且要你的反外挂客户端执行的代码,不就作废了么?
2016-2-29 19:44
0
雪    币: 350
活跃值: (87)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
27
NP的保护有驱动成分在那里的,我前段时间无聊,简单的看了一下NP的保护,奶奶的,居然在驱动下注册了回调函数,和DPC,以及定时器函数,并且检查了加载进入NP保护的进程的模块程序,更加无语的是在32位的系统中NP保护启动时,会拒绝所有的驱动的加载,还有一点我比较郁闷的是,NP安装进入系统之后,不知道修改了什么地方,居然使得VS无法启动调试功能,我去,这个保护系统连VS的IDE都给我废了,我真无语,不仅如此,NP启动之后,OD也无法启动它的调试功能,我晕,NP不仅反外挂,就连制造外挂用的调试器都给我废了,也真是无语了
2016-2-29 20:00
0
雪    币: 1692
活跃值: (2292)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
28
感谢分享
2016-2-29 20:55
0
雪    币: 99
活跃值: (110)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
29
支持楼主!!!!!!!!!!1
2016-2-29 22:04
0
雪    币: 14
活跃值: (285)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
30
他的驱动保护是可以停的,要不怎么分析NP是怎么算包的。
2016-2-29 23:13
0
雪    币: 14
活跃值: (285)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
31
唉,这个怎么是乱搞的代码,今天是我心情好,发点GAMEMON的代码出来给你看看,识货的人,用这个研究下就可以回包了。还有一点需要更正下,NP对INCA来说,不是一个反外挂系统,这个系统的设计目标人家写的很清楚=> "NO1 Global Game Security Solution "。
2016-2-29 23:26
0
雪    币: 163
活跃值: (103)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
32
兄台你理解错我的意思啦
我不是说你发的是乱搞的代码,我的意思是在不理解np的情况下,不知道有cs模块这个东西,想搞定np,才是乱搞啊。另外在游戏的封包处理函数中找到cs的处理点也不是个容易的事情,尤其是被加vm的时候。
2016-2-29 23:46
0
雪    币: 615
活跃值: (585)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
33
每个看官的水准不一样,有的觉得太浅,有得觉得太简单,有的还是看不懂,觉得太难的也大有人在。
2016-3-1 08:57
0
雪    币: 350
活跃值: (87)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
34
我比较郁闷的是,我停了很久都没有停掉驱动保护
2016-3-3 19:06
0
雪    币: 14
活跃值: (285)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
35
哥们,研究下GAMEMON.DES的实现就可以的.类似如下的功能代码.
bool SetDriverDisable()
{
        __try
        {
                __try
                {
#if 0
                        DWORD SetDriverDisable = 0x004242F0;
                        DWORD FunctionA = *(DWORD*)0x0053A52C;
                        DWORD FunctionB = *(DWORD*)0x0053D300;
                        DWORD nDataA = 0;
                        DWORD nDataB = 0;
                        DWORD nDataC = 0;
                        DWORD nDataD = 0x0052C610;
                        bool bResult = false;
                        __asm
                        {
                                pushf
                                pusha

                                call FunctionA
                                mov nDataA,eax

                                mov ebx,nDataD
                                mov ebx,[ebx]
                                sub ebx,eax
                                mov eax,nDataD
                                mov [eax],ebx

                                push 0x04
                                lea eax,nDataB
                                push eax
                                push 0x04
                                lea eax,nDataA
                                push eax
                                push 0x84020024
                                lea eax,nDataC
                                push eax
                                push 0
                                push 0
                                push 0
                                mov eax,0x0052C60C
                                mov eax,[eax]
                                push eax
                                call FunctionB
                                test eax,eax
                                jnz _out
                                mov eax,nDataB

                                mov ebx,nDataD
                                mov ebx,[ebx]
                                sub ebx,eax
                                mov eax,nDataD
                                mov [eax],ebx
                               
                                mov al,1
                                mov bResult,al
_out:
                                popa
                                popf
                        }
#else
                        DWORD SetDriverDisable = 0x00424450;
                        bool bResult = false;
                        __asm
                        {
                                pushf
                                pusha
                                call SetDriverDisable
                                mov bResult,al
                                popa
                                popf
                        }

#endif
                        return bResult;
                }
                __finally
                {
                }
        }
        __except(EXCEPTION_EXECUTE_HANDLER)
        {
        }
        return false;
}

bool SetDriverEnable()
{
        __try
        {
                __try
                {
#if 1
                        DWORD SetDriverEnable = 0x004242F0;
                        DWORD FunctionA = *(DWORD*)0x0053A52C;
                        DWORD FunctionB = *(DWORD*)0x0053D300;
                        DWORD FunctionC = *(DWORD*)0x00503384;
                        DWORD FunctionD = *(DWORD*)0x00503380;
                        DWORD nDataA = 0;
                        DWORD nDataB = 0;
                        DWORD nDataC = 0;
                        DWORD nDataD = 0x0052C610;
                        bool bResult = false;
                        __asm
                        {
                                pushf
                                pusha

                                push 0x0053D5CC
                                call FunctionC

                                call FunctionA
                                mov nDataA,eax

                                mov ebx,nDataD
                                mov ebx,[ebx]
                                add ebx,eax
                                mov eax,nDataD
                                mov [eax],ebx

                                push 0x04
                                lea eax,nDataB
                                push eax
                                push 0x04
                                lea eax,nDataA
                                push eax
                                push 0x84020030
                                lea eax,nDataC
                                push eax
                                push 0
                                push 0
                                push 0
                                mov eax,0x0052C60C
                                mov eax,[eax]
                                push eax
                                call FunctionB
                                test eax,eax
                                jnz _out
                                mov eax,nDataB

                                mov ebx,nDataD
                                mov ebx,[ebx]
                                add ebx,eax
                                mov eax,nDataD
                                mov [eax],ebx
                               
                                mov al,1
                                mov bResult,al
_out:
                                push 0x0053D5CC
                                call FunctionD
                                popa
                                popf
                        }
#else
                        DWORD SetDriverEnable = 0x004242F0;
                        bool bResult = false;
                        __asm
                        {
                                pushf
                                pusha
                                call SetDriverEnable
                                mov bResult,al
                                popa
                                popf
                        }
#endif
                        return bResult;
                }
                __finally
                {
                }
        }
        __except(EXCEPTION_EXECUTE_HANDLER)
        {
        }
        return false;
}

void RestoreKernelPatch()
{
        __try
        {
                __try
                {
                        DWORD RestoreKernelPatch = 0x0048A730;
                        DWORD nFunctionA = 0x004297D0;
                        __asm
                        {
                                pushf
                                pusha
                                call RestoreKernelPatch
                                call nFunctionA
                                popa
                                popf
                        }

                        //char * pFlag = (char*)0x0053D2FD;
                        //*pFlag = 0;

                }
                __finally
                {
                }
        }
        __except(EXCEPTION_EXECUTE_HANDLER)
        {
        }
}
甚至还可以要求NP帮你隐藏和保护进程
bool DoHideProcess(DWORD nPID)
{
        __try
        {
                __try
                {
                        DWORD FunctionA = *(DWORD*)0x0053A52C;
                        DWORD FunctionB = *(DWORD*)0x0053D300;
                        DWORD FunctionC = *(DWORD*)0x00503384;
                        DWORD FunctionD = *(DWORD*)0x00503380;
                       
                        DWORD nDataA = 0;
                        DWORD nDataB = 0;
                        DWORD nDataC = 0;
                        DWORD nDataE = (*(DWORD*)0x0052C610) * nPID * 0x01FF;
                        DWORD * nDataD = (DWORD*)0x0052C610;
                        *nDataD = nDataE;
                        bool bResult = false;
                        __asm
                        {
                                pushf
                                pusha

                                //push 0x0053D5CC
                                //call FunctionC

                                push 0x04
                                lea eax,nDataB
                                push eax
                                push 0x04
                                lea eax,nPID
                                push eax
                                push 0x84020000
                                lea eax,nDataC
                                push eax
                                push 0
                                push 0
                                push 0
                                mov eax,0x0052C60C
                                mov eax,[eax]
                                push eax
                                call FunctionB
                                test eax,eax
                                jnz _out
                               
                                mov al,1
                                mov bResult,al
_out:
                                //push 0x0053D5CC
                                //call FunctionD

                                popa
                                popf
                        }
                        return bResult;
                }
                __finally
                {
                }
        }
        __except(EXCEPTION_EXECUTE_HANDLER)
        {
        }
        return false;
}
2016-3-4 09:50
0
雪    币: 215
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
36
虽然看不懂,但是觉得挺厉害的样子
2016-3-4 10:33
0
雪    币: 350
活跃值: (87)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
37
这个代码不是很完善的,首先,现在的都是64位的系统但是你给的值都是32位的,这个能正确的找到内核地址么?
2016-3-4 19:53
0
雪    币: 14
活跃值: (285)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
38
这个不是内核驱动的代码,是和驱动通讯的GAMEMON的代码,无所谓64位的问题.64位下,他这个驱动用处还没这么大,但是有另一个64位的GAMEMON需要搞定,所以你只需要在32位系统中把GAMEMON分析清楚就OK了.对一般的需求来讲,能搞清楚GAMEMON内部的代码结构及运行时状态,比如检测线程的数量,分别的作用,搞清楚这些,足够你玩了,想要去NP回包这些都是小菜.
2016-3-5 15:29
0
雪    币: 350
活跃值: (87)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
39
另外,我想知道,在NP启动时如何去掉NP对IDE的限制?
2016-3-5 15:42
0
雪    币: 5
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
40
帖子很好 大部分时间我都是知道 但不知道别人的代码到底是如何的 不管如何 参考价值是值得肯定的, 希望继续努力....
2016-3-5 16:27
0
雪    币: 14
活跃值: (285)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
41
这个我也没有太好的方法,一般分析清楚后,就直接取消NP的启动,然后自己算包了.因为NP的话,其实做的活非常细的,光是对一个CE的判断,大概就有10种以上的方法,所以,过IDE这类的进程扫描,其实有2个思路,一是关掉他的进程扫描的线程,一个是改特征码了.反正韩国人做事的态度我非常佩服,的确在质量上比国内的质量好太多.
2016-3-5 16:40
0
雪    币: 350
活跃值: (87)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
42
那就郁闷了,没有IDE的话,就不容易编写外挂啦!不过,我觉得它应该是替换了系统调试器的某个关键部位
2016-3-6 14:34
0
雪    币: 573
活跃值: (222)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
43
好文要顶  我觉得  对于  这些  细节  楼主讲得还是不错的。
源码或许有人有  但是那又如何呢。。。。问题是有源码有的人  也未必能够理清思路。
2017-4-30 16:22
0
雪    币: 573
活跃值: (222)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
44

另外 @xiaofuy  求教  此  文中分析的  是什么游戏的源码?希望  知道的大神指点一下  ,不求分享源码,只求说一下名字。
我自己去找。。。

2017-4-30 17:20
0
雪    币: 3676
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
45
第3弹呢?期望中
2018-11-25 20:25
0
游客
登录 | 注册 方可回帖
返回
//