登錄檔醫生(Registry Medic Version 2.43)破解記錄

看雪資料發表於2003-07-25

登錄檔醫生(Registry Medic Version 2.43)破解記錄
我是一個菜鳥,因為前段時間下了一個檔案恢復的共享軟體FileScav.exe 只能恢復32K 的檔案而在網上找了很久沒有找到破解。所以想開始接觸到軟體破解。
真心的感謝看雪老師領我入門,我是用java開發軟體的,關於C,C++,VB,彙編的知識少得可憐,想想看雪老師為我們這些後輩做了這麼多。我想把自己第一次成功破解的經過寫下來,為後來之後來者做點微不足道的事吧。由於水平實在不好說,不對之處請高手指正。
因為我的softICE始終不能捕獲斷點,我用的是windows server2003,象這樣的 bpx hmemcpy ,bpx getdlgitemtexta ,一點用都沒有,不知道為何,還請高手指點。

先用Language 2000查過了,它沒有被加殼,真是太方便。
用w32dsm開啟Registry Medic,用出錯資訊“Registration failed. Please try again”,分析出關鍵的語句如下:
|:004DD4CC(C)
|
:004DD533 8B45F8                  mov eax, dword ptr [ebp-08]
:004DD536 E8A16BF2FF              call 004040DC
:004DD53B 33C0                    xor eax, eax
:004DD53D 55                      push ebp
:004DD53E 689ED64D00              push 004DD69E
:004DD543 64FF30                  push dword ptr fs:[eax]
:004DD546 648920                  mov dword ptr fs:[eax], esp
:004DD549 E8E6ECFAFF              call 0048C234
:004DD54E 8D55F4                  lea edx, dword ptr [ebp-0C]
:004DD551 8B45FC                  mov eax, dword ptr [ebp-04]
:004DD554 E8F7B3F2FF              call 00408950
:004DD559 8D55F0                  lea edx, dword ptr [ebp-10]
:004DD55C 8B45F8                  mov eax, dword ptr [ebp-08]
:004DD55F E8ECB3F2FF              call 00408950
:004DD564 8B45F4                  mov eax, dword ptr [ebp-0C]
:004DD567 E8BC69F2FF              call 00403F28
:004DD56C 83F806                  cmp eax, 00000006
:004DD56F 0F8CDF000000            jl 004DD654
:004DD575 8B45F8                  mov eax, dword ptr [ebp-08]
:004DD578 E8AB69F2FF              call 00403F28          ------à關鍵比較子程式(進入進去,原來是看你有沒有輸入註冊碼
-即是說你如果沒有輸入任何一字,就會出錯了,J)
:004DD57D 83F821                  cmp eax, 00000021      ------à關鍵比較1
:004DD580 7C0C                    jl 004DD58E            ------à @offset 000DC980h
:004DD582 8B45FC                  mov eax, dword ptr [ebp-04]      DDD>這裡把我用的任意使用者名稱aaaaaaaaa放進去下一步要幹什麼呢?
:004DD585 E8BA0A0000              call 004DE044
:004DD58A 84C0                    test al, al
:004DD58C 7445                    je 004DD5D3

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004DD580(C)
|
:004DD58E 8D45EC                  lea eax, dword ptr [ebp-14]

* Possible StringData Ref from Code Obj ->"Registration failed. Please try "
                                       ->"again!"
                                 |
:004DD591 BAB4D64D00              mov edx, 004DD6B4
:004DD596 E8A567F2FF              call 00403D40
:004DD59B 6A30                    push 00000030
:004DD59D 8D55E8                  lea edx, dword ptr [ebp-18]
:004DD5A0 A1D4794F00              mov eax, dword ptr [004F79D4]
:004DD5A5 8B00                    mov eax, dword ptr [eax]
:004DD5A7 E8D80EF7FF              call 0044E484
:004DD5AC 8B45E8                  mov eax, dword ptr [ebp-18]
:004DD5AF E8386BF2FF              call 004040EC
:004DD5B4 50                      push eax
:004DD5B5 8B45EC                  mov eax, dword ptr [ebp-14]
:004DD5B8 E82F6BF2FF              call 004040EC
:004DD5BD 50                      push eax
:004DD5BE A1D4794F00              mov eax, dword ptr [004F79D4]
:004DD5C3 8B00                    mov eax, dword ptr [eax]
:004DD5C5 8B4024                  mov eax, dword ptr [eax+24]
:004DD5C8 50                      push eax

