翻譯:TORN@DO's Cracking Tutorial for (4千字)

看雪資料發表於2001-02-10


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一行。

相關文章