软件: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
完成。
- 标 题:Ati DVD播放器的安装检测 (4千字)
- 作 者:火翼[CCG]
- 时 间:2002-9-21 13:17:14
- 链 接:http://bbs.pediy.com