破解程式:
SmartCheck 5.0安裝程式
破解工具:
ISDCC 1.0
破解者:
chcw
現在,有許多程式使用Install Shield來製作它們的安裝程式,而且在安裝
時就要求輸入註冊碼。這一類程式的註冊過程主要是由Install Shield來控制的,
Install Shield將其安裝過程的資訊存放在編譯後的指令碼檔案Setup.ins中。因此,
只需要對Setup.ins檔案進行反編譯,即可洞悉Install Shield的整個安裝過程。
ISDCC就是這樣一個反編譯工具,它能反編譯Install Shield 5.1以下版本生
成的所有的指令碼程式。下面以SmartCheck 5.0的安裝程式為例,介紹如何利用該
工具,實現註冊碼的破解。
1. 用ISDCC對Install Shield的安裝指令碼Setup.ins進行反編譯,並將結果儲存在
Setup.tmp檔案中:
ISDCC Setup.ins > Setup.tmp
2. 在Install Shield的安裝程式中,字串比較函式是StrCompare()。用Ultra Edit
開啟Setup.tmp檔案,查詢串"StrCompare"。
3. 在label140處,我們發現了一句可能是比較註冊碼的語句:
label140:
StrCompare(lString0, "002082840001");
lNumber1 = LAST_RESULT = 0;
if (lNumber1 = 0) then
goto label141;
endif;
return(1);
4. 在該部分程式的上面,還有一些產生lString0的語句:
label139:
StrSub(lString1, pString0,
0, 4); <-取pString0中子串, 從0開始,長為4
StrSub(lString2, pString0,
5, 6); <-取pString0中子串, 從5開始,長為6
StrSub(lString3, pString0,
12, 2); <-取pString0中子串, 從12開始,長為2
lString6 = lString1 + lString2;
lString0 = lString6 + lString3;
StrFind(lString0, "-");
<-查詢字元'-'
lNumber1 = LAST_RESULT >= 0;
if (lNumber1 = 0) then
goto label140;
endif;
return(0);
5. 由於反編譯後的語句幾乎與高階語言完全相同,因此我們很容易猜想出label139段程式
的功能,並得到pString0的形式為:
"0020-828400-01"
6. 在安裝過程中輸入Serial="0020-828400-01",註冊順利透過。