对于强客户端的游戏,就有很大可能出现脱机挂,因为一切客户端的计算、处理逻辑都不需要进行,只需要将最理想的作弊数据包直接发给服务器,就能达到游戏收益最大化。
下面这几点是需要多加注意的点。
1.send函数
根据send调用的buffer,进行回溯,找到加密函数。对于send调用的buffer,最好是保持随机调用,如果固定的话会非常容易分析。
2.耦合、离散
软件工程中提倡低耦合,高内聚。但是就耦合这点在封包发送阶段,应该做到高耦合,这样可以让逆向分析陷入迷茫,找不到关键点。对于包结构或者组包过程要做到高离散,这样会让逆向分析无法理解其确实的意义。
3.加密函数
加密函数主要完成数据加密,变换。使用的指令也会跟正常函数有所不同,比如位操作,byte操作。对于加密函数,最好不要一步完成,不然很容易分析出加密参数,每次将构造的协议交由加密函数处理,做出封包外挂。
下面用三个游戏来说明
一、B游戏
1.首先对send函数下断点
2.可以看到发送的加密数据(必然加密)
3.向上回溯,寻找加密函数
4.逆向解密函数,或者黑盒调用
sub esp, 8
mov eax, dword ptr [esp+C]
push ebx
push ebp
mov edx, ecx
mov ecx, dword ptr [eax]
push esi
mov esi, dword ptr [edx+18]
mov edx, dword ptr [edx+C]
add eax, 4
mov ebx, dword ptr [eax+4]
push edi
mov edi, dword ptr [esi]
mov ebp, eax
add edi, dword ptr [ebp]
mov ebp, dword ptr [eax+8]
add ebp, dword ptr [esi+4]
add eax, 4
add esi, 8
test edx, edx
mov dword ptr [esp+1C], ebx
jbe short 06FE50A7
mov dword ptr [esp+10], edx
lea ebx, dword ptr [ebx]
lea edx, dword ptr [edi+edi+1]
imul edx, edi
lea eax, dword ptr [ebp+ebp+1]
imul eax, ebp
rol edx, 5
rol eax, 5
mov ebx, edx
xor ebx, ecx
mov cl, al
xor eax, dword ptr [esp+1C]
rol ebx, cl
mov cl, dl
rol eax, cl
mov dword ptr [esp+1C], ebp
mov ebp, dword ptr [esi]
mov dword ptr [esp+14], edi
add eax, dword ptr [esi+4]
mov ecx, dword ptr [esp+14]
add