• 标 题:财智家庭理财2001注册方法 (8千字)
  • 作 者:hsFang
  • 时 间:2001-2-10 2:36:05
  • 链 接:http://bbs.pediy.com

Crack MoneyHome 之笔记
    我很喜欢财智家庭理财这个软件,在网上下了它的最新版v3.10 注册版,我
还以为是已注册版,没想到是要注册版,下载的几个注册机都不支持这个最新版。
一打开它,便跳出注册窗口,提示你“本软件是付费注册软件,注册费50元,免
费试用期45天,您还可使用XX天”,虽然可以按“稍后注册”进入主界面,但这
样多烦呀。而且,如果超过45天后,按“稍后注册”就会退出程序。其实这个软
件也够好心的啦,它还提示你如何延期使用:“可将您的计算机系统时间调整到
软件安装起的45日内”。不过,这是个财会软件哪,乱改时间怎么能用来记账???
左思右想,还是自己动手把它Crack 掉算了。拿着TRW2000 和W32DSM两把利刃,
还有UltraEdit 这把宝刀,花了两天的功夫(我第一次破解软件,当然是会比较
慢,不过也太慢了吧??),终于完成了。现整理如下:
    这些是判断注册成功与否的关键代码:
  ===============================================================================
:00515AFF E854F8FFFF              call 00515358    执行一个判断,返回al的值
:00515B04 84C0                    test al, al      ---->al=1 则正确,al=0 则错误
:00515B06 744F                    je 00515B57      ----->al=1则不跳,al=0 则跳到错误处理
:00515B08 A170A86000              mov eax, dword ptr [0060A870]          |
:00515B0D 8B00                    mov eax, dword ptr [eax]              | 正
:00515B0F 8B55FC                  mov edx, dword ptr [ebp-04]            |
:00515B12 E81183FAFF              call 004BDE28                          | 确
:00515B17 6A00                    push 00000000                          |
:00515B19 668B0DA45B5100          mov cx, word ptr [00515BA4]            | 时
:00515B20 B202                    mov dl, 02                              |
:00515B22 B8B05B5100              mov eax, 00515BB0                      | 的
:00515B27 E8B895F4FF              call 0045F0E4                          |
:00515B2C 8D832C030000            lea eax, dword ptr [ebx+0000032C]      | 流
:00515B32 8B55FC                  mov edx, dword ptr [ebp-04]            |
:00515B35 E8D6E4EEFF              call 00404010                          | 程
:00515B3A 8BC3                    mov eax, ebx                            |
:00515B3C E823FCFFFF              call 00515764                          |
:00515B41 C783300300000F270000    mov dword ptr [ebx+00000330], 0000270F  |
:00515B4B C7833402000001000000    mov dword ptr [ebx+00000234], 00000001  |
:00515B55 EB2A                    jmp 00515B81                            |--->避开错误处理
                                                                            跳到公共的结尾
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00515B06(C)
:00515B57 6A00                    push 00000000                          *
:00515B59 668B0DA45B5100          mov cx, word ptr [00515BA4]            *  错
:00515B60 B201                    mov dl, 01                              *
:00515B62 B8CC5B5100              mov eax, 00515BCC                      *  误
:00515B67 E87895F4FF              call 0045F0E4                          *
:00515B6C 8B93F4020000            mov edx, dword ptr [ebx+000002F4]      *  处
:00515B72 8BC3                    mov eax, ebx                            *
:00515B74 E8FFBBF3FF              call 00451778                          *  理
:00515B79 33C0                    xor eax, eax                            *
:00515B7B 898334020000            mov dword ptr [ebx+00000234], eax      *
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00515AE8(C), :00515B55(U)
:00515B81 33C0                    xor eax, eax              >>>>>>公共的结尾部分
:00515B83 5A                      pop edx
:00515B84 59                      pop ecx
:00515B85 59                      pop ecx
:00515B86 648910                  mov dword ptr fs:[eax], edx
/////////////////////// CALL 515358  START /////////////////////////////
* Referenced by a CALL at Addresses:
|:005157E0  , :00515AFF  , :00515C24 
:00515358 55                      push ebp
:00515359 8BEC                    mov ebp, esp
:0051535B 6A00                    push 00000000
:0051535D 6A00                    push 00000000
:0051535F 6A00                    push 00000000
:00515361 53                      push ebx
:00515362 8945FC                  mov dword ptr [ebp-04], eax
:00515365 8B45FC                  mov eax, dword ptr [ebp-04]
:00515368 E883F0EEFF              call 004043F0
:0051536D 33C0                    xor eax, eax
:0051536F 55                      push ebp
:00515370 68CD535100              push 005153CD
:00515375 64FF30                  push dword ptr fs:[eax]
:00515378 648920                  mov dword ptr fs:[eax], esp
:0051537B 8D45F4                  lea eax, dword ptr [ebp-0C]
:0051537E E831FFFFFF              call 005152B4
:00515383 8B45F4                  mov eax, dword ptr [ebp-0C]
:00515386 8D55F8                  lea edx, dword ptr [ebp-08]
:00515389 E846FFFFFF              call 005152D4
:0051538E 8B45F8                  mov eax, dword ptr [ebp-08]
:00515391 E8FAFCFFFF              call 00515090        ---->  此处d eax 可看到 真正的注册码
:00515396 8BD8                    mov ebx, eax        ----> 结果eax=27897,并把结果存入ebx
:00515398 8B45FC                  mov eax, dword ptr [ebp-04]
:0051539B E8F0FCFFFF              call 00515090        ----> 此处d eax 可看到 你输入的注册码
:005153A0 85C0                    test eax, eax        ---->错误时 eax=0, 正确时eax=27897
:005153A2 7504                    jne 005153A8        --->错误时不跳,Eax>0时跳走。
:005153A4 33DB                    xor ebx, ebx        --->出错了!!! 将ebx清零!!!
:005153A6 EB0A                    jmp 005153B2        ---->跳到公共的结尾
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:005153A2(C)
:005153A8 3BC3                    cmp eax, ebx        ---->eax与Ebx比较,相等则为正确
:005153AA 7504                    jne 005153B0        ---->不相等就跳走。
:005153AC B301                    mov bl, 01          ---->把ebx的低位置为01
:005153AE EB02                    jmp 005153B2        ---->直接跳到公共的结尾5153b2,(ebx 不清零)
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:005153AA(C)
:005153B0 33DB                    xor ebx, ebx      ----->出错了就来到这里将ebx清零!!!
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:005153A6(U), :005153AE(U)
:005153B2 33C0                    xor eax, eax
:005153B4 5A                      pop edx
:005153B5 59                      pop ecx
:005153B6 59                      pop ecx
:005153B7 648910                  mov dword ptr fs:[eax], edx
:005153BA 68D4535100              push 005153D4
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:005153D2(U)
:005153BF 8D45F4                  lea eax, dword ptr [ebp-0C]
:005153C2 BA03000000              mov edx, 00000003
:005153C7 E814ECEEFF              call 00403FE0
:005153CC C3                      ret
:005153CD E966E6EEFF              jmp 00403A38
:005153D2 EBEB                    jmp 005153BF
:005153D4 8BC3                    mov eax, ebx
:005153D6 5B                      pop ebx
:005153D7 8BE5                    mov esp, ebp
:005153D9 5D                      pop ebp
:005153DA C3                      ret          ----------->回到00515B04,结束这个CALL
/////////////////////////////CALL 00515358 END /////////////////////
    注意到CALL00515358里的流程为先用正确的注册码做运算,得到eax 的值,
