• 标 题:MAYA4.x中英文双语菜单插件b1版 破解 (3千字)
  • 作 者:boolking
  • 时 间:2002-2-12 21:13:19
  • 链 接:http://bbs.pediy.com

小弟我初出茅庐,请多指教。
前几日从http://mayacn.363.net/下载了一个“MAYA4.x中英文双语菜单插件b1版”,本想试用一下,可是一安装,竟然不能继续。可恶,那我岂不是白白下载了半天,要知道这个东东可有近5m,可怜我在家用56k的小猫下了20多分钟。看来我要自己动手把它搞定了。
从安装文件看,只有一个setup.exe,运行后似乎是解压了一些文件,到系统的临时文件夹看看,果然被我找到,在C:\Documents and Settings\Administrator\Local Settings\Temp(win2k),原来是用installshield做的,前几日才买了看雪大哥的《加密和解密》,正好派上用场。
从安装文件来看,有setup.inx,应该是用6.x版做的,用wisdec打开失败,果然没错。看来只好用i6comp强行解压了,ok,解压成功。将解压后的script目录copy到d:\aw\maya\覆盖掉原先的(记住要先备份旧的)。试用后觉得实在不太好用,就把它删掉了。
才从书上学了几招,一点用场没派上,真是心有不甘。
想到书上说可以用一个日本人写的工具isextr将setup.inx反编译,于是就想试试看。运行isextr得到一个反编译后的文件isd_dec.txt,有点大,不过不要紧,还比较容易懂,记得不久前在www.driverdevelop.com下了一篇installshield的教程,现学现卖,大概看懂了它的内容。只用修改几个条件判断语句就行了。这才想起并没有能将setup.inx还原的工具。
俗话说的好:“自己动手,丰衣足食”。
记得看雪大哥书中说installshield是伪编译,于是用ultraedit打开setup.inx和反编译的文件比较,还真被我看出点眉目来。反编译的文件中每行最左被注释掉的部分和setup.inx中相应位置的16进制代码相同,看来改掉setup.inx中的相应位就可以达到目的。
再仔细查看,发现setup.inx伪编译代码似乎是采用四元式(或三元式)的形式,这样就只需改掉第一位的代码即可。从反编译代码看出“0009”为“<”的编码值。依此类推,得出要修改的代码。
常见的编码如下表:
0002 ---- abort
0003 ---- exit
0004 ---- if
0005 ---- goto
0006 ---- =
0007 ---- +
0008 ---- %
0009 ---- <
000a ---- >
000b ---- <=
000c ---- >=
000d ---- ==
000e ---- !=
000f ---- -
0010 ---- *
0011 ---- /
0012 ---- &
0013 ---- |
0014 ---- ^
0016 ---- <<
0017 ---- >>
0018 ---- ||
0019 ---- &&
001a ---- 逻辑&
0020 ---- 调用系统函数
0021 ---- 调用自定义函数
0022 ---- 自定义函数开始符
0023 ---- 带值返回
0024 ---- 不带值返回
.
.
.
.
(其余的可自己总结,此处只提供思路)

回到刚才的问题,在反编译的代码中找到begin这个关键词,它是整个程序的执行起点,相当于C语言的main()函数,在它下面不远处可看到安装出错的提示信息“无法验证硬件码,请先用注册程序生成硬件码验证文件!”,看到前面有一个跳转语句:
/* 00004E12: 0009 */    n3 = n3 < 0;
/* 00004E21: 0004 */    if(! n3) goto label_1;
好,改掉跳转条件,先将setup.inx备份。将00004E12处的“<”改成“>”就可以跳转了,在ultraedit中将00004E12处的0009改成000a。依此类推,改掉00004ECF,00004F68,00005010,000050E9,00005189,00005229几处的0009。同理,将000052E4,0000536C,00005532的000d改成000e即可,存盘退出,运行setup.exe,ok了。



再将需要修改的地方总结一下:
00004E12 :0009 => 000A
00004ECF :0009 => 000A
00004F68 :0009 => 000A
00005010 :0009 => 000A
000050E9 :0009 => 000A
00005189 :0009 => 000A
00005229 :0009 => 000A

000052E4 :000D => 000E
0000536C :000D => 000E
00005532 :000D => 000E


在此我只想讨论一下手工修改installshield的setup.inx来到达破旧的目的的可能性以及破解的一些思路。
可能以后会有类似wisdec的支持installshield6.x的的工具出现,那样就可以更方便的破解installshield了。



另外,我想请教一下各位高手,为什么这样修改的setup.inx没有修正crc却可以正确运行?