蜀门Online加密分析

 分析仅仅是为了娱乐而已,游戏也不难。有错误就不好意思了。
       这个游戏加了个TMD的壳,会关闭调试端口,在内核里面打个补丁就好了。
       首先找到收报和发包明文的地址。如果游戏更新地址不对,请用特征码重新找:
 
       收报HOOK地址:
    009A6C60 /$ 56            push    esi
009A6C61 |. 8BF1          mov     esi, ecx
009A6C63 |. 8B46 10       mov     eax, dword ptr [esi+10]
009A6C66 |. 8B80 DC000000 mov     eax, dword ptr [eax+C4]
009A6C6C |. 57            push    edi
009A6C6D |. 50            push    eax                              ; 解秘数据buffer
009A6C6E |. E8 5DF2FFFF   call    009A5ED0                         ; ----hook recv这里
009A6C73 |. 84C0          test    al, al
009A6C75 |. 74 47         je      short 009A6CBE
009A6C77 |. 8B7C24 0C     mov     edi, dword ptr [esp+C]
009A6C7B |. EB 03         jmp     short 009A6C80
009A6C7D |   8D49 00       lea     ecx, dword ptr [ecx]
009A6C80 |> 8B4E 10       /mov     ecx, dword ptr [esi+10]
009A6C83 |. 8B89 DC000000 |mov     ecx, dword ptr [ecx+DC]
009A6C89 |. 57            |push    edi
009A6C8A |. E8 C1DFFFFF   |call    009A4C50
009A6C8F |. 8B56 10       |mov     edx, dword ptr [esi+10]
009A6C92 |. 8B8A DC000000 |mov     ecx, dword ptr [edx+DC]
009A6C98 |. E8 C3DEFFFF   |call    009A4B60                        ; lwgucky
009A6C9D |. 84C0          |test    al, al
009A6C9F |. 74 24         |je      short 009A6CC5
009A6CA1 |. 57            |push    edi
009A6CA2 |. 8BCE          |mov     ecx, esi
009A6CA4 |. E8 27FAFFFF   |call    009A66D0
009A6CA9 |. 8B46 10       |mov     eax, dword ptr [esi+10]
009A6CAC |. 8B80 DC000000 |mov     eax, dword ptr [eax+DC]
009A6CB2 |. 50            |push    eax
009A6CB3 |. 8BCE          |mov     ecx, esi
009A6CB5 |. E8 16F2FFFF   |call    009A5ED0
009A6CBA |. 84C0          |test    al, al
009A6CBC |.^ 75 C2         jnz     short 009A6C80
009A6CBE |> 5F            pop     edi
009A6CBF |. 32C0          xor     al, al
009A6CC1 |. 5E            pop     esi
009A6CC2 |. C2 0400       retn    4
 
发包HOOK的地方:
      009A65E0 /$ 56            push    esi
009A65E1 |. 8BF1          mov     esi, ecx
009A65E3 |. 83BE F0000000>cmp     dword ptr [esi+F0], 3
009A65EA |. 74 06         je      short 009A65F2
009A65EC |. 32C0          xor     al, al
009A65EE |. 5E            pop     esi
009A65EF |. C2 0C00       retn    0C
009A65F2 |> 8B4424 08     mov     eax, dword ptr [esp+8]
009A65F6 |. 8B4E 10       mov     ecx, dword ptr [esi+10]
009A65F9 |. 8B89 D8000000 mov     ecx, dword ptr [ecx+D8]
009A65FF |. 57            push    edi
009A6600 |. 50            push    eax                                    ; [eax+010]=数据长度;d [eax+0c]=数据;
009A6601 |. E8 AAE5FFFF   call    009A4BB0
009A6606 |. 807C24 14 00 cmp     byte ptr [esp+14], 0
009A660B |. 8B56 10       mov     edx, dword ptr [esi+10]
009A660E |. 8B82 D8000000 mov     eax, dword ptr [edx+D8]
009A6614 |. 8B88 14FB0000 mov     ecx, dword ptr [eax+FB14]
009A661A |. 66:8B96 56010>mov     dx, word ptr [esi+156]                 ; 包序列号
009A6621 |. 66:8911       mov     word ptr [ecx], dx
009A6624 |. 8B46 10       mov    eax, dword ptr [esi+10]
009A6627 |. 8B88 D8000000 mov     ecx, dword ptr [eax+D8]
009A662D |. 8BB9 0CFB0000 mov     edi, dword ptr [ecx+FB0C]
009A6633 |. 74 07         je      short 009A663C
009A6635 |. E8 16E5FFFF   call    009A4B50
009A663A |. EB 30         jmp     short 009A666C
009A663C |> 807E 0D 00    cmp     byte ptr [esi+D], 0
009A6640 |. 74 05         je      short 009A6647
009A6642 |. E8 19E4FFFF   call    009A4A60
009A6647 |> 80BE 54010000>cmp     byte ptr [esi+154], 0
009A664E |. 74 1C         je      short 009A666C
009A6650 |. 8B8E 4C010000 mov     ecx, dword ptr [esi+14C]
009A6656 |. 8B46 10       mov     eax, dword ptr [esi+10]
009A6659 |. 51            push    ecx                                    ; 加密长度
009A665A |. 8B88 D8000000 mov     ecx, dword ptr [eax+D8]                ; 加密数据
009A6660 |. 8D96 2C010000 lea     edx, dword ptr [esi+12C]               ; d [[0FC2CC0]+040]+012c;[[[0FC2CC0]+040]+064+4]=sockethandle
009A6666 |. 52            push    edx                                    ; 加密种子
009A6667 |. E8 44E3FFFF   call    009A49B0                               ; 加密 -----hook send这里
00A6F21C    8B4E 10         mov     ecx, dword ptr [esi+10]
00A6F21F    8B81 C0000000   mov     eax, dword ptr [ecx+C0]
00A6F225    8B88 0CFB0000   mov     ecx, dword ptr [eax+FB0C]
009A667B |. 51            push    ecx                                    ; len
009A667C |. 83C0 04       add     eax, 4
009A667F |. 50            push    eax                                    ; buffer
009A6680 |. 8BCE          mov     ecx, esi
009A6682 |. E8 19FDFFFF   call    009A63A0                               ; 发送加密
009A6687 |. 84C0          test    al, al
009A6689 |. 75 05         jnz     short 009A6690
009A668B |. 5F            pop     edi
009A668C |. 5E            pop     esi
 
 
 
 通过 hook 这个两个函数,通过分析协议,已经能够做一个基于封包的内挂了。需要多说一嘴的是,如果你直接分析包,可能会发现找包的类型标示不容易,包标示是通过包的第二个WORD字节标示的,具体算法大概是就是第二个WORD % 8了。。(忘记了。)

你可能感兴趣的:(加密,c,hook,byte,buffer,游戏)