小弟我初出茅廬,請多指教。
前幾日從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卻可以正確執行?