• 标 题:超级聊天2000 2001C 破解分析
  • 作 者:冷枫
  • 时 间:2003/06/18 10:01pm
  • 链 接:http://bbs.pediy.com

超级聊天2000 2001C 破解分析                
 
软件名称:
 超级聊天2000 2001C
 
软件简介:
 国内的网络速度时快时慢,不稳定是个公认的事实,当你和朋友在网上聊天时,
常常会遇到聊天内容传不过去或速度很慢的情况,这就是网络不稳定的表现之一。
这些不仅影响了聊天的心情,也阻碍了和朋友的交流,甚至多花去了很多上网费,真是令人烦恼。
而超级聊天2000 恰好能较好的解决这些问题。它采用了独特的校验技术,使得无论
在多么不通畅不稳定的网络中,都可将你的聊天内容完整的传给朋友,决无纰漏;速度也快,
没有时差的感觉。功能实用,使用简单,人人都能上手。注册后的版本将能更准确,
更迅速地传递聊天内容;使用也将更方便,更保密。


 
下载地址:
 http://www.onlinedown.net/soft/9195.htm
------------------------------------------------------------
 
破解作者:
 冷枫[OCN][CTR]
 
破解工具:
 w32Dasm ,ollydbg.
 
破解目的:
 学习~~~~~
 
------------------------------------------------------------
 
[破解过程]
 
详细过程:
用户:冷枫[OCN][CTR]
假注册码:52225229
过程:
00477E84  /. 55             PUSH EBP
00477E85  |. 8BEC           MOV EBP,ESP
00477E87  |. B9 0D000000    MOV ECX,0D
00477E8C  |> 6A 00          /PUSH 0
00477E8E  |. 6A 00          |PUSH 0
00477E90  |. 49             |DEC ECX
00477E91  |.^75 F9          \JNZ SHORT UNPACKED.00477E8C
00477E93  |. 51             PUSH ECX
00477E94  |. 53             PUSH EBX
00477E95  |. 8BD8           MOV EBX,EAX
00477E97  |. 33C0           XOR EAX,EAX
00477E99  |. 55             PUSH EBP
00477E9A  |. 68 E6824700    PUSH UNPACKED.004782E6
00477E9F  |. 64:FF30        PUSH DWORD PTR FS:[EAX]
00477EA2  |. 64:8920        MOV DWORD PTR FS:[EAX],ESP
00477EA5  |. 8D45 FC        LEA EAX,DWORD PTR SS:[EBP-4]
00477EA8  |. BA 00834700    MOV EDX,UNPACKED.00478300
00477EAD  |. E8 02BCF8FF    CALL UNPACKED.00403AB4
00477EB2  |. 8D4D F8        LEA ECX,DWORD PTR SS:[EBP-8]
00477EB5  |. A1 B4654900    MOV EAX,DWORD PTR DS:[4965B4]
00477EBA  |. 8B00           MOV EAX,DWORD PTR DS:[EAX]
00477EBC  |. 8B55 FC        MOV EDX,DWORD PTR SS:[EBP-4]
00477EBF  |. E8 1CB00100    CALL UNPACKED.00492EE0
00477EC4  |. 8B55 F8        MOV EDX,DWORD PTR SS:[EBP-8]
00477EC7  |. 8D45 FC        LEA EAX,DWORD PTR SS:[EBP-4]
00477ECA  |. E8 E5BBF8FF    CALL UNPACKED.00403AB4
00477ECF  |. 8D55 F4        LEA EDX,DWORD PTR SS:[EBP-C]
00477ED2  |. 8B83 84030000  MOV EAX,DWORD PTR DS:[EBX+384]
00477ED8  |. E8 A35CFBFF    CALL UNPACKED.0042DB80            
↑_______取用户位数 OE
00477EDD  |. 8B45 F4        MOV EAX,DWORD PTR SS:[EBP-C]      
↑_______将用户位数到EAX
00477EE0  |. E8 B7BDF8FF    CALL UNPACKED.00403C9C              
↑_______取用户位数 OE
00477EE5  |. 83F8 04        CMP EAX,4                          
↑_______比较是否大于或等于4   小则OVER
00477EE8  |. 7D 0D          JGE SHORT UNPACKED.00477EF7
00477EEA  |. 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4]
00477EED  |. E8 E28CFDFF    CALL UNPACKED.00450BD4
00477EF2  |. E9 1B030000    JMP UNPACKED.00478212
00477EF7  |> 8D55 F0        LEA EDX,DWORD PTR SS:[EBP-10]
00477EFA  |. 8B83 84030000  MOV EAX,DWORD PTR DS:[EBX+384]
00477F00  |. E8 7B5CFBFF    CALL UNPACKED.0042DB80
00477F05  |. 8B45 F0        MOV EAX,DWORD PTR SS:[EBP-10]    
↑_______取用户位数 OE
00477F08  |. E8 8FBDF8FF    CALL UNPACKED.00403C9C
00477F0D  |. 83F8 06        CMP EAX,6                      
↑_______比较是不是大于和等于6
先跟踪大于3而小于6位的注册码我无法跟出,最后选定大于6位的跟踪,问题解决。
[可能由于我技术问题,那位跟出4位用户名的请指点告诉我]

