• 标 题:“爆破”天音总管2.15版的一点体会 (9千字)
  • 作 者:limyog
  • 时 间:2001-12-7 16:46:16
  • 链 接:http://bbs.pediy.com

“爆破”天音总管2.15版的一点体会
 
   天音总管推出已有很长一段时间了,而且也有高手制作出了破解版,要拣现成的简单得很,但对我等初学破解的人来说,是没有多大帮助的,为此,我就下了个未注册版来练习练习,藉此提高自己的水平,不怕各位见笑,因为在破解的过程中,我始终无法找到正确的注册码,只有采取“爆破”,是“爆破”而不是“暴破”(差点用上TNT或是黑索金了),可想而知,破解它的过程对我是多难,什么I/O错误,非法操作、系统死机等等,都在破解中发生了,好在破解成功,没有枉费我的一番努力。
   凭心而论,这款软件做得还过得去,主要用来管理你硬盘上的文本资料、图片、MP3,HTML等,并带有一个MP3播放器(只能播放MP3格式),但实用价值并不大,启动过程太慢,让人实在不能忍受,不过因为其界面设计十分美观,半透明的对话框看起来好顺眼,就把它继续留在硬盘上了。
   
   使用工具
    1、W32DASM8.93Gold
    2、Ultraedit8.0
    3、Unpack1.0.1
    4、Trw2000 1.23或Softice4.05  可用可不用,随你意了
   
    爆破过程:
   
   
   该软件是用Aspack加的壳,要脱壳十分简单,用UnPack就行,我用的是由阿郎汉化的1.0.1版,按解压就成了,然后把程序主文件wininfo.exe复制一副本,用W32DASM8.93反编译副本,用UE8.0对原程序进行修改。
   很幸运,用W32DASM8.93反编译后,通过串式参考找到以下提示字符:
   
       "本软件受权给: %s%s注册码: %s"-----有经验的一看就知道,这是出现在关于对话框中的
   "感谢您注册天音总管!"----------注册成功提示
    "试用期已过,您必须注册才能使用。"---过了30天未注册就会蹦出来
    "天音总管 - "    -----------标题栏上的东西,看后面的小短杠,跟在它后面的就是
                      当前打开的文件名XXX.info,再后就是下面的30天试用期
    "注册码不正确."-------------输错了注册码就是它出来与你约会了
    "30天试用期"---------------上面已说了
   
    既然有这么多的提示,应该好破了,首先让它注册成功吧,经分析发现,该软件在判断注册成功与否时,都调用了同一个call  0051c800,只不过在call前面放入了不同的内容,如下:
 
:00553706 8B06                    mov eax, dword ptr [esi]
:00553708 E83F86FFFF              call 0054BD4C
:0055370D 8B06                    mov eax, dword ptr [esi]
:0055370F 80B85C01000000          cmp byte ptr [eax+0000015C], 00
:00553716 7424                    je 0055373C        -------------将此处74改为75就不用跳到注册                                                                  不成功的地方去了
:00553718 66A198375500            mov ax, word ptr [00553798]
:0055371E 50                      push eax
:0055371F 6A00                    push 00000000
:00553721 A1682F5600              mov eax, dword ptr [00562F68]
:00553726 8B00                    mov eax, dword ptr [eax]
:00553728 8B8030070000            mov eax, dword ptr [eax+00000730]
:0055372E B102                    mov cl, 02
   
    * Possible StringData Ref from Code Obj ->"感谢您注册天音总管!"
                                  |
:00553730 BAA4375500              mov edx, 005537A4
                        ~~~~~~~~        ---这里面放的就是感谢您注册
                                   天音总管的字符串
:00553735 E8C690FCFF              call 0051C800
                      ~~~~~~~~            ------此call后就注册成功了
:0055373A EB2A                    jmp 00553766

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00553716(C)
|
:0055373C 33C0                    xor eax, eax
:0055373E 898334020000            mov dword ptr [ebx+00000234], eax
:00553744 66A198375500            mov ax, word ptr [00553798]
:0055374A 50                      push eax
:0055374B 6A00                    push 00000000
:0055374D A1682F5600              mov eax, dword ptr [00562F68]
:00553752 8B00                    mov eax, dword ptr [eax]
:00553754 8B8030070000            mov eax, dword ptr [eax+00000730]
:0055375A B101                    mov cl, 01

* Possible StringData Ref from Code Obj ->"注册码不正确."
                                  |
:0055375C BAC0375500              mov edx, 005537C0    ----这里放的就是注册码不正确的字符串                                                                 
                                          ~~~~~~~~
:00553761 E89A90FCFF              call 0051C800        ----此call过后就over了
                                      ~~~~~~~~
   
    按上述方法改后,只要按注册就成功,过了30天蹦出注册提示框后也一样,但标题栏上的30天试用期,时间过期后的注册框蹦出,关于菜单中的注册及关于对话框中的注册按钮都还在,并且在关于对话框中仍有“试用版,未注册”字样,要去掉注册按钮,我是转来转去,绕地球转了两圈,才终于找到了要修改的地方,其实就是在"试用期已过,您必须注册才能使用。"前面,如下:
* Possible StringData Ref from Code Obj ->"?D"
                                  |
