“打字高手”5.31版的破解

最近脑袋突然抽筋,想学五笔打字(注:其实我的拼音也打得不错啊,用紫光拼音双拼输入法能达到100字/分钟呢)。于是从网上down了一个叫做“打字高手——文录鉴定考核系统”5.31版的软件下来,用起来还不错,就是窗口标题栏上老是出现“文录鉴定考核系统 【未注册版本】”的字样,虽说不影响使用,但是看起来就是非常的不爽!

遇到这种情况,我等穷人首先想到的不是给作者寄钱(乖乖,要20大洋呢!!!),而是“自力更生,丰衣足食”,将它“变”成注册版本。(读者:这、这不是犯罪吗?)

好了,废话少说,开始工作!让我们祭出传说中的Cracker的先锋精锐武器——W32DASM黄金版(这个版本可以显示出中文字符串)!当当当当~~~反汇编中,我等啊等……脖子都长了,还没行???先去喝杯茶……呼~~~终于OK了,好,让我们看看有什么好东西。

首先运行“打字高手”,在“帮助->软件注册”中输入:

输入个人或单位名称:laoluo
软件序列号:729051221(这个是软件自动生成的,不是我输入的)
输入注册码:123456789(为什么是9个数字?呵呵,等一会你就知道了)

按下“注册”按钮,立即弹出“注册码输入错误!请重新输入!”,很好,尾巴被我抓住了。

回到W32DASM,按下“string reference”按钮,找到“注册码输入错误!请重新输入!”的字样,双击它,来到这里:

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:006F2B3F(C)
|
:006F2B6F 64FF30                  push dword ptr fs:[eax]
:006F2B72 648920                  mov dword ptr fs:[eax], esp
:006F2B75 8D55F0                  lea edx, dword ptr [ebp-10]
:006F2B78 8B83E4020000            mov eax, dword ptr [ebx+000002E4]
:006F2B7E E8593CF4FF              call 006367DC
:006F2B83 8B45F0                  mov eax, dword ptr [ebp-10]
:006F2B86 E8DD15F1FF              call 00604168
:006F2B8B 83F809                  cmp eax, 00000009     <-对比输入的注册码,不等于9位数的话就game over了,所以前面要输入9位数的注册码。
:006F2B8E 741D                    je 006F2BAD

* Possible StringData Ref from Code Obj ->"注册码输入错误!请重新输入!"
                                  |
:006F2B90 B8742E6F00              mov eax, 006F2E74
:006F2B95 E87EA1F6FF              call 0065CD18
:006F2B9A 8B83E4020000            mov eax, dword ptr [ebx+000002E4]
:006F2BA0 8B10                    mov edx, dword ptr [eax]
:006F2BA2 FF92B0000000            call dword ptr [edx+000000B0]
:006F2BA8 E96B020000              jmp 006F2E18

再次双击“注册码输入错误!请重新输入!”的字样,来到另外一个地方:

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

* Possible StringData Ref from Code Obj ->"注册码输入错误!请重新输入!"
                                  |
:006F2E00 B8742E6F00              mov eax, 006F2E74
:006F2E05 E80E9FF6FF              call 0065CD18
:006F2E0A 8B83E4020000            mov eax, dword ptr [ebx+000002E4]
:006F2E10 8B10                    mov edx, dword ptr [eax]
:006F2E12 FF92B0000000            call dword ptr [edx+000000B0]

这里就是真正的对比注册码的地方了,看看上面入口处有个地址006F2D48,说明这里是由这个地址调用的,于是按下Shift+F12(location to),输入006F2D48,来到这里:

:006F2D43 E83015F1FF              call 00604278
:006F2D48 0F85B2000000            jne 006F2E00    <-找到了,就是它!

看到这个jne 006F2E00了吗?就是它跳到了“注册码输入错误!请重新输入!”的地方,再看看上面有什么代码吧!

结果发现,一大堆call和jne、je、jmp……好恐怖!头都晕了,算了,懒得算出真正的注册码,直接用hiew暴力破解吧!

在hiew里把jne 006F2E00改为je 006F2E00,存盘、退出,再次运行“打字高手”,随便输入一个什么注册码,哈哈,OK,显示“注册操作完成,重新启动本系统,如果个人或单位名称显示在标题栏上,则为注册成功,否则请重新输入注册码”,我faint!居然还留有一手!

重启之后,标题栏果然还有“【未注册版本】”的字样,看来还有别的地方有验证代码!

打开W32DASM再次反汇编,在“search”里面输入“文录鉴定考核系统”,找到这个地方:

* Possible StringData Ref from Code Obj ->"]        文录鉴定考核系统[已授权给 "
                                  |
