看流星社区

 找回密码
 注册账号
查看: 2637|回复: 0

麻辣江湖登录包的加密解密过程

[复制链接]

该用户从未签到

发表于 2013-4-22 08:27:20 | 显示全部楼层 |阅读模式
游戏启动后首先从服务器接收一个 key ,然后对key加密

                            mov esi,key
007A7B9D    8B56 11         mov edx,dword ptr ds:[esi+0x11]
007A7BA0    8B76 08         mov esi,dword ptr ds:[esi+0x8]
007A7BA3    8BCA            mov ecx,edx
007A7BA5    8BDA            mov ebx,edx
007A7BA7    81F1 CF236D00   xor ecx,0x6D23CF
007A7BAD    81E9 99236D00   sub ecx,game.006D2399
007A7BB3    83F2 CF         xor edx,0xFFFFFFCF
007A7BB6    F7D1            not ecx
007A7BB8    83C2 67         add edx,0x67
007A7BBB    81F3 CF236D2E   xor ebx,0x2E6D23CF
007A7BC1    81E1 00FFFF00   and ecx,0xFFFF00
007A7BC7    F7D2            not edx
007A7BC9    81EB 99236D2E   sub ebx,0x2E6D2399
007A7BCF    C1E2 18         shl edx,0x18
007A7BD2    F7D3            not ebx
007A7BD4    C1EB 18         shr ebx,0x18
007A7BD7    0BCB            or ecx,ebx
007A7BD9    0BCA            or ecx,edx
007A7BDB    55              push ebp
007A7BDC    51              push ecx  //ecx的值,解密会用到
007A7BDD    8BD6            mov edx,esi
007A7BDF    8BCE            mov ecx,esi
007A7BE1    81F2 CF236D00   xor edx,0x6D23CF
007A7BE7    81F1 CF236D2E   xor ecx,0x2E6D23CF
007A7BED    81EA 99236D00   sub edx,game.006D2399
007A7BF3    81E9 99236D2E   sub ecx,0x2E6D2399
007A7BF9    83F6 CF         xor esi,0xFFFFFFCF
007A7BFC    F7D2            not edx
007A7BFE    F7D1            not ecx
007A7C00    83C6 67         add esi,0x67
007A7C03    81E2 00FFFF00   and edx,0xFFFF00
007A7C09    C1E9 18         shr ecx,0x18
007A7C0C    0BD1            or edx,ecx
007A7C0E    F7D6            not esi
007A7C10    C1E6 18         shl esi,0x18
007A7C13    0BD6            or edx,esi
007A7C15    52              push edx  //edx的值,加密会用到
007A7C16    57              push edi
007A7C17    8BC8            mov ecx,eax


登录时,会对密码进行MD5加密
004D5558    FF15 48398900   call dword ptr ds:[<&engine.?KG_EDStringToMD5String@@YAHQADQBD@Z>]   

?KG_EDStringToMD5String@@YAHQADQBD@Z这个函数会生成一个登录封包
下面代码调用游戏目录里的engine.dll文件的?KG_EDStringToMD5String@@YAHQADQBD@Z函数
       DWORD user_pwd_b[100];
    DWORD *p_b=user_pwd_b;
    DWORD user_pwd_m[100];
    DWORD *addr_md5=user_pwd_m;
       HINSTANCE hDllInst = LoadLibrary("engine.dll");     
    typedef  DWORD * ( __cdecl *MYFUNC)(DWORD*,DWORD*);         
    MYFUNC EDStringToMD5String ;
    EDStringToMD5String = (MYFUNC)GetProcAddress(hDllInst,"?KG_EDStringToMD5String@@YAHQADQBD@Z");
    EDStringToMD5String(addr_md5,user_pwd_b);

    DWORD pack_addr; //登录包
    _asm                 
        {     
            push eax                  
            lea eax,[esp-0x130]   //封包首地址,来自?KG_EDStringToMD5String@@YAHQADQBD@Z函数
            mov pack_addr,eax
            pop eax                 
        }

