• 标 题:暴力破解 程式猎人(Phunter) V1.30 (11千字)
  • 作 者:炎之川
  • 时 间:2001-10-25 23:05:13
  • 链 接:http://bbs.pediy.com

暴力破解 程式猎人(Phunter) V1.30

程式猎人(Phunter) V1.30
软件大小:  192 KB
软件类别:  国产软件 / 共享版 / 文件管理
应用平台:  Win95/98/NT/2000
原版软件:  http://202.107.104.34/soft/down/phunter_130.zip (192k,天空软件站)
软件介绍:  方便好用的资源管理软件,引入了软件数据库的概念,免去了你自己添加程序之苦,六大特色如下:1、自动搜索功能:自动查找你硬盘上的应用程序,帮你自动分类添加,方便管理。2、分类管理程序:引入了“程序组”与“程序项”的概念,使得各种程序的管理更加方便。3、快速启动程序:可以方便的启动任何一个应用程序。4、自动排序功能:根据程序使用频率进行排序,使常用的程序总在最前面。5、多种资源管理:程序项不仅可以是应用程序,还可以是任何一个可以使用的文件,比如MP3文件。甚至可以是一个网址或E-mail地址,全面管理你的资源。6、绝对绿色程序:即拷即用,不会在您的硬盘留下任何垃圾。

未注册版本限制:不能添加六个以上的程序组

破解工具:w32dasm 黄金版中文版、File Info 2.45、UltraEdit

破解人:炎之川 (skipli@sina.com)

在下初学破解,水平还很低,暂时还只会爆破,望各位大客多多指点^_^

破解过程:
1. 先用 FI 2.45 看看主程序,没壳,这就方便了~
2. 用 w32dasm 黄金版中文版反汇编主程序,在“串式参考”中找到注册码无效时的提示“注册码校验失败!”,嘿嘿~就是这里啦

* Reference To: MSVCRT.strcmp, Ord:02B8h
                                  |
:004038A3 E84E5B0000              Call 004093F6
:004038A8 59                      pop ecx
:004038A9 85C0                    test eax, eax
:004038AB 59                      pop ecx
:004038AC 7435                    je 004038E3  < ========= 不跳则注册码错误,改为 jne 004038E3
:004038AE 8B86A4000000            mov eax, dword ptr [esi+000000A4]
:004038B4 25FF0F0000              and eax, 00000FFF
:004038B9 3DB5040000              cmp eax, 000004B5
:004038BE 7423                    je 004038E3  < ========= 不跳则注册码错误,改为 jne 004038E3
:004038C0 53                      push ebx
:004038C1 53                      push ebx

* Possible StringData Ref from Data Obj ->"注册码校验成功!
这个注册码有日期限制,请您注意"
                                        ->"及时更换."
                                  |
:004038C2 683C024100              push 0041023C

* Reference To: MFC42.Ordinal:04B0, Ord:04B0h
                                  |
:004038C7 E854550000              Call 00408E20
:004038CC C705BC07410082FFFFFF    mov dword ptr [004107BC], FFFFFF82
:004038D6 8B86A4000000            mov eax, dword ptr [esi+000000A4]
:004038DC A3C0074100              mov dword ptr [004107C0], eax
:004038E1 EB9E                    jmp 00403881

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004038AC(C), :004038BE(C)  < ========= 是这两处跳过来的
|
:004038E3 53                      push ebx
:004038E4 53                      push ebx

* Possible StringData Ref from Data Obj ->"注册码校验失败!"    < ========= 往上看
                                  |
:004038E5 682C024100              push 0041022C
:004038EA C705BC0741007D000000    mov dword ptr [004107BC], 0000007D


不过这样改完,随意输入注册码注册,会提示“注册码校验成功!这个注册码有日期限制,请您注意及时更换.”,还有陷阱啊,继续看~然后来到下面这里:


* Reference To: USER32.SendMessageA, Ord:0214h
                                  |
