一款游戏辅助程序的分析、制作方法

 0、前言

 

  本文仅限于技术交流,文中所附数据纯属虚构,如有雷同,实在是巧合!

  本文简单地探讨了一款游戏辅助程序的分析、制作方法,希望能对那些对此感兴趣的朋友们有些许帮助。

  本人小菜鸟一只,水平有限,说得不对的地方,权当逗各位大虾一笑 ^_^

  

1、切入点
  
  在WSASend函数上下断,移动一下人物,游戏会向服务器发送数据封包,程序断在0042DE13这个函数调用处!

  根据栈中的返回地址,逐级返回分析相关代码如下:

  00441991   |.  E8 4AC3FEFF        call Client.0042DCE0                       
  // 该函数是一个公用函数,游戏中所有的数据包都经过这个函数 加密发送
  { //加密发送数据包
    0042DCE0   /$  55                 push ebp
    0042DCE1   |.  8BEC               mov ebp,esp
    0042DCE3   |.  B8 0C240000        mov eax,240C
    0042DCE8   |.  E8 C3852F00        call Client.007262B0  //堆栈处理
    {
      007262B0   /$  51                 push ecx
      007262B1   |.  3D 00100000        cmp eax,1000
      007262B6   |.  8D4C24 08          lea ecx,dword ptr ss:[esp+8]
      007262BA   |.  72 14              jb short Client.007262D0
      007262BC   |>  81E9 00100000      /sub ecx,1000
      007262C2   |.  2D 00100000        |sub eax,1000
      007262C7   |.  8501               |test dword ptr ds:[ecx],eax
      007262C9   |.  3D 00100000        |cmp eax,1000
      007262CE   |.^ 73 EC              /jnb short Client.007262BC
      007262D0   |>  2BC8               sub ecx,eax
      007262D2   |.  8BC4               mov eax,esp
      007262D4   |.  8501               test dword ptr ds:[ecx],eax
      007262D6   |.  8BE1               mov esp,ecx
      007262D8   |.  8B08               mov ecx,dword ptr ds:[eax]
      007262DA   |.  8B40 04            mov eax,dword ptr ds:[eax+4]
      007262DD   |.  50                 push eax
      007262DE   /.  C3                 retn
    }
    0042DCED   |.  8B41 10            mov eax,dword ptr ds:[ecx+10]
    0042DCF0   |.  53                 push ebx
    0042DCF1   |.  56                 push esi
    0042DCF2   |.  83F8 FF            cmp eax,-1
    0042DCF5   |.  57                 push edi
    0042DCF6   |.  894D FC            mov dword ptr ss:[ebp-4],ecx
    0042DCF9   |.  0F84 29010000      je Client.0042DE28
    0042DCFF   |.  8079 14 01         cmp byte ptr ds:[ecx+14],1
    0042DD03   |.  0F85 1F010000      jnz Client.0042DE28
    0042DD09   |.  8B5D 08            mov ebx,dword ptr ss:[ebp+8]
    0042DD0C   |.  66:A1 F44B2F04     mov ax,word ptr ds:[42F4BF4]  // 0x03A2
    0042DD12   |.  B9 00080000        mov ecx,800
    0042DD17   |.  8DBD F4DBFFFF      lea edi,dword ptr ss:[ebp-240C]
    0042DD1D   |.  66:8903            mov word ptr ds:[ebx],ax
    0042DD20   |.  33C0               xor eax,eax
    0042DD22   |.  F3:AB              rep stos dword ptr es:[edi]  // edi 清零
    0042DD24   |.  8B45 0C            mov eax,dword ptr ss:[ebp+C]
    0042DD27   |.  8BF3               mov esi,ebx
    0042DD29   |.  8DBD F9DBFFFF      lea edi,dword ptr ss:[ebp-2407]  //数据开始地址

    0042DD2F   |.  C685 F4DBFFFF AA   mov byte ptr ss:[ebp-240C],0AA   //数据开始标志
    0042DD36   |.  8D48 09            lea ecx,dword ptr ds:[eax+9]
    0042DD39   |.  C685 F5DBFFFF 55   mov byte ptr ss:[ebp-240B],55    //数据结束标志
    0042DD40   |.  888D F6DBFFFF      mov byte ptr ss:[ebp-240A],cl    //长度低8位
    0042DD46   |.  8A0D A84D2F04      mov cl,byte ptr ds:[42F4DA8]        
    0042DD4C   |.  88AD F7DBFFFF      mov byte ptr ss:[ebp-2409],ch    //长度高8位
    0042DD52   |.  888D F8DBFFFF      mov byte ptr ss:[ebp-2408],cl    // 01 ? 什么东东

    0042DD58   |.  8BC8               mov ecx,eax
    0042DD5A   |.  C745 08 00000000   mov dword ptr ss:[ebp+8],0
    0042DD61   |.  8BD1               mov edx,ecx
    0042DD63   |.  C1E9 02            shr ecx,2
    0042DD66   |.  F3:A5              rep movs dword ptr es:[edi],dword ptr ds:[esi]
    0042DD68   |.  8BCA               mov ecx,edx
    0042DD6A   |.  83E1 03            and ecx,3
    0042DD6D   |.  F3:A4              rep movs byte ptr es:[edi],byte ptr ds:[esi]
    0042DD6F   |.  8D70 05            lea esi,dword ptr ds:[eax+5]
    0042DD72   |.  33C0               xor eax,eax
    0042DD74   |.  8D8D F4DBFFFF      lea ecx,dword ptr ss:[ebp-240C]
    0042DD7A   |.  898435 F4DBFFFF    mov dword ptr ss:[ebp+esi-240C],eax
    0042DD81   |.  51                 push ecx
    0042DD82   |.  898435 F8DBFFFF    mov dword ptr ss:[ebp+esi-2408],eax
    0042DD89   |.  83C6 08            add esi,8
    0042DD8C   |.  C68435 F4DBFFFF 55 mov byte ptr ss:[ebp+esi-240C],55
    0042DD94   |.  46                 inc esi
    0042DD95   |.  C68435 F4DBFFFF AA mov byte ptr ss:[ebp+esi-240C],0AA  //数据结束标志

    0042DD9D   |.  E8 7ED42D00        call Client.0070B220  //数据加密??
    {
       //加密数据包子函数

      0070B220    $  55                 push ebp
      0070B221    .  8BEC               mov ebp,esp
      0070B223    .  83C4 EC            add esp,-14
      0070B226    .  53                 push ebx
      0070B227    .  57                 push edi
      0070B228    .  56                 push esi
      0070B229    .  E8 00000000        call Client.0070B22E
      0070B22E    $  5B                 pop ebx
      0070B22F    .  81EB 4E154000      sub ebx,Client.0040154E
      0070B235    .  837D 08 00         cmp dword ptr ss:[ebp+8],0
      0070B239    .  75 0A              jnz short Client.0070B245
      0070B23B    .  B8 FEFFFFFF        mov eax,-2
      0070B240    .  E9 D5000000        jmp Client.0070B31A
      0070B245    >  8B7D 08            mov edi,dword ptr ss:[ebp+8]
      0070B248    .  8A47 04            mov al,byte ptr ds:[edi+4]
      0070B24B    .  0AC0               or al,al
      0070B24D    .  75 07              jnz short Client.0070B256
      0070B24F    .  33C0               xor eax,eax
      0070B251    .  E9 C4000000        jmp Client.0070B31A
      0070B256    >  8A83 CD1B4000      mov al,byte ptr ds:[ebx+401BCD]
      0070B25C    .  0AC0               or al,al
      0070B25E    .  75 0A              jnz short Client.0070B26A
      0070B260    .  B8 FFFFFFFF        mov eax,-1
      0070B265    .  E9 B0000000        jmp Client.0070B31A
      0070B26A    >  0FB757 02          movzx edx,word ptr ds:[edi+2]   // 0x37 len
      0070B26E    .  83FA 0F            cmp edx,0F
      0070B271    .  73 0A              jnb short Client.0070B27D
      0070B273    .  B8 FDFFFFFF        mov eax,-3
      0070B278    .  E9 9D000000        jmp Client.0070B31A
      0070B27D    >  8B45 08            mov eax,dword ptr ss:[ebp+8]  // 起始地址
      0070B280    .  53                 push ebx
      0070B281    .  81C3 AF154000      add ebx,Client.004015AF
      0070B287    .  53                 push ebx
      0070B288    .  C3                 retn

      0070B289    .  68 6572653F        push 3F657265
      0070B28E    .  48                 dec eax
      0070B28F    .  5B                 pop ebx
      0070B290    .  83C0 05            add eax,5  // ptr to first byte 0xb0
      0070B293    .  8945 F0            mov dword ptr ss:[ebp-10],eax
      0070B296    .  03C2               add eax,edx
      0070B298    .  83E8 01            sub eax,1
      0070B29B    .  83E8 08            sub eax,8
      0070B29E    .  8945 EC            mov dword ptr ss:[ebp-14],eax
      0070B2A1    .  83EA 01            sub edx,1
      0070B2A4    .  83EA 02            sub edx,2
      0070B2A7    .  66:8955 F4         mov word ptr ss:[ebp-C],dx
      0070B2AB    .  66:8B8B F31B4000   mov cx,word ptr ds:[ebx+401BF3]
      0070B2B2    .  66:894D F6         mov word ptr ss:[ebp-A],cx
      0070B2B6    .  66:C1E9 03         shr cx,3
      0070B2BA    .  66:83E1 07         and cx,7
      0070B2BE    .  66:898B E71B4000   mov word ptr ds:[ebx+401BE7],cx
      0070B2C5    .  EB 65              jmp short Client.0070B32C
      0070B2C7    >  C745 FC 00000000   mov dword ptr ss:[ebp-4],0
      0070B2CE    .  8BB3 D31B4000      mov esi,dword ptr ds:[ebx+401BD3]
      0070B2D4    .  8B7D F0            mov edi,dword ptr ss:[ebp-10]
      0070B2D7    .  83C7 02            add edi,2
      0070B2DA    .  74 02              je short Client.0070B2DE
      0070B2DC    .  75 00              jnz short Client.0070B2DE
      0070B2DE    >  0FB755 F4          movzx edx,word ptr ss:[ebp-C]
      0070B2E2    .  83EA 02            sub edx,2
      0070B2E5    .  EB 2C              jmp short Client.0070B313

      //第二次算法

      0070B2E7    >  8B45 FC            mov eax,dword ptr ss:[ebp-4]
      0070B2EA    .  83E0 1F            and eax,1F
      0070B2ED    .  33C9               xor ecx,ecx
      0070B2EF    .  8A8C18 A71B4000    mov cl,byte ptr ds:[eax+ebx+401BA7] //0x0E ?
      0070B2F6    .  EB 03              jmp 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值