Ati DVD播放器的安裝檢測 (4千字)

看雪資料發表於2002-09-21

軟體:Ati DVD播放器的安裝檢測
版本:7.6
破解者: 火翼[CCG]
組織 :    [CCG]  (China Cracking Group)
使用軟體: InstallShiled Decompiler v1.00 beta 7,winhex

前幾天從網上下載了一個原廠Ati顯示卡配套的DVD播放器,但安裝時要驗證產品號碼和原配驅動光碟,
我的Ati All In Wonder 的驅動盤又丟了,只好破掉了。
安裝程式使用InstallShiled 6.X製作,用InstallShiled Decompiler反編譯成功,
查詢ID和ATI CD後發現程式根據ID的不同到驅動光碟裡判斷是否有指定檔案,如果有再判斷檔案版本
是否正確。
產品ID判斷程式碼如下

// : Call Referenced(1):
// :  0000FAB4,
function BOOL function_120(s0)
    STRING s1;
    NUMBER n0;
    NUMBER n1;
begin
/* 0000FD9D: 0022 */    // -- Start Function Code -- //
/* 0000FDA6: 0021 */    function_576(s1, s0);
/* 0000FDB2: 000D */    n0 = s1 == "180-V01023-620";
/* 0000FDCD: 000D */    n1 = s1 == "181-V01023-620";
/* 0000FDE8: 0018 */    n0 = n0 || n1;
/* 0000FDF5: 0004 */    if(! n0) goto label_423;                        // normal if
/* 0000FE01: 0006 */    g_str23 = "dvd.dll";
/* 0000FE12: 0006 */    g_number73 = 0;
/* 0000FE1E: 0006 */    g_str25 = "6.2.0.7";
/* 0000FE2F: 0005 */    goto label_483;

// : Jump Referenced(1):
// :  0000FDF5,
label_423:
/* 0000FE3A: 000D */    n0 = s1 == "180-V01023-600";
/* 0000FE55: 000D */    n1 = s1 == "181-V01023-600";
/* 0000FE70: 0018 */    n0 = n0 || n1;
/* 0000FE7D: 0004 */    if(! n0) goto label_424;                        // normal if
/* 0000FE89: 0006 */    g_str23 = "dvd.dll";
/* 0000FE9A: 0006 */    g_number73 = 0;
/* 0000FEA6: 0006 */    g_str25 = "6.1.0.34";
/* 0000FEB8: 0005 */    goto label_483;
.
.
.
.

驅動光碟檢測程式碼如下
/* 0000F9AD: 0021 */    function_214("Select Drive where the ATI CD can be found", "D:\\", s0);
/* 0000F9E9: 0006 */    n0 = LAST_RESULT;
/* 0000F9F3: 000D */    n1 = n0 == 12;
/* 0000FA02: 0004 */    if(! n1) goto label_413;                        // normal if
/* 0000FA0E: 0005 */    goto label_412;

// : Jump Referenced(1):
// :  0000FA02,
label_413:  //判斷選擇的驅動器是不是光碟機
/* 0000FA19: 0021 */    function_119(s0);
/* 0000FA22: 0006 */    n1 = LAST_RESULT;
/* 0000FA2C: 000D */    n1 = n1 == 0;   
/* 0000FA3B: 0004 */    if(! n1) goto label_414;                        // normal if
/* 0000FA47: 0021 */    function_416("The drive you selected does not appear to be a valid CD Rom Drive,\n Please try again", -65533);
/* 0000FAA9: 0005 */    goto label_412;

// : Jump Referenced(1):
// :  0000FA3B,
label_414:  //判斷號碼是否合法
/* 0000FAB4: 0021 */    function_120(s1);
/* 0000FABD: 0006 */    n1 = LAST_RESULT;
/* 0000FAC7: 000D */    n1 = n1 == 0;
/* 0000FAD6: 0004 */    if(! n1) goto label_415;                        // normal if
/* 0000FAE2: 0021 */    function_416("The software release number you provided is invalid.\n Please try again", -65534);
/* 0000FB36: 0005 */    goto label_411;

// : Jump Referenced(1):
// :  0000FAD6,
label_415: //最重要的判斷
/* 0000FB41: 0021 */    function_121(s0);
/* 0000FB4A: 0006 */    n1 = LAST_RESULT;
/* 0000FB54: 000D */    n1 = n1 == 1;//如果n1=0則n1=1,否則n=2
/* 0000FB63: 0004 */    if(! n1) goto label_416;  // normal if n=0則跳到416,跳到416就完蛋了
/* 0000FB6F: 0005 */    goto label_417;

// : Jump Referenced(1):
// :  0000FB63,
label_416:
/* 0000FB7A: 0007 */    s4 = "Your CD cannot be used to validate this installation, Please check the following: \n\n" + "The CD part number has been entered correctly. You must include the dashes. For example,  180-####-### \n";
/* 0000FC43: 0007 */    s4 = s4 + "The CD must contain a previous version of ATI DVD software. Many ATI CDs will indicate ATI DVD PLAYER on the label";
/* 0000FCC2: 0021 */    function_416(s4, -65533);
/* 0000FCD0: 0002 */    abort;



// : Jump Referenced(1):
// :  0000FB6F,
label_417:
/* 0000FCD6: 0024 */    return;
/* 0000FCDA: 0026 */    // -- Create Local Variables -- //
end;                         

分析後可知,只要把00FB54處的n1=n1==1改為n1=n1!=1即可
但在原始檔裡改便是不行的,要在setup.inx檔案裡修改,分析了很多語句在setup.inx裡的程式碼
得出n1=n1==1的程式碼和n1=n1!=1的程式碼只有第一個位元組不同,前者為OD後者為OE,只要把00FB54
處改為OE就可以了。
其實也可以改00FB63處的跳轉,但這樣改後只能在98下安裝,所以還是改判斷更好一些。
整理
產品ID:
  180-G01054-6112  180-G01054-6114  180-G01056-6112  180-G01061-6113  180-G01064-61131 
180-G01065-6114  180-G01070-100  180-G01070-101  180-G01070-104  180-G01070-105 
180-G01070-106  180-G01070-107
還有很多,隨便添一個就行
用十六進位制檔案編輯工具開啟setup.inx
修改00FD54處的
  0D 00 03 00 05 9A FF 05 9A FF 07 01 00 00 00 為
  0E 00 03 00 05 9A FF 05 9A FF 07 01 00 00 00
完成。

相關文章