首页
论坛
专栏
课程

[原创]中华压缩[ChinaZip]2005钻石版 v10.8 算法

2005-3-24 20:40 6044

[原创]中华压缩[ChinaZip]2005钻石版 v10.8 算法

2005-3-24 20:40
6044
中华压缩【ChinaZip】2005钻石版 v10.8  算法分析

 日期:2005年3月23日   破解人:Baby2008
―――――――――――――――――――――――――――――――――――――――――――

【软件名称】:中华压缩【ChinaZip】2005钻石版 v10.8
【软件大小】:2.8M
【下载地址】:http://www.wiseperson.com/download.htm
【软件简介】:
中华压缩【ChinaZip】世界领先的压缩解压缩软件!

      中华压缩【ChinaZip】是中国压缩解压缩软件第一品牌!重要的压缩/解压缩文档请交给中华压缩 !中华压缩【ChinaZip】世界压缩解

压缩软件领先者!

*支持28种压缩格式,是全球支持压缩格式最多的功能强大的中国压缩、解压缩软件!
*中国人自己开发的功能强大的压缩、解压缩软件!
*是全球支持压缩格式最多的中国软件!
*支持28种压缩格式:ZIP, ZIP SFX, ZOO, ZOO SFX, RAR, ARJ, ARJ, SFX, ARC, ARC SFX, ACE, CAB, HA, JAR (JavaSoft java

format),LHA, LHA SFX, LZH, LZH SFX, PAK, PAK SFX, TAR, GZIP, Z, BH, BH SFX,UUE, XXE, ENC, Install-Shield等等!新的压缩格式不

断增加中...
*完全简体中文版!
*完全支持创建自解压压缩文件(ZIP格式)!
*世界一流的对话框嵌入操作界面,操作简单!
*支持UUencode,XXEncode编码,解码!
*支持添加压缩文档注释!
*支持非解压状态的文件查看和重新命名!
*支持压缩文件校验!
*支持压缩文件口令加密!
*支持资源管理器右键菜单启动!
*支持拖拽功能!
*支持Widows XP豪华界面!界面友好,美观漂亮!
*提供强大的ZIP文档修复工具,让您轻松修复损坏的压缩文件!
*注册用户提供终生免费升级服务和24小时技术支持!

中华压缩【ChinaZip】界面华丽,使用简单,功能强大,必将成为您工作中的有力工具。

适用于 Windows 98、NT、2000、ME、XP、2003 操作系统

【软件限制】:Nag试用提示,可试用30天。
【保护方式】:注册码保护
【破解声明】:初学Crack,只是感兴趣,失误之处敬请诸位大侠赐教!
【破解工具】:DeDe3.50.04 Fix超强版、Ollydbg V1.10 2005.3汉化修正版+最新最全插件、CasprGui  v1.10 YY 汉化版、PeID 0.93

―――――――――――――――――――――――――――――――――――――――――――

【破解过程】:
先用PEID 0.93汉化增强版查壳,ASPack 2.001 -> Alexey Solodovnikov,用Quick Unpack 0.6等脱壳后程序不能运行,大家可以试试ESP定律

手工脱,我选用一个老工具CasprGui轻松搞定,另存为unpacked.ExE,脱壳后再用PEID 0.93汉化增强版查壳,Borland Delphi 6.0 - 7.00,现

在Delphi的程序真多,我也是用Delphi的^_^ 。OD载入npacked.ExE,查找'注册码不正确,无法注册...'字样,双击来到005022FE处,向上来到

005022A8下断(也可以通过DeDe分析OkBtnClick地址直接下断),F9运行,在Nag窗口点击输入注册码后OD中断:

