軟體名稱:HotkeyMaster
下載地址:http://www.core-project.com/hotkeymaster/HotkeyMaster.exe
軟體介紹:如軟體名.今天在ROR論壇看到有網友原創了該軟體的使用教程,喈軟體如痴的我自然不肯放過.下載回來後發現確實順手,可需要註冊----不爽.
使用工具:FI,W32DASM,OllyDbg
破解過程:
1.使用FI檢視軟體是否加殼和所使用的程式語言
2.萬幸,軟體並未加殼
3.執行W32DASM,查詢軟體註冊失敗後提示的出錯資訊.
啟動OllyDbg,F3載入Hotkey
Master.利用我們在W32DASM中分析找到的關鍵CALL-004144C1設斷.
或者點選滑鼠右鍵"Search for"->"All referenced
text strings"查詢"The key you entered is not
correct."向上查詢同樣可以找到斷點
:004144C1 E83FE7FFFF
call 00412C05
----嗯,就是你了!!!進入分析!!
:004144C6 83C410
add esp, 00000010
:004144C9 3BC7
cmp eax, edi
:004144CB 7545
jne 00414512
:004144CD 8D85E0FEFFFF
lea eax, dword ptr [ebp+FFFFFEE0]
:004144D3 50
push eax
:004144D4 FF35949E4200
push dword ptr [00429E94]
:004144DA FF35809E4200
push dword ptr [00429E80]
:004144E0 E835BCFFFF
call 0041011A
:004144E5 8D45E0
lea eax, dword ptr [ebp-20]
:004144E8 50
push eax
:004144E9 FF35989E4200
push dword ptr [00429E98]
:004144EF FF35809E4200
push dword ptr [00429E80]
:004144F5 E820BCFFFF
call 0041011A
:004144FA 83C418
add esp, 00000018
:004144FD C605F8B4430001 mov byte ptr [0043B4F8],
01
:00414504 56
push esi
:00414505 FF35749E4200
push dword ptr [00429E74]
* Possible StringData Ref from
Data Obj ->"Thank you for registering Hotkey "
----註冊成功資訊
->"Master."
|
:0041450B 68849F4200
push 00429F84
:00414510 EB0C
jmp 0041451E
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004144CB(C)
|
:00414512 56
push esi
:00414513 FF35749E4200
push dword ptr [00429E74]
* Possible
StringData Ref from Data Obj ->"The key you entered is not correct."
----這裡是出錯資訊,向上查詢關鍵CALL和跳轉
|
:00414519 68609F4200
push 00429F60
.
.
.
.
(略)
.
.
.
.
00412C05 /$ 55 PUSH EBP
----進入004144C1時停在這裡
00412C06
|. 8BEC MOV EBP,ESP
00412C08 |. 51
PUSH ECX
00412C09 |. FF75 08
PUSH DWORD PTR SS:[EBP+8]
00412C0C |. 8365 FC
00 AND DWORD PTR SS:[EBP-4],0
00412C10 |. E8 BB230000
CALL Hotkey_M.00414FD0
00412C15 |. 33D2
XOR EDX,EDX
00412C17 |. 59
POP ECX
00412C18 |. 85C0
TEST EAX,EAX
00412C1A |. 7E 2E JLE
SHORT Hotkey_M.00412C4A
00412C1C |. 53
PUSH EBX
00412C1D |. 56
PUSH ESI
00412C1E |. 57 PUSH
EDI
00412C1F |. 8D70 0E LEA ESI,DWORD PTR
DS:[EAX+E] EAX=使用者名稱長度 SO
ESI=EAX+Eh
00412C22 |> 8B4D 08 /MOV ECX,DWORD PTR SS:[EBP+8]
----從這裡開始是注
冊演算法
00412C25 |.
0FBE0C0A |MOVSX ECX,BYTE PTR DS:[EDX+ECX]
----依次計算使用者名稱
的各個位元組ASCII
00412C29 |. 8D79 0B
|LEA EDI,DWORD PTR DS:[ECX+B]
----EDI=使用者名稱長度+Bh
00412C2C |. 8D59 03
|LEA EBX,DWORD PTR DS:[ECX+3]
----EBX=使用者名稱長度+3h
00412C2F |. 0FAFFB
|IMUL EDI,EBX ----EDI*EBX的值放在
EDI
00412C32 |. 0FAFF9 |IMUL EDI,ECX
----EDI*ECX的值放在
EDI
00412C35 |. 0FAFFE |IMUL EDI,ESI
----EDI*ESI的值放在
EDI
00412C38 |. 8D48 05 |LEA ECX,DWORD
PTR DS:[EAX+5]
00412C3B |. 0FAFF9 |IMUL
EDI,ECX ----EDI*ECX的值放在
EDI
00412C3E |. 017D FC |ADD DWORD
PTR SS:[EBP-4],EDI
00412C41 |. 42
|INC EDX
----EDX+1
00412C42 |. 46
|INC ESI
----ESI+1
00412C43
|. 3BD0 |CMP EDX,EAX
----算完了沒有?沒有
!那就繼續從00412C25開始
00412C45 |.^7C DB \JL SHORT Hotkey_M.00412C22
----迴圈計算
00412C47
|. 5F POP EDI
00412C48 |.
5E POP ESI
00412C49 |. 5B
POP EBX
00412C4A |> 8B45 FC
MOV EAX,DWORD PTR SS:[EBP-4] ----這裡儲存真註冊碼的十六
進位制
00412C4D |. C9
LEAVE
00412C4E \. C3 RETN
4.總結
註冊碼透過使用者名稱計算,將依次計算的結果相加再轉換為十進位制:
使用者名稱=N
註冊碼=S
使用者名稱長度=X
我們假設使用者名稱為wolflh
S1=((N1+3h)*(N1+Bh)*N1*(X+5h))*(X+5h)
S2=((N1+3h)*(N1+Bh)*N1*(X+5h+1))*(X+5h)
S3=((N1+3h)*(N1+Bh)*N1*(X+5h+2))*(X+5h)
S4=((N1+3h)*(N1+Bh)*N1*(X+5h+3))*(X+5h)
S5=((N1+3h)*(N1+Bh)*N1*(X+5h+4))*(X+5h)
S6=((N1+3h)*(N1+Bh)*N1*(X+5h+5))*(X+5h)
S=S1+S2+S3+S4+S5+S6
軟體註冊成功後會在[HKEY_CURRENT_USER\Software\Mario Knok\Hotkey Master]下新增兩個鍵值
"Registered
Name"="wolflh"
"Registered Key"="2151786450"
刪除這兩個鍵值,又變成未註冊版.
恕小子我剛加入"風飄雪",很少寫過破文.對彙編知識和語言的誰知幾乎為零,所以大部分演算法都是自己亂猜的.分析如有錯誤,歡迎指出.