[网络验证破解]某外挂验证转本地化

【文章标题】: [网络验证破解]某外挂验证转本地化
【文章作者】: KuNgBiM
【作者邮箱】: kungbim@163.com
【作者主页】: http://www.crkcn.com
【软件名称】: 惊天伴侣2.2.5会员增强版(2007年3月26日更新)
【软件大小】: 1.71 MB
【下载地址】: 自己搜索下载
【加壳方式】: ASProtect 2.1x SKE
【保护方式】: 网络验证
【编写语言】: Microsoft Visual C++ 6.0
【使用工具】: OllyICE
【操作平台】: 盗版非标准XPsp2
【软件介绍】: 大型网游惊天动地辅助工具,俗称“外挂”。
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  由于该程序加的壳为标准的ASProtect 2.1x SKE,并未偷代码,所以为了方便起见,脱之分析。。。
  
  脱壳后,OllyICE载入分析,由于程序关键字符处理的比较好,字符插件就不起作用了。
  我们还是利用常用的办法“API函数断点”来调试它吧。
  
  命令下断:bpx closesocket
  
  F9运行,输入用户名后点击“登陆”断下:
  
  00418E79   .  6A 10                     push    10                                 ;  外挂网络验证开始
  00418E7B   .  8D85 60FEFFFF             lea     eax, dword ptr [ebp-1A0]           ;  计算游戏ID长度
  00418E81   .  50                        push    eax
  00418E82   .  6A 60                     push    60
  00418E84   .  8D8D 74FFFFFF             lea     ecx, dword ptr [ebp-8C]
  00418E8A   .  51                        push    ecx
  00418E8B   .  8D95 74FFFFFF             lea     edx, dword ptr [ebp-8C]
  00418E91   .  52                        push    edx
  00418E92   .  E8 B9320100               call    0042C150                           ;  判断外挂是否已经处于通信状态
  00418E97   .  83C4 18                   add     esp, 18
  00418E9A   .  833D 9C826500 00          cmp     dword ptr [65829C], 0
  00418EA1   .  74 16                     je      short 00418EB9                     ;  还未通信则跳(不管)
  00418EA3   .  A1 9C826500               mov     eax, dword ptr [65829C]
  00418EA8   .  50                        push    eax                                ; /Socket => 384
  00418EA9   .  FF15 E4A54600             call    dword ptr [<&ws2_32.closesocket>]  ; /closesocket
  00418EAF   .  C705 9C826500 00000000    mov     dword ptr [65829C], 0
  00418EB9   >  833D 9C826500 00          cmp     dword ptr [65829C], 0
  00418EC0   .  75 11                     jnz     short 00418ED3                     ;  还未通信则准备获取验证服务器地址
  00418EC2   .  6A 00                     push    0                                  ; /Protocol = IPPROTO_IP
  00418EC4   .  6A 01                     push    1                                  ; |Type = SOCK_STREAM
  00418EC6   .  6A 02                     push    2                                  ; |Family = AF_INET
  00418EC8   .  FF15 E0A54600             call    dword ptr [<&ws2_32.socket>]       ; /socket
  00418ECE   .  A3 9C826500               mov     dword ptr [65829C], eax
  00418ED3   >  66:C785 18FAFFFF 0200     mov     word ptr [ebp-5E8], 2
  00418EDC   .  68 AC836500               push    006583AC                           ; /ASCII "203.174.87.234"
  00418EE1   .  FF15 DCA54600             call    dword ptr [<&ws2_32.inet_addr>]    ; /inet_addr
  00418EE7   .  8985 1CFAFFFF             mov     dword ptr [ebp-5E4], eax
  00418EED   .  66:8B0D 38105D00          mov     cx, word ptr [5D1038]
  00418EF4   .  51                        push    ecx                                ; /NetShort
  00418EF5   .  FF15 E8A54600             call    dword ptr [<&ws2_32.htons>]        ; /ntohs
  00418EFB   .  66:8985 1AFAFFFF          mov     word ptr [ebp-5E6], ax
  00418F02   .  6A 10                     push    10                                 ; /AddrLen = 10 (16.)
  00418F04   .  8D95 18FAFFFF             lea     edx, dword ptr [ebp-5E8]           ; |
  00418F0A   .  52                        push    edx                                ; |pSockAddr
  00418F0B   .  A1 9C826500               mov     eax, dword ptr [65829C]            ; |
  00418F10   .  50                        push    eax                                ; |Socket => 384
  00418F11   .  FF15 D0A54600             call    dword ptr [<&ws2_32.connect>]      ; /connect
  00418F17   .  8985 58FEFFFF             mov     dword ptr [ebp-1A8], eax           ;  获取服务器数据
  00418F1D   .  83BD 58FEFFFF FF          cmp     dword ptr [ebp-1A8], -1            ;  返回值是否大于等于FFFFFFFF
                                                                                     ;  是则挂(通信不正常)
  00418F24      75 14                     jnz     short 00418F3A                     ;  ★所以这里必须跳!改为JMP★
  00418F26   .  C705 3C105D00 0D000000    mov     dword ptr [5D103C], 0D
  00418F30   .  E8 EB180100               call    0042A820
  00418F35   .  E9 5C0A0000               jmp     00419996
  00418F3A   >  6A 00                     push    0                                  ; /Flags = 0
  00418F3C   .  6A 60                     push    60                                 ; |DataSize = 60 (96.)
  00418F3E   .  8D8D 74FFFFFF             lea     ecx, dword ptr [ebp-8C]            ; |
  00418F44   .  51                        push    ecx                                ; |Data
  00418F45   .  8B15 9C826500             mov     edx, dword ptr [65829C]            ; |
  00418F4B   .  52                        push    edx                                ; |Socket => 384
  00418F4C   .  FF15 D8A54600             call    dword ptr [<&ws2_32.send>]         ; /send
  00418F52   .  8985 58FEFFFF             mov     dword ptr [ebp-1A8], eax           ;  再次获取服务器数据
  00418F58   .  83BD 58FEFFFF 60          cmp     dword ptr [ebp-1A8], 60            ;  返回值是否小于等于96
                                                                                     ;  是则挂(数据包不正确)
  00418F5F      74 05                     je      short 00418F66                     ;  ★所以这里必须跳!改为JMP★
  00418F61   .  E9 300A0000               jmp     00419996
  00418F66   >  6A 00                     push    0                                  ; /Flags = 0
  00418F68   .  6A 60                     push    60                                 ; |BufSize = 60 (96.)
  00418F6A   .  8D85 74FFFFFF             lea     eax, dword ptr [ebp-8C]            ; |
  00418F70   .  50                        push    eax                                ; |Buffer
  00418F71   .  8B0D 9C826500             mov     ecx, dword ptr [65829C]            ; |
  00418F77   .  51                        push    ecx                                ; |Socket => 384
  00418F78   .  FF15 D4A54600             call    dword ptr [<&ws2_32.recv>]         ; /recv
  00418F7E   .  8985 58FEFFFF             mov     dword ptr [ebp-1A8], eax           ;  再次获取服务器数据
  00418F84   .  83BD 58FEFFFF 00          cmp     dword ptr [ebp-1A8], 0             ;  返回值是否大于等于0
                                                                                     ;  是则挂(数据包不正确)
  00418F8B      75 05                     jnz     short 00418F92                     ;  ★则里可改可不改,保险起见改为JMP★
  00418F8D   .  E9 040A0000               jmp     00419996
  00418F92   >  8B15 9C826500             mov     edx, dword ptr [65829C]            ;  服务器通信结束
  00418F98   .  52                        push    edx                                ; /Socket => 384
  00418F99   .  FF15 E4A54600             call    dword ptr [<&ws2_32.closesocket>]  ; /closesocket
  00418F9F   .  6A 01                     push    1
  00418FA1   .  6A 10                     push    10
  00418FA3   .  8D85 48FEFFFF             lea     eax, dword ptr [ebp-1B8]
  00418FA9   .  50                        push    eax
  00418FAA   .  6A 60                     push    60
  00418FAC   .  8D8D 74FFFFFF             lea     ecx, dword ptr [ebp-8C]
  00418FB2   .  51                        push    ecx
  00418FB3   .  8D95 74FFFFFF             lea     edx, dword ptr [ebp-8C]
  00418FB9   .  52                        push    edx
  00418FBA   .  E8 91310100               call    0042C150                           ;  判断服务器是否有数据返回
  00418FBF   .  83C4 18                   add     esp, 18
  00418FC2   .  75 04                     jnz     short 00418FC8                     ;  有数据返回则跳!(必须跳)
  00418FC4   .  74 02                     je      short 00418FC8
  00418FC6      9A                        db      9A
  00418FC7      E8                        db      E8
  00418FC8   >  83BD 74FFFFFF 09          cmp     dword ptr [ebp-8C], 9              ;  检测外挂程序版本是否有更新
  00418FCF   .  0F85 A7000000             jnz     0041907C                           ;  大于等于则跳
                                                                                     ;  (为了不让它自动更新,改为JMP)
  00418FD5   .  6A 00                     push    0
  00418FD7   .  68 502E4800               push    00482E50
  00418FDC   .  68 082E4800               push    00482E08
  00418FE1   .  8B8D 98F9FFFF             mov     ecx, dword ptr [ebp-668]
  00418FE7   .  E8 CCF40300               call    004584B8
  00418FEC   .  B9 11000000               mov     ecx, 11
  00418FF1   .  33C0                      xor     eax, eax
  00418FF3   .  8DBD C0F9FFFF             lea     edi, dword ptr [ebp-640]
  00418FF9   .  F3:AB                     rep     stos dword ptr es:[edi]
  00418FFB   .  C785 C0F9FFFF 44000000    mov     dword ptr [ebp-640], 44
  00419005   .  33C0                      xor     eax, eax
  00419007   .  8985 04FAFFFF             mov     dword ptr [ebp-5FC], eax
  0041900D   .  8985 08FAFFFF             mov     dword ptr [ebp-5F8], eax
  00419013   .  8985 0CFAFFFF             mov     dword ptr [ebp-5F4], eax
  00419019   .  8985 10FAFFFF             mov     dword ptr [ebp-5F0], eax
  0041901F   .  8D8D 04FAFFFF             lea     ecx, dword ptr [ebp-5FC]
  00419025   .  51                        push    ecx                                ; /pProcessInfo
  00419026   .  8D95 C0F9FFFF             lea     edx, dword ptr [ebp-640]           ; |
  0041902C   .  52                        push    edx                                ; |pStartupInfo
  0041902D   .  6A 00                     push    0                                  ; |CurrentDir = NULL
  0041902F   .  6A 00                     push    0                                  ; |pEnvironment = NULL
  00419031   .  6A 00                     push    0                                  ; |CreationFlags = 0
  00419033   .  6A 00                     push    0                                  ; |InheritHandles = FALSE
  00419035   .  6A 00                     push    0                                  ; |pThreadSecurity = NULL
  00419037   .  6A 00                     push    0                                  ; |pProcessSecurity = NULL
  00419039   .  68 E42D4800               push    00482DE4                           ; |CommandLine = "explorer 
  http://www.jtlover.net/"
  0041903E   .  6A 00                     push    0                                  ; |ModuleFileName = NULL
  00419040   .  FF15 34A24600             call    dword ptr [<&kernel32.CreateProces>; /CreateProcessA
  00419046   .  85C0                      test    eax, eax
  00419048   .  75 07                     jnz     short 00419051
  0041904A   .  6A 00                     push    0
  0041904C   .  E8 87C30100               call    004353D8
  00419051   >  8B85 04FAFFFF             mov     eax, dword ptr [ebp-5FC]
  00419057   .  50                        push    eax                                ; /hObject
  00419058   .  FF15 44A24600             call    dword ptr [<&kernel32.CloseHandle>>; /CloseHandle
  0041905E   .  8B8D 08FAFFFF             mov     ecx, dword ptr [ebp-5F8]
  00419064   .  51                        push    ecx                                ; /hObject
  00419065   .  FF15 44A24600             call    dword ptr [<&kernel32.CloseHandle>>; /CloseHandle
  0041906B   .  8B95 74FFFFFF             mov     edx, dword ptr [ebp-8C]
  00419071   .  8915 3C105D00             mov     dword ptr [5D103C], edx
  00419077   .  E9 1A090000               jmp     00419996
  0041907C   >  75 04                     jnz     short 00419082
  0041907E   .  74 02                     je      short 00419082
  00419080      9A                        db      9A
  00419081      E8                        db      E8
  00419082   >  83BD 74FFFFFF 00          cmp     dword ptr [ebp-8C], 0              ;  检测验证数据最后结果是否小于等于0
                            
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值