005022A8 <>/.  55                    push ebp                             ;  <-TfrmRegistration@OkBtnClick
005022A9   |.  8BEC                  mov ebp,esp
005022AB   |.  6A 00                 push 0
005022AD   |.  6A 00                 push 0
005022AF   |.  53                    push ebx
005022B0   |.  8BD8                  mov ebx,eax
005022B2   |.  33C0                  xor eax,eax
005022B4   |.  55                    push ebp
005022B5   |.  68 40235000           push <Unpacked.->System.@HandleFinal>
005022BA   |.  64:FF30               push dword ptr fs:[eax]
005022BD   |.  64:8920               mov dword ptr fs:[eax],esp
005022C0   |.  8D55 FC               lea edx,[local.1]
005022C3 <>|.  8B83 04030000         mov eax,dword ptr ds:[ebx+304]       ;  *TfrmRegistration.PasswordEdit:TEdit
005022C9 <>|.  E8 F63DF4FF           call Unpacked.004460C4               ;  ->Controls.TControl.GetText(TControl):TCaption;
005022CE   |.  8B45 FC               mov eax,[local.1]                    ;  注册码
005022D1   |.  50                    push eax
005022D2   |.  8D55 F8               lea edx,[local.2]
005022D5 <>|.  8B83 00030000         mov eax,dword ptr ds:[ebx+300]       ;  *TfrmRegistration.NameEdit:TEdit
005022DB <>|.  E8 E43DF4FF           call Unpacked.004460C4               ;  ->Controls.TControl.GetText(TControl):TCaption;
005022E0   |.  8B55 F8               mov edx,[local.2]                    ;  注册名
005022E3   |.  A1 84BA5100           mov eax,dword ptr ds:[51BA84]
005022E8   |.  8B00                  mov eax,dword ptr ds:[eax]
005022EA <>|.  8B80 34030000         mov eax,dword ptr ds:[eax+334]       ;  *TFrmRegNotice.Reg:TRegwareII
005022F0   |.  B9 54235000           mov ecx,Unpacked.00502354            ;  ASCII "WisePerson SoftWare"
005022F5 <>|.  E8 B6F4FFFF           call Unpacked.005017B0               ;  关键,跟进
005022FA   |.  84C0                  test al,al
005022FC   |.  75 0C                 jnz short Unpacked.0050230A          ;  经典比较,爆破点
005022FE   |.  B8 70235000           mov eax,Unpacked.00502370            ;  注册码不正确...
00502303 <>|.  E8 94CCF3FF           call Unpacked.0043EF9C               ;  ->Dialogs.ShowMessage(AnsiString);
00502308   |.  EB 1B                 jmp short Unpacked.00502325
0050230A   |>  B8 AC235000           mov eax,Unpacked.005023AC
0050230F <>|.  E8 88CCF3FF           call Unpacked.0043EF9C               ;  ->Dialogs.ShowMessage(AnsiString);
00502314   |.  A1 D8B85100           mov eax,dword ptr ds:[51B8D8]
00502319   |.  8B00                  mov eax,dword ptr ds:[eax]
0050231B   |.  BA D0235000           mov edx,Unpacked.005023D0
00502320 <>|.  E8 CF3DF4FF           call Unpacked.004460F4               ;  ->Controls.TControl.SetText(TControl;TCaption);
00502325   |>  33C0                  xor eax,eax
00502327   |.  5A                    pop edx
00502328   |.  59                    pop ecx
00502329   |.  59                    pop ecx
0050232A   |.  64:8910               mov dword ptr fs:[eax],edx
0050232D   |.  68 47235000           push Unpacked.00502347
00502332   |>  8D45 F8               lea eax,[local.2]
00502335   |.  BA 02000000           mov edx,2
0050233A <>|.  E8 1125F0FF           call Unpacked.00404850               ;  ->System.@LStrArrayClr(void;void;Integer);
0050233F   \.  C3                    retn

经典比较,005022F5 <>|.  E8 B6F4FFFF           call Unpacked.005017B0               ;  关键,跟进