00477F10  JGE UNPACKED.00478050  跳走
 ↓_______来到这
00478050  LEA EDX,DWORD PTR SS:[EBP-44]
00478053  MOV EAX,DWORD PTR DS:[EBX+388]
00478059  CALL UNPACKED.0042DB80
0047805E  MOV EAX,DWORD PTR SS:[EBP-44]      
↑_______取输入的注册码
00478061  PUSH EAX
00478062  LEA EDX,DWORD PTR SS:[EBP-4C]
00478065  MOV EAX,DWORD PTR DS:[EBX+384]
0047806B  CALL UNPACKED.0042DB80              
↑_______用户位数 14
00478070  MOV EDX,DWORD PTR SS:[EBP-4C]      
↑_______取用户位数---》EDX
00478073  LEA ECX,DWORD PTR SS:[EBP-48]
00478076  MOV EAX,DWORD PTR DS:[4965B4]
0047807B  MOV EAX,DWORD PTR DS:[EAX]
0047807D  CALL UNPACKED.00492900   关键算法CALL
-----------------------算法CALL 00492900------------------
00492900  PUSH EBP
00492901  MOV EBP,ESP
00492903  ADD ESP,-1C
00492906  PUSH EBX
00492907  PUSH ESI
00492908  PUSH EDI
00492909  XOR EBX,EBX                        
↑____//EBX清0X
0049290B  MOV DWORD PTR SS:[EBP-10],EBX
0049290E  MOV DWORD PTR SS:[EBP-8],ECX
00492911  MOV DWORD PTR SS:[EBP-4],EDX
00492914  MOV EAX,DWORD PTR SS:[EBP-4]
00492917  CALL UNPACKED.00403E50            
0049291C  XOR EAX,EAX                        
0049291E  PUSH EBP
0049291F  PUSH UNPACKED.004929EC
00492924  PUSH DWORD PTR FS:[EAX]
00492927  MOV DWORD PTR FS:[EAX],ESP
0049292A  MOV EAX,DWORD PTR SS:[EBP-4]      
0049292D  CALL UNPACKED.00403C9C            
↑____//算用户位数 OE
00492932  CMP EAX,3   比较
00492935  JLE UNPACKED.004929CE
0049293B  XOR EDI,EDI
0049293D  MOV EAX,DWORD PTR SS:[EBP-4]      
00492940  CALL UNPACKED.00403C9C            
↑____// 再次算用户位数 OE
00492945  INC EAX                            
↑____//用户EAX +1 =0f
00492946  TEST EAX,EAX
00492948  JLE SHORT UNPACKED.0049299B
0049294A  MOV DWORD PTR SS:[EBP-14],EAX
0049294D  MOV DWORD PTR SS:[EBP-C],1
00492954  /MOV EAX,DWORD PTR SS:[EBP-4]      
00492957  |CALL UNPACKED.00403C9C
↑____// 再次算用户位数 OE
0049295C  |MOV ESI,EAX
↑____//eax===>esi
0049295E  |INC ESI                          
↑____// 用户位数加1 OE+1=0F
0049295F  |TEST ESI,ESI
00492961  |JLE SHORT UNPACKED.00492993
00492963  |MOV EBX,1                        
↑____//  1---》EBX  
00492968  |/MOV EAX,DWORD PTR SS:[EBP-4]    
0049296B  ||CALL UNPACKED.00403C9C          
00492970  ||SUB EAX,EBX                      
↑____//用户位数OE -1 =OB   EBX为进行计算的位数
00492972  ||MOV EDX,DWORD PTR SS:[EBP-4]    
↑____//取用户存放的内存地址
00492975  ||MOV AL,BYTE PTR DS:[EDX+EAX]    
↑____//用户存放的内存地址+用户位数-1=就是从用户最后一位取数
 1-----------取 ] (5D)
 2-----------取 R (52)