:00557210 A170345500              mov eax, dword ptr [00553470]
:00557215 E896A8EFFF              call 00451AB0
:0055721A 8B1544345600            mov edx, dword ptr [00563444]
:00557220 8902                    mov dword ptr [edx], eax

* Reference To: kernel32.GetTickCount, Ord:0000h
                                  |
:00557222 E82D0EEBFF              Call 00408054
:00557227 8BD8                    mov ebx, eax
:00557229 EB0C                    jmp 00557237

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00557243(C)
|
:0055722B A1F4315600              mov eax, dword ptr [005631F4]
:00557230 8B00                    mov eax, dword ptr [eax]
:00557232 E88116F0FF              call 004588B8

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00557229(U)
|

* Reference To: kernel32.GetTickCount, Ord:0000h
                                  |
:00557237 E8180EEBFF              Call 00408054
:0055723C 2BC3                    sub eax, ebx
:0055723E 3DE8030000              cmp eax, 000003E8
:00557243 72E6                    jb 0055722B----这里我改过,改了就死机,不知为啥
:00557245 8D55F4                  lea edx, dword ptr [ebp-0C]
:00557248 A144345600              mov eax, dword ptr [00563444]
:0055724D 8B00                    mov eax, dword ptr [eax]
:0055724F 8B98D0020000            mov ebx, dword ptr [eax+000002D0]
:00557255 8BC3                    mov eax, ebx
:00557257 E81C2EEEFF              call 0043A078
:0055725C 8B4DF4                  mov ecx, dword ptr [ebp-0C]
:0055725F 8D45F8                  lea eax, dword ptr [ebp-08]

* Possible StringData Ref from Code Obj ->"试用期已过,您必须注册才能使用。"
                                  |
:00557262 BAE4725500              mov edx, 005572E4
:00557267 E848CFEAFF              call 004041B4----此call就是出试用期已过...的框
:0055726C 8B55F8                  mov edx, dword ptr [ebp-08]
:0055726F A144345600              mov eax, dword ptr [00563444]
:00557274 8BC3                    mov eax, ebx
:00557276 E82D2EEEFF              call 0043A0A8
:0055727B A144345600              mov eax, dword ptr [00563444]
:00557280 8B00                    mov eax, dword ptr [eax]
:00557282 8B10                    mov edx, dword ptr [eax]
:00557284 FF92D8000000            call dword ptr [edx+000000D8]
:0055728A 83F802                  cmp eax, 00000002
:0055728D 750C                    jne 0055729B
:0055728F A1F4315600              mov eax, dword ptr [005631F4]
:00557294 8B00                    mov eax, dword ptr [eax]
:00557296 E87D18F0FF              call 00458B18
   
    上面几段代码经分析都没有符合条件的跳转,有的跳转一改就死,退出天音总额时报I/O错误,退不出,只有按CtrlAlt+Del才行,故只有再往上走,找到如下:
        * Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:005571AB(C)
|
:005571B4 8B06                    mov eax, dword ptr [esi]
:005571B6 80B85C01000000          cmp byte ptr [eax+0000015C], 00
:005571BD 7438                    je 005571F7-----这里就是我终于找到的地方,改74为75,关于                           菜单中的注册及关于对话框中的注册按钮就不                           会出现了
:005571BF 8D83D0070000            lea eax, dword ptr [ebx+000007D0]
:005571C5 8B16                    mov edx, dword ptr [esi]
:005571C7 8B9254010000            mov edx, dword ptr [edx+00000154]
:005571CD E86ACDEAFF              call 00403F3C
:005571D2 8D83D4070000            lea eax, dword ptr [ebx+000007D4]
:005571D8 8B16                    mov edx, dword ptr [esi]
:005571DA 8B9258010000            mov edx, dword ptr [edx+00000158]
:005571E0 E857CDEAFF              call 00403F3C
:005571E5 33D2                    xor edx, edx
:005571E7 8B8328040000            mov eax, dword ptr [ebx+00000428]
:005571ED E8AAEBEEFF              call 00445D9C
:005571F2 E9B0000000              jmp 005572A7

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:005571BD(C)
|
:005571F7 8B06                    mov eax, dword ptr [esi]
:005571F9 E88249FFFF              call 0054BB80
:005571FE 84C0                    test al, al
:00557200 0F84A1000000            je 005572A7--如果从:005571BD处直接跳到此的话,注册按钮仍会                         存在,并会出现过期注册提示框
:00557206 8B0DF4315600            mov ecx, dword ptr [005631F4]
:0055720C 8B09                    mov ecx, dword ptr [ecx]
:0055720E B201                    mov dl, 01

    其它的地方修改就简要说一下:
   
    在:0054777c处 改 838007000000 为 838007000001 则标题栏内不会出现30天试用期的字样了
    在:0054ed91处 改 838007000000 为 838007000001 则关于对话框内不会出试用期,未注册的字样,取而代之的是“软件受权给    注册码      ”,当然其后是没有内容的。
   
   
   
    改完后,你就是正版用户了,再用一款压缩工具进行压缩,文件就又只有600K多了,我用了UPX1.08,不影响使用,只可惜对话框内不会出现你的名字,这就是爆破的后果。
   
   
    有谁能告诉我怎样找到注册码吗?