---------------------------------------------------
005017B0   /$  55                    push ebp
005017B1   |.  8BEC                  mov ebp,esp
005017B3   |.  83C4 F0               add esp,-10
005017B6   |.  53                    push ebx
005017B7   |.  33DB                  xor ebx,ebx
005017B9   |.  895D F0               mov [local.4],ebx
005017BC   |.  895D F4               mov [local.3],ebx
005017BF   |.  894D F8               mov [local.2],ecx                    ;  'WisePerson SoftWare'
005017C2   |.  8955 FC               mov [local.1],edx                    ;  注册名
005017C5   |.  8BD8                  mov ebx,eax
005017C7   |.  8B45 FC               mov eax,[local.1]                    ;  注册名
005017CA   |.  E8 FD34F0FF           call Unpacked.00404CCC               ;  System.@LStrAddRef(void;void):Pointer;
005017CF   |.  8B45 F8               mov eax,[local.2]                    ;  'WisePerson SoftWare'
005017D2   |.  E8 F534F0FF           call Unpacked.00404CCC
005017D7   |.  8B45 08               mov eax,[arg.1]                      ;  注册码
005017DA   |.  E8 ED34F0FF           call Unpacked.00404CCC
005017DF   |.  33C0                  xor eax,eax
005017E1   |.  55                    push ebp
005017E2   |.  68 9A185000           push Unpacked.0050189A
005017E7   |.  64:FF30               push dword ptr fs:[eax]
005017EA   |.  64:8920               mov dword ptr fs:[eax],esp
005017ED   |.  8B45 FC               mov eax,[local.1]                    ;  注册名
005017F0   |.  E8 EF32F0FF           call Unpacked.00404AE4               ;  System.@LStrLen(String):Integer;
005017F5   |.  3B43 4C               cmp eax,dword ptr ds:[ebx+4C]
005017F8   |.  7F 19                 jg short Unpacked.00501813           ;  注册名长度不能>25
005017FA   |.  8B45 FC               mov eax,[local.1]
005017FD   |.  E8 E232F0FF           call Unpacked.00404AE4
00501802   |.  3B43 50               cmp eax,dword ptr ds:[ebx+50]
00501805   |.  7C 0C                 jl short Unpacked.00501813           ;  注册名长度不能<3
00501807   |.  8B45 08               mov eax,[arg.1]                      ;  注册码
0050180A   |.  E8 D532F0FF           call Unpacked.00404AE4
0050180F   |.  85C0                  test eax,eax
00501811   |.  75 04                 jnz short Unpacked.00501817          ;  注册码不能为空
00501813   |>  33DB                  xor ebx,ebx
00501815   |.  EB 60                 jmp short Unpacked.00501877
00501817   |>  8D55 F4               lea edx,[local.3]
0050181A   |.  8B45 08               mov eax,[arg.1]                      ;  注册码
0050181D   |.  E8 1E75F0FF           call Unpacked.00408D40
00501822   |.  8B55 F4               mov edx,[local.3]
00501825   |.  8D45 08               lea eax,[arg.1]
00501828   |.  E8 9730F0FF           call Unpacked.004048C4
0050182D   |.  8D4D F0               lea ecx,[local.4]
00501830   |.  8B55 FC               mov edx,[local.1]                    ;  注册名
00501833   |.  8BC3                  mov eax,ebx
00501835   |.  E8 72FCFFFF           call Unpacked.005014AC               ;  关键算法,跟进
0050183A   |.  8B45 F0               mov eax,[local.4]                    ;  注册名计算结果
0050183D   |.  8B55 08               mov edx,[arg.1]                      ;  注册码
00501840   |.  E8 7375F0FF           call Unpacked.00408DB8
00501845   |.  85C0                  test eax,eax
00501847   |.  74 04                 je short Unpacked.0050184D           ;  相等保存注册信息
00501849   |.  33DB                  xor ebx,ebx
0050184B   |.  EB 2A                 jmp short Unpacked.00501877
0050184D   |>  8D43 48               lea eax,dword ptr ds:[ebx+48]
00501850   |.  8B55 FC               mov edx,[local.1]
00501853   |.  E8 2830F0FF           call Unpacked.00404880
00501858   |.  8D43 54               lea eax,dword ptr ds:[ebx+54]
0050185B   |.  8B55 F8               mov edx,[local.2]
0050185E   |.  E8 1D30F0FF           call Unpacked.00404880
00501863   |.  8D43 5C               lea eax,dword ptr ds:[ebx+5C]
00501866   |.  8B55 08               mov edx,[arg.1]
00501869   |.  E8 1230F0FF           call Unpacked.00404880
0050186E   |.  8BC3                  mov eax,ebx
00501870   |.  E8 B3010000           call Unpacked.00501A28
00501875   |.  B3 01                 mov bl,1
00501877   |>  33C0                  xor eax,eax
00501879   |.  5A                    pop edx
0050187A   |.  59                    pop ecx
0050187B   |.  59                    pop ecx
0050187C   |.  64:8910               mov dword ptr fs:[eax],edx
0050187F   |.  68 A1185000           push Unpacked.005018A1
00501884   |>  8D45 F0               lea eax,[local.4]
00501887   |.  BA 04000000           mov edx,4
0050188C   |.  E8 BF2FF0FF           call Unpacked.00404850
00501891   |.  8D45 08               lea eax,[arg.1]
00501894   |.  E8 932FF0FF           call Unpacked.0040482C
00501899   \.  C3                    retn
---------------------------------------------------

