分享

浅谈游戏外挂——外挂篇2(完美封包浅谈) - 心动--完美空间 - yifeigzs - ...

 魔之兵 2011-04-12
浅谈游戏外挂——外挂篇2(完美封包浅谈) 
 

   其次我在这里申明几点:其一本文的很多内容来源于互联网,因此感谢他们的无私支持。其二,我个人是外挂反对者,我不希望我的文章被用于不正当的行业,我仅仅希望这文章可以对防堵外挂做一些贡献。其三,很重要,希望大家看看而已,其实并没有什么深奥的都是很简单的知识,希望大家不要想入非非去做一些不该做的事情。最后一句:游戏无限,时光有限,朋友无价,游戏虚拟,希望大家可以珍惜现实生活,分清虚拟与现实。
 
1、网络游戏分类:
一、封包滤镜类:
凡是网游,都会通过封包向服务器(可以认为封包就是上网数据流)发送和接收数据,如买东西、移动、打怪等,而这些封包,不一定都加密,即使加密了,也不会很复杂。因为网游是耗费带宽太大的东西,如果加密解密过程复杂了。数据量会变大,服务器处理的数据会变多,从而游戏就会变卡。故,封包只要有足够的耐心和经验,是完全可以解密的,从而就可以发送虚假的数据,欺骗服务器达到刷钱、或自动打怪、或攻击暴增等等不法目的。

二、游戏客户端脱壳
这个比较复杂点,也就是把游戏的客户端进行脱壳(也就是让游戏原代码能够看到),分析里面的数据,从而避免某些不利的分支执行。在游戏里的表现就可以达到例如:无敌(拦截死亡分支程序的执行)。恐怖吧好在。这种高手极为稀少,即使有也不屑于做破坏游戏这种低级的事。大家还是安全的,呵呵。

三、动作模拟类
这种就非常大众化了,我也是看到了官方的日志,才接触到的按键精灵,呵呵。在我看来,这是一种集成了某种开发软件对计算机外设硬件操作代码。并把对用户有用的部分简单化的工具,也支持简单的编程。这类工具,不可能做成变态的外挂,但是可以避免很多的手工重复操作。封不封个人认为无所谓。像这个游戏就提供了搜寻目标的图标,对不变态的这类工具,好像官方留有一定余地。

四、还有其它的很多外挂:
极少见,最狂的一类,呵呵。攻击服务器。修改数据。这是官方与骇客的对战。偶怕怕,精神上支持官方。:)
 
2、完美世界加密封包代码:
10002FBE    55              push ebp
10002FBF    8BEC            mov ebp,esp
10002FC1    53              push ebx
10002FC2    56              push esi
10002FC3    57              push edi
10002FC4    8B4D 08         mov ecx,dword ptr ss:[ebp+8]
10002FC7    8B55 0C         mov edx,dword ptr ss:[ebp+C]
10002FCA    837D 10 00      cmp dword ptr ss:[ebp+10],0
10002FCE    76 6B           jbe short 1000303B
10002FD0    8A99 00010000   mov bl,byte ptr ds:[ecx+100]
10002FD6    FEC3            inc bl
10002FD8    8899 00010000   mov byte ptr ds:[ecx+100],bl
10002FDE    81E3 FF000000   and ebx,0FF
10002FE4    8A040B          mov al,byte ptr ds:[ebx+ecx]
10002FE7    8D340B          lea esi,dword ptr ds:[ebx+ecx]
10002FEA    8A99 01010000   mov bl,byte ptr ds:[ecx+101]
10002FF0    02D8            add bl,al
10002FF2    8899 01010000   mov byte ptr ds:[ecx+101],bl
10002FF8    81E3 FF000000   and ebx,0FF
10002FFE    8A040B          mov al,byte ptr ds:[ebx+ecx]
10003001    8D3C0B          lea edi,dword ptr ds:[ebx+ecx]
10003004    8A1E            mov bl,byte ptr ds:[esi]
10003006    8806            mov byte ptr ds:[esi],al
10003008    33C0            xor eax,eax
1000300A    881F            mov byte ptr ds:[edi],bl
1000300C    8A81 01010000   mov al,byte ptr ds:[ecx+101]
10003012    33DB            xor ebx,ebx
10003014    8A99 00010000   mov bl,byte ptr ds:[ecx+100]
1000301A    8A0408          mov al,byte ptr ds:[eax+ecx]
1000301D    02040B          add al,byte ptr ds:[ebx+ecx]
10003020    8A1A            mov bl,byte ptr ds:[edx]
10003022    25 FF000000     and eax,0FF
10003027    8A0408          mov al,byte ptr ds:[eax+ecx]
1000302A    32D8            xor bl,al
1000302C    8B45 10         mov eax,dword ptr ss:[ebp+10]
1000302F    881A            mov byte ptr ds:[edx],bl
10003031    42              inc edx
10003032    8BDA            mov ebx,edx
10003034    2B5D 0C         sub ebx,dword ptr ss:[ebp+C]
10003037    3BD8            cmp ebx,eax                  
10003039  ^ 72 95           jb short 10002FD0
1000303B    5F              pop edi
1000303C    5E              pop esi
1000303D    5B              pop ebx
1000303E    C9              leave
1000303F    C2 0C00         retn 0C
 
    需要说明的几点:本程序是用汇编语言编写,应该很多大学相关专业都有涉及这门语言,在这里就不做过多的解释了,其次在程序中EAX为总字符,EBX为已经加密了多少。
arg4:[ebp+8]//加密码表,长度0x100[0..$FF], 100,101存放临时结果
arg8:[ebp+C]]//Buffer,要加密的数据;每次加密一个字节,简单的xor,add,和码表运算
argc:[ebp+10]//BufferSize,加密的数据字节数
将以上语句翻译为高级语言的可以用以下语句表示:
typedef struct {
unsigned char table[256];
unsigned char a;
unsigned char b;
} arg1;
void encrypt(arg1* handle, unsigned char *data, int len)
{
register unsigned char *ptr = data;
register unsigned char m;
if( len <= 0 ) return;
do {
handle->a++;
m = handle->table[handle->a];
handle->b += m;
handle->table[handle->a] = handle->table[handle->b];
handle->table[handle->b] = m;
*(ptr) = handle->table[*(ptr)] ^ handle->table[m+handle->table[handle->a]];
ptr++;
} while(ptr-data<len);
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约