PUZZLER1.20破解過程 (4千字)

看雪資料發表於2002-01-26

PUZZLER1.20,這個東西,朋友借我的光碟裡找到的。我比較喜歡玩魔方,但我的那個魔方丟了,現在可以在電腦上玩,呵呵。
安裝完後,發現這個東西確實不錯,不僅有傳統的魔方,還有好多變種,不過一點,它就跳出來說,要註冊才能用。
工具:TRW,W32DASM
點ABOUT,點REGIST,跳出一個視窗,叫你輸使用者名稱,輸入“波導終結者”,點OK,再跳出來一個
視窗,叫你輸註冊碼,註冊碼不正確沒有提示。使用者名稱和註冊碼分兩個視窗輸,這種形式,我還
是第一次見到。不要緊,我們用W32DASM反匯譯PUZZLER.EXE,查詢REGIST,第一次,找到彈出來
說不註冊不能用的視窗,我們要的不是暴破,再找一次,找到下面。
:0040D39E 68A06B4100              push 00416BA0
:0040D3A3 8BCD                    mov ecx, ebp
* Reference To: UFC.??4CUString@@QAEAAV0@PBD@Z, Ord:0044h
                                  |
:0041902A FF1538C34100            Call dword ptr [0041C338]
:00419030 8B5C2448                mov ebx, dword ptr [esp+48]
:00419034 85DB                    test ebx, ebx
:00419036 741C                    je 00419054
:00419038 8BCE                    mov ecx, esi

* Reference To: UFC.?AddUpASCII@CUString@@QAEKXZ, Ord:00D3h
                                  |
:0041903A FF154CC34100            Call dword ptr [0041C34C]
:00419040 8BC8                    mov ecx, eax
:00419042 C1E108                  shl ecx, 08
:00419045 03C8                    add ecx, eax
:00419047 8D14C8                  lea edx, dword ptr [eax+8*ecx]
:0041904A 8D0450                  lea eax, dword ptr [eax+2*edx]
:0041904D 8D0440                  lea eax, dword ptr [eax+2*eax]
:00419050 3BD8                    cmp ebx, eax
:00419052 740D                    je 00419061
④這裡又是最近的一個跳轉,看看cmp ebx, eax,很可能就是比較。在這裡下斷,d eax,看見數值FF950188,再看ebx,是3B1AE。把使用者名稱和假註冊碼都換掉,再看eax 和ebx的數值,都發生了變化!把使用者名稱和註冊碼都換成1,看見eax為一個大數(我沒記下來,歹勢),看見ebx為1。再把使用者名稱和註冊碼換為2,看見eax變化了,ebx為2。

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00419036(C)
|
:00419054 6828474200              push 00424728
:00419059 8BCE                    mov ecx, esi

* Reference To: UFC.??4CUString@@QAEAAV0@PAD@Z, Ord:0043h
                                  |
:0041905B FF156CC34100            Call dword ptr [0041C36C]

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00419052(C)
|
:00419061 8BCE                    mov ecx, esi

* Reference To: UFC.?GetLength@CUString@@QBEHXZ, Ord:012Ch
                                  |
:00419063 FF1584C34100            Call dword ptr [0041C384]
:00419069 85C0                    test eax, eax
:0041906B 7419                    je 00419086     
③於是在這個地方下斷點,走到這裡,看看暫存器內容,有一些數值,可能是註冊碼和使用者名稱的變形,記下來。r fl z,之後,看看變化,軟體主介面已經變成了“This copy of Puzzler is registered to:”但是,我們的使用者名稱呢?再進入遊戲,還是不能玩。把輸的假使用者名稱和註冊碼都換掉,看看這裡暫存器的數值,還都一樣!由此可見,這個跳轉,只是把使用者名稱賦給這個字串後面,但是為什麼看不見使用者名稱呢?很可能是註冊碼不正確,使用者名稱根本沒帶到這個地方,於是,我們再向上看。
:0041906D 8B0E                    mov ecx, dword ptr [esi]
:0041906F 81C78C010000            add edi, 0000018C
:00419075 51                      push ecx

* Possible StringData Ref from Data Obj ->"This copy of Puzzler is registered "
                                        ->"to:

%s"
②這一行意思就是說,這個軟體已經註冊給了XXX,由此往上看,上面的那個跳轉很可能就是比較註冊碼。
                                  |
:00419076 68303D4200              push 00423D30
:0041907B 57                      push edi

* Reference To: MFC42.Ordinal:0B02, Ord:0B02h
                                  |
:0041907C E867030000              Call 004193E8
:00419081 83C40C                  add esp, 0000000C
:00419084 EB14                    jmp 0041909A

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041906B(C)
|
:00419086 81C78C010000            add edi, 0000018C

* Possible StringData Ref from Data Obj ->"Thank you for trying Puzzler!

Press "
                                        ->"F1 for help at any time"
①如果沒註冊的話是顯示這行內容,而註冊後則顯示處內容。
                                  |
:0041908C 68F03C4200              push 00423CF0
:00419091 57                      push edi
⑤由此可見,程式在0041903A Call dword ptr [0041C34C]一行,把註冊名透過一系列運算,得到一個值,放到00419050  cmp ebx, eax的eax裡,ebx為註冊的十六進位制數值,進行比較。我們在00419050  cmp ebx一行,d eax,把數值記下來,換成十進位制數,當做註冊碼輸入,註冊成功!
波導終結者[BCG][CNCG]

相關文章