00501835   |.  E8 72FCFFFF           call Unpacked.005014AC               ;  关键算法,跟进

---------------------------------------------------
005014AC   /$  55                    push ebp
005014AD   |.  8BEC                  mov ebp,esp
005014AF   |.  83C4 E4               add esp,-1C
005014B2   |.  53                    push ebx
005014B3   |.  56                    push esi
005014B4   |.  57                    push edi
005014B5   |.  33DB                  xor ebx,ebx
005014B7   |.  895D E4               mov [local.7],ebx
005014BA   |.  895D F4               mov [local.3],ebx
005014BD   |.  8BF9                  mov edi,ecx
005014BF   |.  8955 FC               mov [local.1],edx                ;  注册名
005014C2   |.  8BF0                  mov esi,eax
005014C4   |.  8B45 FC               mov eax,[local.1]
005014C7   |.  E8 0038F0FF           call Unpacked.00404CCC           ;  System.@LStrAddRef(void;void):Pointer;
005014CC   |.  33C0                  xor eax,eax
005014CE   |.  55                    push ebp
005014CF   |.  68 C5155000           push Unpacked.005015C5
005014D4   |.  64:FF30               push dword ptr fs:[eax]
005014D7   |.  64:8920               mov dword ptr fs:[eax],esp
005014DA   |.  8B45 FC               mov eax,[local.1]                ;  注册名
005014DD   |.  E8 0236F0FF           call Unpacked.00404AE4           ;  System.@LStrLen(String):Integer;
005014E2   |.  3B46 4C               cmp eax,dword ptr ds:[esi+4C]
005014E5   |.  7F 0D                 jg short Unpacked.005014F4       ;  注册名长度不能>25
005014E7   |.  8B45 FC               mov eax,[local.1]
005014EA   |.  E8 F535F0FF           call Unpacked.00404AE4           ;  System.@LStrLen(String):Integer;
005014EF   |.  3B46 50               cmp eax,dword ptr ds:[esi+50]
005014F2   |.  7D 0C                 jge short Unpacked.00501500      ;  注册名长度必须>3
005014F4   |>  8BC7                  mov eax,edi
005014F6   |.  E8 3133F0FF           call Unpacked.0040482C           ;  System.@LStrClr(void;void);
005014FB   |.  E9 9F000000           jmp Unpacked.0050159F            ;  注册名不符合条件,则Over!
00501500   |>  8B45 FC               mov eax,[local.1]                ;  注册名
00501503   |.  E8 DC35F0FF           call Unpacked.00404AE4           ;  System.@LStrLen(String):Integer;
00501508   |.  8BD8                  mov ebx,eax                      ;  注册名长度
0050150A   |.  EB 31                 jmp short Unpacked.0050153D
0050150C   |>  8B45 FC               /mov eax,[local.1]               ;  注册名
0050150F   |.  8A4418 FF             |mov al,byte ptr ds:[eax+ebx-1]  ;  从注册名后面开始取字符
00501513   |.  25 FF000000           |and eax,0FF
00501518   |.  33D2                  |xor edx,edx
0050151A   |.  52                    |push edx
0050151B   |.  50                    |push eax
0050151C   |.  8B46 68               |mov eax,dword ptr ds:[esi+68]   ;  3FAB9386
0050151F   |.  8B56 6C               |mov edx,dword ptr ds:[esi+6C]   ;  3
00501522   |.  E8 0945F0FF           |call Unpacked.00405A30          ;  System.@_llmod;Dividend(EAX:EDX),