* Reference To: user32.MessageBoxA, Ord:0000h
                                 |
:004DD5C9 E8CA9DF2FF              Call 00407398
:004DD5CE E9B0000000              jmp 004DD683

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004DD58C(C)
|
:004DD5D3 8B55F8                  mov edx, dword ptr [ebp-08]    DDD>放入我輸入的假註冊碼:char[033]:"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
:004DD5D6 8B45F4                  mov eax, dword ptr [ebp-0C]    DDD>放入我輸入的假註冊號:char[009]:"aaaaaaaaa"
:004DD5D9 E81EE3FAFF              call 0048B8FC   ------à進去一看原來是寫登錄檔。oftWare\Classes\CLSID\{B087CE89-A8EE-4890-91E7-696B3F749500}
值:11C806F5B6245C4FE380-DA5118195B3FDB12D582-0BEE6E218D1D4D95C7-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
:004DD5DE E851EEFAFF              call 0048C434   ------à關鍵比較子程式我沒有去細看。想應是比較註冊碼了。
:004DD5E3 A1D4774F00              mov eax, dword ptr [004F77D4]
:004DD5E8 803800                  cmp byte ptr [eax], 00   ------à關鍵比較2
:004DD5EB 7425                    je 004DD612             ------à @offset 000DC9EBh
:004DD5ED A158784F00              mov eax, dword ptr [004F7858]
:004DD5F2 833800                  cmp dword ptr [eax], 00000000   ------à關鍵比較3
:004DD5F5 740C                    je 004DD603             ------à @offset 000DC9F5h
:004DD5F7 A158784F00              mov eax, dword ptr [004F7858]
:004DD5FC 8B00                    mov eax, dword ptr [eax]
:004DD5FE E8D5D6FFFF              call 004DACD8

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004DD5F5(C)
|
:004DD603 8D45EC                  lea eax, dword ptr [ebp-14]

* Possible StringData Ref from Code Obj ->"Thank you for registering Registry "
                                       ->"Medic."        ---------------->這是成功的標誌!
                                 |
:004DD606 BAE4D64D00              mov edx, 004DD6E4
:004DD60B E83067F2FF              call 00403D40
:004DD610 EB0D                    jmp 004DD61F

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004DD5EB(C)
|
:004DD612 8D45EC                  lea eax, dword ptr [ebp-14]

* Possible StringData Ref from Code Obj ->"Registration failed. Please try "
                                       ->"again!"      -------------------à這句關鍵的話出現了兩次!難道有兩個地方比較?
                                 |
:004DD615 BAB4D64D00              mov edx, 004DD6B4
:004DD61A E82167F2FF              call 00403D40


根據以上分析,先爆碼吧,在
:004DD5EB 7425                    je 004DD612             ------à @offset 000DC9EBh
用hiew 找到 DC9EB 處,你一定知道改為 7525,我沒有試,我在這裡是改為740C.為什麼也可以?你看到上面這句以下不遠的這句了吧:這是跳到註冊成功的地方。
:004DD5F5 740C                    je 004DD603             ------à @offset 000DC9F5h
這是說我這種改法是讓註冊碼寫得不對就跳到註冊成功的地方去。
看來應該收工了!執行來試試。隨便輸入一下注冊碼。沒有任何訊息就退出了(這裡注意,如果不用我這種改法,如果將7425改為9090,或者7525是會出一個註冊成功的對話方塊的)。下次再啟動,依然要求註冊。怎麼回事?
我想到它剛才的登錄檔裡寫了資訊,並且把我寫的任意非正確的註冊碼寫進去了,是不是有關呢,我先再註冊一次,成功後不急著執行Registry Medic,先試著把找到登錄檔中B087CE89-A8EE-4890-91E7-696B3F749500項。把其中AppIdK值:11C806F5B6245C4FE380-DA5118195B3FDB12D582-0BEE6E218D1D4D95C7-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA,刪除了,現在才執行Registry Medic,呵呵,你猜怎麼著,成功了,沒有出現那個註冊框了。
呵呵,看來,作者怕被破解先在登錄檔上寫上你的註冊資訊了,啟動時會先去找出來和正確的註冊碼比較,如果不對,還是會向你要正確的註冊碼的。


相關文章