首先得到[0x964A7C]的值,第一次加密会用到
errno_t mTime;     
_asm
            {                 
                mov ebx, _time32
                push 0
                call ebx
                mov ebx,0
                mov mTime,eax
                add esp,4         
            }
登录包第一次加密

005081A4    A1 7C4A9600     mov eax,dword ptr ds:[0x964A7C] //来自_time32函数
005081A9    8DA424 00000000 lea esp,dword ptr ss:[esp]
005081B0    69C0 F5B90300   imul eax,eax,0x3B9F5
005081B6    05 9D831700     add eax,0x17839D
005081BB    83E9 01         sub ecx,0x1
005081BE    8802            mov byte ptr ds:[edx],al
005081C0    83C2 01         add edx,0x1
005081C3    85C9            test ecx,ecx
005081C5  ^\75 E9           jnz Xgame.005081B0
005081C7    A3 7C4A9600     mov dword ptr ds:[0x964A7C],eax

_asm
            {
             push edx
                mov edx,pack_addr                              
             mov eax,mTime                              
             mov ecx,0xe7
                   _lable1:
             imul eax,eax,0x3B9F5
                add eax,0x17839D
             sub ecx,0x1                 
                mov byte ptr ds:[edx],al                 
                add edx,0x1                           
                test ecx,ecx
                 jnz _lable1
                mov mTime,eax
             pop edx
            }

第二次加密
00508B56    8B8C24 04010000 mov ecx,dword ptr ss:[esp+0x104]
00508B5D    85C9            test ecx,ecx
00508B5F    0F84 56010000   je game.00508CBB
00508B65    8BB424 08010000 mov esi,dword ptr ss:[esp+0x108]
00508B6C    85F6            test esi,esi
00508B6E    0F84 47010000   je game.00508CBB
00508B74    8B8424 14010000 mov eax,dword ptr ss:[esp+0x114]
00508B7B    C787 D8190000 0>mov dword ptr ds:[edi+0x19D8],0x0
00508B85    8D7C24 17       lea edi,dword ptr ss:[esp+0x17]
00508B89    C64424 10 20    mov byte ptr ss:[esp+0x10],0x20
00508B8E    66:C74424 11 EB>mov word ptr ss:[esp+0x11],0xEB
00508B95    894424 13       mov dword ptr ss:[esp+0x13],eax
。。。。。。。。还有一大堆代码
第三次加密
007AC100    53              push ebx
007AC101    55              push ebp
007AC102    8B6C24 14       mov ebp,dword ptr ss:[esp+0x14]
007AC106    8B4D 00         mov ecx,dword ptr ss:[ebp]
007AC109    56              push esi
007AC10A    8B7424 10       mov esi,dword ptr ss:[esp+0x10]
007AC10E    8BDE            mov ebx,esi
007AC110    83E3 03         and ebx,0x3
007AC113    C1EE 02         shr esi,0x2
007AC116    57              push edi
007AC117    8B7C24 18       mov edi,dword ptr ss:[esp+0x18]
007AC11B    74 28           je Xgame.007AC145
007AC11D    8D49 00         lea ecx,dword ptr ds:[ecx]      //ecx的值=key加密后edx的值
007AC120    83EE 01         sub esi,0x1
007AC123    8D0431          lea eax,dword ptr ds:[ecx+esi]
007AC126    33D2            xor edx,edx
007AC128    F735 24FC9200   div dword ptr ds:[0x92FC24] //[0x92FC24]值固定的
007AC12E    83C7 04         add edi,0x4
007AC131    8B0C95 68A39200 mov ecx,dword ptr ds:[edx*4+0x92A368]  
        //[edx*4+0x92A368]里面的值可以拷出来,放进自己定义的数组里面,这个数组有点大.
007AC138    81C1 C1236D2E   add ecx,0x2E6D23C1
007AC13E    314F FC         xor dword ptr ds:[edi-0x4],ecx
省略一大堆代码.............


byte pack[7]={0x7,0x0,0x25,0x0,0x0,0x0,0x0};
这个封包经过第二次加密函数加密,send出去就可以进入到选人物的界面了。
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-4-20 19:41

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表