Divisor([ESP]:[ESP+4])
00501527   |.  52                    |push edx                        ; /Arg2
00501528   |.  50                    |push eax                        ; |33FAB9386 /Name[i]
00501529   |.  8D45 E4               |lea eax,[local.7]               ; |
0050152C   |.  E8 DF7CF0FF           |call Unpacked.00409210          ; \Unpacked.00409210
00501531   |.  8B55 E4               |mov edx,[local.7]               ;  转为10进制字符串
00501534   |.  8D45 F4               |lea eax,[local.3]
00501537   |.  E8 B035F0FF           |call Unpacked.00404AEC          ;  System.@LStrCat;
0050153C   |.  4B                    |dec ebx
0050153D   |>  8B45 FC                mov eax,[local.1]               ;  注册名
00501540   |.  E8 9F35F0FF           |call Unpacked.00404AE4          ;  System.@LStrLen(String):Integer;
00501545   |.  83E8 06               |sub eax,6                       ;  注册名长度-6
00501548   |.  3BD8                  |cmp ebx,eax
0050154A   |.  7C 04                 |jl short Unpacked.00501550
0050154C   |.  85DB                  |test ebx,ebx
0050154E   |.^ 7F BC                 \jg short Unpacked.0050150C
00501550   |>  8D55 F8               lea edx,[local.2]
00501553   |.  8B45 F4               mov eax,[local.3]
00501556   |.  E8 E145F0FF           call Unpacked.00405B3C           ;  * Reference to:

