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]