發新話題
打印

安裝程序 Repack 攻略 之 MSI 篇

安裝程序 Repack 攻略 之 MSI 篇

http://forum.slime.com.tw/thread180995.html
安裝程序 Repack 攻略 之 MSI 篇
本文主要討論使用微軟的開發工具 orca 和 msidb 進行 MSI 安裝包的修改封裝.
下面是我對 MSI 的基本情況的認識,如果只想瞭解怎麼進行 Repack,也可以跳過這一部分。

MSI 概述
MSI 最基本的部分是對安裝程序的一個描述,包含了一個所謂安裝訊息資料庫,涉及到安裝界面、所使用的文件、建立捷逕、INI文件、註冊表、以及版本控制和反安裝訊息等。
對於安裝時所使用到的文件,MSI 可以有 3 種方式來處理:
文件隨同安裝程序以原生態發佈
文件壓縮成 Data.cab 的形式隨安裝程序發佈
文件壓縮成 .cab 文件後注入到 .msi 文件中
顯而易見,一般安裝程序很少以第一種方式發佈,而第二種和第三種比較一般。
對於注入到 .msi 文件中的情況,需要首先用 orca 找出 Media 的描述值,然後用 msidb 將 .cab 從 .msi 中抽取出來,如果直接以 Data.cab 形式發佈就可以省去這一步操作。
如果要增加移除或是取代 .cab 中的文件,需要先用 orca 找出文件對應的描述值(可能就是檔案名本身或是一串HEX編碼抑或兩者的結合),然後將 .cab 文件解包,按照描述值的檔案名來操作文件後再用 cabarc 重新打包回去。
如果 .cab 是從 .msi 抽取的,再用 msidb 重新編入。
顯而易見,一般安裝程序很少以第一種方式發佈,而第二種和第三種比較一般。
對於注入到 .msi 文件中的情況,需要首先用 orca 找出 Media 的描述值,然後用 msidb 將 .cab 從 .msi 中抽取出來,如果直接以 Data.cab 形式發佈就可以省去這一步操作。
如果要增加移除或是取代 .cab 中的文件,需要先用 orca 找出文件對應的描述值(可能就是檔案名本身或是一串HEX編碼抑或兩者的結合),然後將 .cab 文件解包,按照描述值的檔案名來操作文件後再用 cabarc 重新打包回去。
如果 .cab 是從 .msi 抽取的,再用 msidb 重新編入。
本文以修改 RemotelyAnywhere.msi 為例進行操作說明,目標是用 RemotelyAnywhere 修正檔取代安裝包中的原文件,同時將購買的許可傳輸協定整合在安裝包內,達到安裝完畢後直接可以使用的效果:
1. 使用 orca 開啟 RemotelyAnywhere.msi ,選項 TOOLS 表單的 OPTIONS 指令,切換到 DATABASE 面板,勾
選「Generate a unique Package Code each time a database is saved」,然後執行 File 表單的 Save as 指令,把 RemotelyAnywhere.msi 文件另存為 ra.msi 文件。
2. 使用 orca 開啟 ra.msi ,在左側 Tables 中選項 Media ,在右側 Cabinet 列可以看到壓縮包名稱為 #data.cab ,記下,關閉 orca。
3. 使用 msidb 從 ra.msi 中抽取 data.cab:
代碼:
msidb.exe -x data.cab -d ra.msi
4. 將 data.cab 中的文件展開:
代碼:
·建立 files 目錄
md files
·展開文件到 files
expand data.cab -F:* files
·移除 data.cab
5. 將修正檔文件 RemotelyAnywhere.exe 複製到 files 目錄中覆蓋原文件。
6. 將文件重新打包成 data.cab :
代碼:
cabarc.exe -m LZX:21 -r N data.cab "files\*"
7. 將 data.cab 編入 ra.msi 中:
代碼:
msidb.exe -a data.cab -d ra.msi
8. 使用 orca 開啟 ra.msi ,在左側 Tables 中選項 Registry ,在右側工作區點右鍵,選項 Add Row,按以下內容輸入各列:
代碼:
[Registry] REGISTRY_LICENSE
[Root] 2
[Key] Software\RemotelyAnywhere\V5
[Name] License
[檔案類型] -----BEGIN LICENSE-----
PRODUCT RemotelyAnywhere...
[Component] Service_Files
這裡是自己的編撰了一個註冊表項用於安裝時自動輸入許可文件,檔案類型 欄的內容就按你購買的 License 的內容輸入即可。
9. 使用 orca 儲存完成後的 MSI,收工。
PS: 本文中因為只涉及取代文件,所以沒提及增減文件的操作,如果有需要這方面的操作,首先應在操作 cab 包時增減文件,並用 orca 開啟 msi 文件對以下資料表項進行調整:FeatureComponents、File,具體操作在此不贅述,遇到具體案例時可以聯繫我,到時根據實戰再修改此貼。
TIPS: 如果安裝程序是由 Setup.exe Data1.cab 等一系列文件組成的,你還可以使用 InstallShield 的 Pakage For The Web 來將其打包成單個文件,同樣,如果原始安裝程序是 InstallShield 製作的單個文件,不妨試一試用右鍵開啟,WinRAR 可以將其解壓還原出多個文件。
文中提及的工具:CabArc
msidb
orca
資源列表共