00492978  ||MOV EDX,DWORD PTR SS:[EBP-C]
↑____//[EBP-C] 为大循环的次数 =----》EDX  
0049297B  ||ADD EDX,EDX                      
↑____//EDX+EDX=2
0049297D  ||LEA EDX,DWORD PTR DS:[EDX+EDX*4]
↑____//[EDX+EDX*4]=2+2*4=0A
00492980  ||IMUL EDX,EDI                    
↑____//EDX * EDI 第一次EDI为0,
 1------------0A   *  0 = 0
2------------0A   *  5D= 3A2
00492983  ||AND EAX,0FF                      
↑____//取 ] (5D) AND 0FF 不变
00492988  ||IMUL EAX,EBX                    
↑____//  EAX为取的用户的ASCII,EBX为计算的位数
1-----------] (5D)  *   1  =5D----》EAX
 2------------取 R (52)* 2 =A4
0049298B  ||ADD EDX,EAX                      
↑____// 0 +5D=5D ----》EDX
  2-------- 3A2+A4=446
0049298D  ||MOV EDI,EDX
↑____//EDX(5D)---》EDI
 2---------446---》EDI
0049298F  ||INC EBX                          
↑____//EBX为以计算的位数, EBX+1,去进行下个计算
00492990  ||DEC ESI
↑____// ESI 为需要计算的位数,ESI-1,表示还剩下多少没计算
00492991  |\JNZ SHORT UNPACKED.00492968
 ↑____// 比较是否计算完  小循环 OF(16) 次
   //第一次计算完后为  E0AAE680  (3769296512)---》EDI
    // 计算完为一次大循环
00492993  |INC DWORD PTR SS:[EBP-C]          
 ↑____//表示大循环的次数
00492996  |DEC DWORD PTR SS:[EBP-14]        
 ↑____//表示还要大循环的次数  用户位数加1  0F(16)
00492999  \JNZ SHORT UNPACKED.00492954
 ↑____//       比较是否计算完  循环 OF(16)
   //计算完后为  109D02C0(278725312)---》EDI 10进制为真注册码
0049299B  LEA EAX,DWORD PTR SS:[EBP-10]

----------------------------算法完---------------------

00478082  MOV EDX,DWORD PTR SS:[EBP-48]      
 ↑_______将真注册码    -----》EDX
00478085  POP EAX
00478086  CALL UNPACKED.00403DAC    比较~~~~~
0047808B  JNZ UNPACKED.


 

 最后得:
用户:冷枫[OCN][CTR]
注册码:278725312
  写的不好的地方,还希望各位看观指出~~~~~~
------------------------------------------------------------
 
~~~~~~~~~~~~~相信自己,哦哦哦哦~~~~~~~~~~~~~