:0075C99A 6850CC7500              push 0075CC50
:0075C99F 8D8568FEFFFF            lea eax, dword ptr [ebp+FFFFFE68]
:0075C9A5 8B15C0D37700            mov edx, dword ptr [0077D3C0]
:0075C9AB E85C77EAFF              call 0060410C
:0075C9B0 FFB568FEFFFF            push dword ptr [ebp+FFFFFE68]

* Possible StringData Ref from Code Obj ->" 专用]"
                                  |
:0075C9B6 6880CC7500              push 0075CC80
:0075C9BB 8D856CFEFFFF            lea eax, dword ptr [ebp+FFFFFE6C]
:0075C9C1 BA05000000              mov edx, 00000005
:0075C9C6 E85D78EAFF              call 00604228
:0075C9CB 8B956CFEFFFF            mov edx, dword ptr [ebp+FFFFFE6C]
:0075C9D1 A1BCD57700              mov eax, dword ptr [0077D5BC]
:0075C9D6 8B00                    mov eax, dword ptr [eax]
:0075C9D8 E82F9EEDFF              call 0063680C
:0075C9DD EB6A                    jmp 0075CA49

看来离胜利不远了,再看看在这些代码的上面还有些什么代码:

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0075C954(U)
|
:0075C960 8D9570FEFFFF            lea edx, dword ptr [ebp+FFFFFE70]
:0075C966 8B45FC                  mov eax, dword ptr [ebp-04]
:0075C969 8B80D0020000            mov eax, dword ptr [eax+000002D0]
:0075C96F E8689EEDFF              call 006367DC
:0075C974 8B9570FEFFFF            mov edx, dword ptr [ebp+FFFFFE70]
:0075C97A A140D37700              mov eax, dword ptr [0077D340]
:0075C97F E8B875EAFF              call 00603F3C
:0075C984 A1ACD07700              mov eax, dword ptr [0077D0AC]
:0075C989 803800                  cmp byte ptr [eax], 00
:0075C98C 7451                    je 0075C9DF    <-很眼熟吧?

这个je 0075C9DF很可疑……,跳进去看看:

* Possible StringData Ref from Code Obj ->"打字高手---["
                                  |
:0075C9DF 6838CC7500              push 0075CC38
:0075C9E4 A140D37700              mov eax, dword ptr [0077D340]
:0075C9E9 FF30                    push dword ptr [eax]

* Possible StringData Ref from Code Obj ->"]        文录鉴定考核系统 ["
                                  |
:0075C9EB 6890CC7500              push 0075CC90
:0075C9F0 68B8CC7500              push 0075CCB8
:0075C9F5 68C4CC7500              push 0075CCC4
:0075C9FA 68D0CC7500              push 0075CCD0
:0075C9FF 68DCCC7500              push 0075CCDC
:0075CA04 68E8CC7500              push 0075CCE8
:0075CA09 68F4CC7500              push 0075CCF4
:0075CA0E 6800CD7500              push 0075CD00
:0075CA13 680CCD7500              push 0075CD0C
:0075CA18 6818CD7500              push 0075CD18
:0075CA1D 6824CD7500              push 0075CD24
:0075CA22 6830CD7500              push 0075CD30
:0075CA27 8D8564FEFFFF            lea eax, dword ptr [ebp+FFFFFE64]
:0075CA2D BA0E000000              mov edx, 0000000E
:0075CA32 E8F177EAFF              call 00604228
:0075CA37 8B9564FEFFFF            mov edx, dword ptr [ebp+FFFFFE64]
:0075CA3D A1BCD57700              mov eax, dword ptr [0077D5BC]
:0075CA42 8B00                    mov eax, dword ptr [eax]
:0075CA44 E8C39DEDFF              call 0063680C

原来这个0075C9DF就是调用显示“【未注册版本】”的地方,很明显,只要把那个je 0075C9DF改为jne 0075C9DF就行了!

哈哈,果然不出所料!用hiew改了之后,再次运行“打字高手”,果然标题栏已经变为“文录鉴定考核系统 - 已授权给 laoluo 专用”。(专用?呵呵,我喜欢这个名词)

接下来还有很多个调用“【未注册版本】”的地方,只好耐心点一一把它们改过来了,没办法,鬼叫你穷啊?……重复劳动中……累!!

总结一下:现在很多软件都是输入完注册码之后,还要重启来验证一下,而且在程序的多处地方还有不同的验证代码,在这种情况下,Cracker只好耐心点一一把它们修改过来,不过幸好都是重复劳动而已,只需要体力,呵呵……

使用软件:W32DASM 8.93黄金版、hiew 6.55
破解耗时:20分钟
写教程耗时:1个小时10分钟(排版好辛苦啊……)

老罗
2002.1.3.