TOP

安裝程序 Repack 攻略 之 CAB 篇

安裝程序 Repack 攻略 之 CAB 篇

某些情況下我們需要對軟體的安裝程序包進行修改,取代其中的部分文件,也就是所謂 Repack。

本文討論採用.CAB壓縮包的安裝程序的拆解打包,主要是搜集工具,使用方法除了Install Shield的高版本描述稍多外,其他均為圖形介面程序,所以描述相對簡略,也沒有截圖(主要是因為我比較懶*^_^*)。

以下內容均系本人曰常實踐(Repack過的軟體有Symantec Ghost 7.5 中文版、Dr.eye 2005 專業版、智能狂拼III.3 專業版等),草草歸納,不當之處,敬請指正。

CAB 格式分類
·LZCAB 採用LZX編碼壓縮的CAB包,一般見於 Freeware
·MSCAB 微軟格式的CAB包,一般於微軟的程序,Symantec Ghost 7.5 安裝程序也採用此格式。
·ISCAB InstallShield製作的安裝包中使用,特徵是同時存在一個.hdr文件



LZCAB 拆解
·解壓
使用WinRAR即可解壓
·壓縮
使用CabPack打包,Compression Options選項 LZX


MSCAB 拆解
·解壓
使用WinRAR即可解壓
·壓縮
使用CabPack打包,Compression Options選項 MSZIP


ISCAB 拆解
InstallShield 的資料包一般格式為 data1.cab,同時有一個 data1.hdr,用於描述文件分組定義,如果文件較多,還會存在一個 data2.cab ,實際上是分割壓縮包。

ISCAB 6.0 以下的版本可以使用 ZIPSCAN 解壓,也可以使用 WinPack 進行文件的抽取和取代、增加。

高版本的 ISCAB 可使用 InstallShield 中提供的指令行工具進行操作,以InstallShield X為例,安裝InstallShield X後,從安裝目錄下的.\system中抽取以下文件:

程式碼:
ISCAB.exe
ISTools.dll
MediaBuild40.dll
之後可以脫離 InstallShield 執行。

* 為省去安裝 InstallShield 的麻煩,我已將抽取的文件打包為 iscabX.zip 作為附件上傳。

·首先要抽取安裝包結構訊息,使用指令行


ISCAB data1.cab -lx -iCAB.INI


將訊息輸出到 CAB.INI 文件,大致如以下的格式:
程式碼:
[ISCAB Info]
Product=ISCAB
Version=2.0

[Dat Files]
File1="Setup.dll"
...
·如果要從包中移除某些文件或者取代文件(也要先移除,然後再重新加入),應編輯匯出的 CAB.INI 文件,僅保留頭部描述段([ISCAB Info])和要移除的文件描述(注意,文件所在的組描述應保留,如 [Dat Files]),將編輯後的文件另存為 DEL.INI,使用指令行


ISCAB data1.cab -r -iDEL.INI



·如果要向包中增加文件,應將相應文件放置在當前目錄下,同時和 data1.cab 同目錄下的 setup.inx,setup.ini 等文件都必須存在。編輯匯出的 CAB.INI 文件,僅保留頭部描述段([ISCAB Info])和要加入的文件描述(注意,文件所在的組描述應保留,如 [Dat Files]),將編輯後的文件另存為 ADD.INI,使用指令行


ISCAB data1.cab -a -iADD.INI

TOP

發新話題