我的破解心得(12) (1千字)

看雪資料發表於2001-03-13

破解程式:
    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",註冊順利透過。

相關文章