System.@ValInt64(String;Integer;Integer):Int64;
0050155B   |.  8945 E8               mov [local.6],eax                ;  转换为Int64
0050155E   |.  8955 EC               mov [local.5],edx
00501561   |.  8B5E 60               mov ebx,dword ptr ds:[esi+60]    ;  12
00501564   |.  85DB                  test ebx,ebx
00501566   |.  7F 11                 jg short Unpacked.00501579
00501568   |.  FF75 EC               push [local.5]                   ; /Arg2
0050156B   |.  FF75 E8               push [local.6]                   ; |Arg1
0050156E   |.  8BD7                  mov edx,edi                      ; |
00501570   |.  33C0                  xor eax,eax                      ; |
00501572   |.  E8 097DF0FF           call Unpacked.00409280           ; \Unpacked.00409280
00501577   |.  EB 26                 jmp short Unpacked.0050159F
00501579   |>  FF75 EC               push [local.5]                   ; /Arg2
0050157C   |.  FF75 E8               push [local.6]                   ; |Arg1
0050157F   |.  8BD7                  mov edx,edi                      ; |
00501581   |.  8BC3                  mov eax,ebx                      ; |
00501583   |.  E8 F87CF0FF           call Unpacked.00409280           ; \Unpacked.00409280
00501588   |.  8B07                  mov eax,dword ptr ds:[edi]       ;  字符串转换为Int64后以12位16进制输出
0050158A   |.  E8 5535F0FF           call Unpacked.00404AE4           ;  求长度
0050158F   |.  8BC8                  mov ecx,eax
00501591   |.  2B4E 60               sub ecx,dword ptr ds:[esi+60]    ;  长度-12(要删除的字符数)
00501594   |.  8B56 60               mov edx,dword ptr ds:[esi+60]    ;  12
00501597   |.  42                    inc edx                          ;  (起始位置12+1=13)
00501598   |.  8BC7                  mov eax,edi
0050159A   |.  E8 DD37F0FF           call Unpacked.00404D7C           ;  System.@LStrDelete;删第除12位后的字符
0050159F   |>  33C0                  xor eax,eax
005015A1   |.  5A                    pop edx
005015A2   |.  59                    pop ecx
005015A3   |.  59                    pop ecx
005015A4   |.  64:8910               mov dword ptr fs:[eax],edx
005015A7   |.  68 CC155000           push Unpacked.005015CC
005015AC   |>  8D45 E4               lea eax,[local.7]
005015AF   |.  E8 7832F0FF           call Unpacked.0040482C
005015B4   |.  8D45 F4               lea eax,[local.3]
005015B7   |.  E8 7032F0FF           call Unpacked.0040482C
005015BC   |.  8D45 FC               lea eax,[local.1]
005015BF   |.  E8 6832F0FF           call Unpacked.0040482C
005015C4   \.  C3                    retn
005015C5    .^ E9 4A2CF0FF           jmp Unpacked.00404214
005015CA    .^ EB E0                 jmp short Unpacked.005015AC
005015CC    .  5F                    pop edi
005015CD    .  5E                    pop esi
005015CE    .  5B                    pop ebx
005015CF    .  8BE5                  mov esp,ebp
005015D1    .  5D                    pop ebp
005015D2    .  C3                    retn
-------------------------------------------------

【算法总结】:
算法比较简单,怪不得很多教程都以它的前期版本为教程,注册算法是:
1、用户名Name要求:  3<用户名长度<25
2、Name后面开始取字符,
3、用常数$33FAB9386 / Name[i] 的ASCII 取余数,并转换成10进制字符串
4、连接上述的10进制字符串,记为Serail
5、取Name[i]字符到<用户名长度-6结束
6、将Serail转换成int64,并以12位16进制字符串输出,如果长度超过12位,截取12后的所有字符即为注册码。

贴出注册机delphi源码:
Procedure TForm1.btn1Click(Sender: TObject);
Var
  Name, SerailNo: String;
  i: Integer;
Begin
  Name := edt1.Text;
  If (Length(Name) > 25) Or (Length(Name) < 3) Then
  Begin
    edt2.Clear;
    Exit;
  End;

  For i := Length(Name) Downto 1 Do
  Begin
    If i < Length(Name) - 6 Then
      Break
    Else
      SerailNo := SerailNo + FormatFloat('0', $33FAB9386 Mod Ord(Name[i]));
  End;

  edt2.Text := LeftStr(IntToHex(StrToInt64(SerailNo), 12), 12);
End;

大家可以验证一下:
用户名:Baby2008
注册码:3176382C48A6

[公告]安全服务和外包项目请将项目需求发到看雪企服平台:https://qifu.kanxue.com

最新回复 (4)
skyege 2 2005-3-24 23:31
2
0
程序流程和老版本的没什么两样,算法变了点而已,搞注册就too easy, 搞算法也简单啦
clide2000 7 2005-3-24 23:49
3
0
支持,辛苦了
auser 2005-3-25 20:49
4
0
对我等新手很有用!
隐居士 2017-9-3 09:50
5
0
请问哪里可以下载到ChinaZip的安装包,楼主提供的链接失效了
游客
登录 | 注册 方可回帖
返回