ADD/Remove v2.0
(計算系列號)
破解人:punisher
軟體的保護機制:你必須填入User Name和Registration Code。註冊碼是用你輸入的名字計算出來的。
破解過程:我試過用Wdasm32來反彙編,但失敗了,所以我用SOFTICE跟蹤程式以便發現註冊碼。
一啟動程式就遇上一個破框要你註冊,破框上有一組按鈕其中包括'Register Later',點選它會進入程式主視窗。看一下標題欄,有'UNREGISTERED
VERSION'的字樣。點選"EXIT",退出程式時又跳出剛才的那個破框。
讓我們解決它吧!
啟動程式,在破框中鍵入你的名字和一個假的註冊碼,然後按Ctrl-D啟用SOFTICE,下斷點GetWindowTextA,再按Ctrl-D回到破框。這時就可以點選"unlock",程式會被SOFTICE攔截在GetWindowTextA中,因為程式要有倆個CALL去獲取我們的名字和註冊碼,所以我們現在在SOFTICE的命令窗中輸入"X"並按回車以略過第一個CALL。
馬上,SOFTICE第二次中斷在GetWindowTextA中,按F11步出這個CALL,然後按F12來到這裡:
call 004053B6
push 00408360
; 你在這裡
lea ecx, [ebp-18]
call 00405386
mov dword ptr[ebp-04], 0000000
mov eax, [eax]
push eax
call [0040A810]
mov dword ptr[ebp-04], FFFFFFFF
add esp, 08
cmp eax, 01
mov eax, [ebp-14]
sbb [ebp-14], eax
neg dword ptr[ebp-14]
call 00401A33
cmp dword ptr[ebp-14], 00
jz 00401949
; 跳到計算註冊碼的CALL
在記憶體中搜尋一下你的假註冊碼吧,只要鍵入:
s 0 LFFFFFFF '15151515'(我是用15151515)
你會在資料窗中發現你輸入的東東。按住ALT和PAGEDOWN組合鍵,直到在資料窗中看到"UNREGISTERED
USER",在它之前你會看到四個數字並有一個破折號"-",這是註冊碼的第一部分。記下來,可別忘了破折號哦!
現在要跟入"jz 00401949"這個跳轉指令了,你會來到這裡:
call 00401620
; 這個CALL計算註冊碼的第二部分
test eax, eax
jz 004019F8
; <- 若在這裡跳就慘了
按F8追入CALL 00401620,按F10跟蹤到這裡:
mov eax, [004835C ]
lea ecx, [ebp-10
mov al, [edx + eax] ; 這是註冊碼的第二部分的第一個字元
在光條帶過mov al, [edx + eax]時鍵入命令:
? al
記下al的ASCII碼內容,不管是數字還是字母。
繼續按F10來到這裡:
Test byte ptr[ebp-10] 01
jnz 00401728
mov eax, [ebp-10]
mov al, [eax+00408360] ; 在al中存入你的名字的第一個字母
cmp al, 7F
jg 00401773
cmp al, 20
jl 00401784
cbw
mov cl, 02
idiv cl
;將該字母的值除以2
add al, 20
;再加上20
cmp al, 61
jge 004016FA
add al, 06
cmp al, 39
jle 00401704
cmp al, 41
add al, 08
;用 ? al 取得運算後的字元
push eax
以上就是註冊碼的計算過程,它取出你的名字的第一個字元,將它除以2,然後加上20。若結果是字母就存起來,若不是就加上8後再轉換。接著,程式會略過第二個字元而用第三個字元進行同樣的運算,直到沒有字元為止。
在算出註冊碼後,程式從CALL中返回,測試EAX的值,如果是零就跳轉到出錯對話方塊;非零就在登錄檔中存入你的註冊碼和名字。
為了取得註冊碼,你就必須一直在CALL中跟蹤,在"add al,08"指令時用'? al'並記下al的內容。跟蹤完這個CALL後再將註冊碼的第一部分與這部分的內容連起來。注意,註冊碼的長度是取決於你名字的長度。
我用的名字是Punisher,我的註冊碼=6582-mHWYR
你自己試試吧,快去擁有屬於你的註冊碼!