:0040381F FF154CB74000            Call dword ptr [0040B74C]
:00403825 47                      inc edi
:00403826 81FF30750000            cmp edi, 00007530
:0040382C 7CDA                    jl 00403808
:0040382E 8B86A4000000            mov eax, dword ptr [esi+000000A4]
:00403834 BF80969800              mov edi, 00989680
:00403839 3BC7                    cmp eax, edi
:0040383B 765B                    jbe 00403898        < ========= 我猜这边的一大段就是真正比较注册码的,只是
:0040383D 3DFFE0F505              cmp eax, 05F5E0FF              基本上看不懂,干脆就直接把 765B 改 9090 吧
:00403842 7354                    jnb 00403898        < ========= 7354 改 9090
:00403844 55                      push ebp
:00403845 33D2                    xor edx, edx
:00403847 8BEF                    mov ebp, edi
:00403849 8B8EA0000000            mov ecx, dword ptr [esi+000000A0]
:0040384F F7F5                    div ebp
:00403851 50                      push eax
:00403852 51                      push ecx
:00403853 8BCE                    mov ecx, esi
:00403855 E8AA000000              call 00403904
:0040385A 8BC8                    mov ecx, eax
:0040385C 8B86A4000000            mov eax, dword ptr [esi+000000A4]
:00403862 33D2                    xor edx, edx
:00403864 5D                      pop ebp
:00403865 F7F7                    div edi
:00403867 3BCA                    cmp ecx, edx
:00403869 752D                    jne 00403898        < ========= 改je 00403898 也行,不过干脆把 752D 改9090,
:0040386B 53                      push ebx                        省事一点(典型的菜鸟~不懂就直接蒙过去^_^)
:0040386C 53                      push ebx

* Possible StringData Ref from Data Obj ->"注册码校验成功!    < ========= 注册成功信息
感谢您对我们工作的支持."
                                  |
:0040386D 68A8024100              push 004102A8

* Reference To: MFC42.Ordinal:04B0, Ord:04B0h
                                  |
:00403872 E8A9550000              Call 00408E20
:00403877 C705BC07410083FFFFFF    mov dword ptr [004107BC], FFFFFF83

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

* Reference To: MFC42.Ordinal:0490, Ord:0490h
                                  |
:00403881 E828550000              Call 00408DAE
:00403886 8B4004                  mov eax, dword ptr [eax+04]

* Possible StringData Ref from Data Obj ->"程式猎人  版本 1.27- 兄弟制作组 "  < ========= 软件作者有没有搞错啊,
                                        ->"荣誉出品"                                      明明是 1.30 版了!
                                  |
:00403889 687C024100              push 0041027C
:0040388E 8B4820                  mov ecx, dword ptr [eax+20]

* Reference To: MFC42.Ordinal:1837, Ord:1837h
                                  |
:00403891 E8D2550000              Call 00408E68
:00403896 EB61                    jmp 004038F9

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0040383B(C), :00403842(C), :00403869(C)        < ========= 从几个地方跳过来的,往上看
|

* Possible StringData Ref from Data Obj ->"guest"
                                  |
:00403898 6874024100              push 00410274
:0040389D FFB6A0000000            push dword ptr [esi+000000A0]

* Reference To: MSVCRT.strcmp, Ord:02B8h
                                  |
:004038A3 E84E5B0000              Call 004093F6
:004038A8 59                      pop ecx
:004038A9 85C0                    test eax, eax
:004038AB 59                      pop ecx
:004038AC 7535                    jne 004038E3
:004038AE 8B86A4000000            mov eax, dword ptr [esi+000000A4]
:004038B4 25FF0F0000              and eax, 00000FFF
:004038B9 3DB5040000              cmp eax, 000004B5
:004038BE 7523                    jne 004038E3
:004038C0 53                      push ebx
:004038C1 53                      push ebx

* Possible StringData Ref from Data Obj ->"注册码校验成功!    < ========= 在这里出错,慢慢往上看
这个注册码有日期限制,请您注意"
                                        ->"及时更换."
                                  |
:004038C2 683C024100              push 0041023C


