TORN@DO's Cracking Tutorial for
Babylon Translator 3.50
你需要的工具:WinIce和一個十六進位制編輯器。我的意見是用Hacker's View。如果你沒有這些工具,你可以到一些破解軟體的網站去下載。
Banylon是一個免費軟體,但是它在使用過一段時間後仍然會過期(試用期?)。你可以到它的網站下載新版本繼續試用(騙取訪問量?)。而象你和我一樣的人不想一直去升級。你應當明白我為什麼破解一個有時間限制的免費軟體,這是我見過的第一個有時間限制的免費軟體。我想你已經讀過《Cracker's
Notes》,所以我們現在可以開始了。不過不要問我要那個Notes,自己到破解網站去找!
Step 1
安裝Babylon並且看一下“關於”視窗。你會看見“You've x Days left ...”的訊息,然後退出。將你的系統日期向前推至少101天。再次啟動時你會看到過期的視窗。從我的其他教程你會發現我總是會看一下入口函式和出口函式,因為這將節省我很多時間。
ADAVPI32.RegCloseKey
ADAVPI32.RegOpenKeyExA
ADAVPI32.RegQueryValueExA
這些是很重要的函式。但是我們知道它們不能檢查日期。它們只能儲存程式設定。我們再看一下CAPTLIB.DLL
IsBabylonPastExpiryDate
Kernel32.GetLocalTime
Kernel32.GetSystemTime
看見這個“IsBabylonPastExpiryDate”了?知道這意味著什麼嗎?對了! 把CAPTLIB.DLL拷到C:\,在WINICE.DAT中加入:
EXP="C:\CAPTLIB.DLL"
使winice載入CAPTLIB.DLL。重啟動你的計算機,不要忘了載入WinIce!
Step 2
讓我們開始吧!Ctrl+D調出winice,在函式IsBabylonPastExpiryDate處設定斷點(BPX IsBabylonPastExpiryDate)。如果出現錯誤,那麼你肯定忘了改變winice.dat了,或者你沒有重啟動你的計算機。執行Babylon,你會在函式被呼叫的地方回到WinIce中。按F10跳過此函式,哦,過期視窗!我們再在MessageBoxA設斷點。按F11回到呼叫此函式的程式。現在你會看到這些程式碼:
0137:00AA141B FF75E8
PUSH
DWORD PTR [EBP-18]
0137:00AA141E E8BFC60000
CALL ADAVPI32!RegCloseKey
0137:00AA1423 85DB
TEST
EBX, EBX
0137:00AA1425 7431
JZ
00AA1458
...
0137:00AA1442 BD95C4FDFFFF
LEA EDX, [EBP-023C]
0137:00AA1448 52
PUSH
EDX
0137:00AA1449 E9C4C60000
CALL USER32!GetFocus
0137:00AA144E 50
PUSH
EAX
0137:00AA144F E8A6C60000
CALL USER32!MessageBoxA
0137:00AA1454 33C0
XOR
EAX,EAX
0137:00AA1456 EB04
JMP
00AA145C
0137:00AA1458 0FBF45F2
MOVSX EAX,WORD PTR
[EBP-0E]
現在你會發現程式比較了某個值,如果沒有時間剩下,那麼就會出現過期對話方塊。所以我們先破解這裡。將JZ 00AA1458改為JMP 00AA1458。你可以實驗一下,如果ZF被置位或者沒有會發生什麼情況。重新執行Babylon,還看的見那個視窗嗎?當然看不見了!在下一步,我們將要除掉IsBabylonPastExpired中的資料檢查,退出吧。
Step 3
你已經知道,IsBabylonPastExpired是CAPTLIB.DLL的一個輸出函式。當一個程式有一個出口時,這個口往往被用到。所以我們在IsBabylonPastExpiryDate處設了一個斷點。執行程式,將會回到winice。按F10直到你看見這樣的程式碼:
0137:00AA11F0 E851C80000
CALL KERNEL32!GetSystemTime
現在你知道時間就是在這裡檢查的。當你按F10的時候,看一下esi,你會發現esi突然改變了!用“? VALUE”你會看見在第一次執行程式後你新設定的時間。往下翻,你會看見這樣的程式碼:
0137:00AA12B9 7D0A
JGE
00AA12C5
0137:00AA12BB BB01000000
MOV EAX,00000001
0137:00AA12C0 E956010000
JMP 00AA141B
這個JGE的意思是:如果日期已經到過期時間或以後,那麼禁止你“試用”Babylon...如果不是,那麼程式仍然可用(JMP 00AA141)。所以你可以改變esi的值來看看是不是這樣,或者你可以輸入“A”然後NOP回車NOP回車,回車(是兩個!)。然後Babylon會完全可用!
Step 4
現在你已經知道MessageBox出現的地方和日期檢查的地方。你可以用一個簡單的JZ或者JMP跳過MessageBox;用JMP 00AA141B替代JGE
00AA12C5或者NOP掉這個JGE 00AA12C5。最後用FC比較CAPTLIB.OLD和CAPTLIB.DLL,並在PATCH.TXT儲存兩者的不同之處(FC
/B CAPTLIB.OLD CAPTLIB.DLL > PATCH.TXT)。現在編一下你的pacth並編譯。把CAPTLIB.DLL改名為CAPTLIB.CRK,CAPTLIB.OLD改名為CAPTLIB.DLL。執行你的pacth。比較CAPTLIB.DLL和CAPTLIB.CRK直到兩者完全相同。好好享受這個翻譯工具吧,哦,別忘了刪除C:\CAPTLIB.DLL和WINICE.DAT的EXP="C:\CAPTLIB.DLL一行。