并存入ebx 内。再用输入的注册码做运算,得到eax 的值,第一个判断 eax=0???
等于0 则为错误,出错后就把ebx 清零。第二个判断 eax=ebx???不等于则为
错误,出错后就把ebx 清零。相等则为正确,并把ebx 的低位置为01可见:005153A4
33DB xor ebx, ebx和:005153A6 EB0A jmp 005153B2这两句在正确时不用,可
以把它改为自己想要的语句。考虑到下一句语句就是比较 eax和ebx 的值:005153A8
3BC3 cmp eax, ebx所以把这两句改为:005153A4 33DB (改为8BC3) xor ebx
ebx 改为 mov eax,ebx ——> 把Ebx 的值赋给eax :005153A6 EB0A (改为9090)
即把jmp 005153B2改为 nop | ____\ 把这句给空掉
                    nop |    / 如果第一个判断的结果为
正确,则走正确的流程,如果不正确,则把ebx 的值赋给eax.这样一来,不管第
一个判断的结果是否正确,流程都要到比较eax 和ebx 是否相等这一句。而且由
于ebx 的值赋给了eax ,这样eax 恒等于ebx ,第二个判断的结果总为正确。于
是无论你输入的注册码是否正确,程序都将判断它是正确的。结果就是注册成功!!!!
呵呵呵:- )
    分析完毕,做最后的工作,用ultraEdit 或winHex把MoneyHome.exe 打开,
查找十六进制串“85 C0 75 04 55 DB EB 0A 3B C3 75 04 ”改为:“85C0 75
04 8B C3 90 90 3B C3 75 04”运行修改后的程序,天,直接进入了主界面,都
不显示注册窗口。点“帮助”——> “注册财智家庭理财”显示“你已经是注册
用户。”但“注册码:”一栏是空的,而且还有“稍后注册”的按钮。随便填入
一个注册码,按“完成注册”,提示“祝贺你!注册成功”。再点“帮助”——
> “注册财智家庭理财”显示“你已经是注册用户。”且“注册码:”一栏为你
刚输入的字符,而且“稍后注册”的按钮已消失。如不输入注册码而直接按“完
成注册”,也会提示“祝贺你!注册成功”。但注册窗口还是维持原样。
    OK!大功告成,打个Kiss!!! #@@^^#@@#^^……呵呵呵……:- )
                                    方恨少写于2001.1.31 凌晨4 点整