此时改完,任意输入注册码,显示“注册码校验成功!感谢您对我们工作的支持.”。且帮助菜单下的“注册”项变灰色,未注册版本不能添加六个以上的程序组的限制也没有了,不过为了以防万一,干脆把会出现“不能添加六个以上的程序组”的地方也砍掉吧~

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00401E48(U)
|
:00401E32 85F6                    test esi, esi      < ========= 对比
:00401E34 7414                    je 00401E4A        < ========= 跳则弹出提示,改为 jne 00401E4A 即可
:00401E36 8BC6                    mov eax, esi
:00401E38 8B36                    mov esi, dword ptr [esi]
:00401E3A 83C008                  add eax, 00000008
:00401E3D B9B8084100              mov ecx, 004108B8
:00401E42 50                      push eax
:00401E43 E86A020000              call 004020B2
:00401E48 EBE8                    jmp 00401E32

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00401E34(C)          < ========= 从这里跳过来的,继续往上找
|
:00401E4A B998084100              mov ecx, 00410898
:00401E4F E8A3020000              call 004020F7
:00401E54 8BCF                    mov ecx, edi
:00401E56 E852FCFFFF              call 00401AAD
:00401E5B 5F                      pop edi
:00401E5C 5E                      pop esi
:00401E5D C3                      ret


:00401E5E B8B4994000              mov eax, 004099B4

* Reference To: MSVCRT._EH_prolog, Ord:0042h
                                  |
:00401E63 E888750000              Call 004093F0
:00401E68 83EC28                  sub esp, 00000028
:00401E6B 53                      push ebx
:00401E6C 56                      push esi
:00401E6D 57                      push edi
:00401E6E 8BF9                    mov edi, ecx
:00401E70 6A01                    push 00000001

* Reference To: MFC42.Ordinal:18BE, Ord:18BEh
                                  |
:00401E72 E8076F0000              Call 00408D7E
:00401E77 8DB7E0000000            lea esi, dword ptr [edi+000000E0]
:00401E7D 68B8074100              push 004107B8
:00401E82 FF36                    push dword ptr [esi]

* Reference To: MSVCRT.strcmp, Ord:02B8h
                                  |
:00401E84 E86D750000              Call 004093F6
:00401E89 33DB                    xor ebx, ebx
:00401E8B 59                      pop ecx
:00401E8C 3BC3                    cmp eax, ebx
:00401E8E 59                      pop ecx
:00401E8F 0F84D5000000            je 00401F6A
:00401E95 A1BC074100              mov eax, dword ptr [004107BC]
:00401E9A 83F883                  cmp eax, FFFFFF83
:00401E9D 7428                    je 00401EC7
:00401E9F 83F882                  cmp eax, FFFFFF82
:00401EA2 7423                    je 00401EC7
:00401EA4 A1C4084100              mov eax, dword ptr [004108C4]
:00401EA9 8B0DA4084100            mov ecx, dword ptr [004108A4]
:00401EAF 03C8                    add ecx, eax
:00401EB1 83F906                  cmp ecx, 00000006
:00401EB4 7C11                    jl 00401EC7
:00401EB6 53                      push ebx
:00401EB7 53                      push ebx

* Possible StringData Ref from Data Obj ->"对不起,您正在使用的《程式猎人》属于未注册版。"  < ======= 是这里了
                                        ->"                                                        往上找
您只有在注册后,才能添加六个以上的程序组。
为"
                                        ->"支持国产软件,请您合作。

要了解详细情况,请参"
                                        ->"阅帮助。"
                                  |
:00401EB8 6890004100              push 00410090



OK~到此全部搞定,随意输入注册码即可注册成功,完整的解除了未注册版本的限制。整理一下,修改的相应的offset为:

          原版    破解
001E34:      74      75
00383B:      76      90
00383C:      5B      90
003842:      73      90
003843:      54      90
003869:      75      90
00386A:      2D      90
0038AC:      75      74
0038BE:      75      74



                                              炎之川 于 2001.10.25
                                              欢迎访问汉化新世纪: http://www.hanzify.org