Unity3D研究院之提取游戏资源的三个工具支持Unity5

时间:2024-03-06 13:54:29

1.在网上随便下载一个游戏.ipa,并且解压到本地。

2.找到xxx/xxx.app,右键显示包内容,打开Data文件夹。

3.如果发现文件夹中包含 unity default resources 文件,那么恭喜你这个游戏就是用unity3d做的。

 

再看看这里几个比较重要的文件。

level0 / leve1 ….   图中0-5一共有6个文件,这表示这个游戏用了6个游戏场景。

sharedassets0/sharedassets1 …. 图中0-6一共有7个文件,它的数量永远比场景的数量多一个,可见它和场景有关联性,可以用工具把它解开看看。

Managed:这个文件夹下放的都是dll ,unity自己写的脚本编译成dll后就放在这里,还有其他第三方的dll也放在这里。

resources.assets:这个东西就比较重要了,他游戏里面所有放在resources文件夹下的东西都会放在这里,我们提取也主要在这里提取。

Raw:如果游戏在StreamingAssets文件夹下放东西,那么就会出现一个Raw文件夹。

PS:我个人觉得最好不要在StreamingAssets文件夹下放东西,因为ipa一解开就能看到里面放的啥东西了。如果真的要放,我觉得最好不要放.assetbundle 文件。 因为你需要用www.LoadFromCacheOrDown 这样第一次它会把StreamingAssets下的assetbundle 解压到本地的cache文件夹中,那么StreamingAssets文件夹又是一个只读的文件夹,也就是说你只能读取不能删除,结果就会造成容量过大  因为 解压后的文件 和没有解压的文件都保存在本地。。 所以assetbundle最好直接从服务器上下载,那么这样本地就不会多出来一个assetbundle。

自從神魔更新自 Unity 5 之後,disunity 不再適用;
所以我以前那份教學其實已經作廢了 Orz
 
就 disunity 來說,解包真的很完美。
但很可惜,我有看到作者在 Github 上說:程式架構很糟糕,要打掉重練。
所以才導致 Unity 5 遲遲不能支持。
 
也因此我在這裡重發 教學 至 2.0,
解決 disunity 暫不支持 Unity 5 的問題。
 
【導讀】
 
(1) 如果你只是伸手黨,此文不適合你,請選擇上一頁離開。
(2) 本教學是概念性的教學指點,不是一蹴可幾獲得所有資源。
(3) 所有資源版權為 Mad Head 所有。
(4) 舉凡你使用該工具提取到的任何資源,禁止用於商業用途。
(5) 你使用工具提取到的任何資源,應盡量避免打包成懶人包在其他地方二次發佈。
(6) 本帖宗旨在於分享技術給大家,請勿將此技術用於非法用途。
(7) 工具都可能會有更新,請下載最新的版本。
 
【工具】
 
(1)《Unity Studio》
– Unity Studio 是 2015 年,最新穎的拆解 Unity 工具,是相當強大的工具。
– GUI;可以批量載入處理;可以預覽資源 (包含文字、貼圖、模型、音樂)。
– 不過仍有些貼圖無法識別,神魔的音樂大部分解出的也是錯的。
– 但基本上可以拆解九成以上的資源,相當亮眼。
 
(2)《Assets Bundle Extractor》
– 一樣是 2015 年新穎的拆解 Unity 工具之一。
– 其特色可批量將 .unity3d 包換成 .assets 包。
– 不過由於不能批量載入,使得本工具遜色很多。
– 但對於對於音效、音樂資源拆解相當完善,有可取之處。
– 可解決 Unity Studio 解錯神魔的音樂、音效的資源。
 
(3)《Unity Assets Explorer》
– 老牌拆解工具,僅支持對  .assets 包處理,瑕疵最多的工具,而且還有 BUG。
– 最新版,在主樓的 Latest version 描述裡。
– 雖然支持了 Unity 5 ,但仍不能批量載入。
– 音樂、音效的資源提取也有問題,貼圖自動轉成 DDS 也有毛病。
– 不過對於貼圖 原始數據 的導出成 TEX 卻相當不俗,適合給開發者研究的依據。
 
(4)《TOS Tex Converter 2.0》by 我開發的
– 解密金鑰:!-K7Jx-0RkHw_GvVFTG-pMPOVNacOEeTpOitJYjbX2wM
– 此份是我當初為 Unity Assets Explorer 導出貼圖的修正;
– 並兼 TEX 轉換成 PNG 工具。可以批量預覽、轉換。
– 我上傳的是整份開放源碼專案 (VC6.0 MFC),工具在 Debug 文件底下。
– 這次的 2.0 版做了加強,解決 Unity Studio 貼圖無法識別的部分;
– 追加有關對 ETC1、ETC2、Alpha8 的支持。
– 追加「僅」對神魔的大量  .unity3d 包,批量更名成易於識別的檔名。
– 可以指定輸出目錄。
 
(5)《DDS Converter》
– 一個可以將 .dds 貼圖批量轉換成 .png 的工具。
 
(6)《PowerVR》
– 一個可以預覽 .dds、.ktx、.pvr 的工具。
– 同樣可以批量處理轉換成 .png,不過不是在 GUI 操作上。
– 載這個主要是來解 .pvr 或 .ktx 的貼圖用的,dds 還是靠上述工具會比較好。
– 因為部分 dds,PowerVR 會解錯。
 
############################### 我是分割線 ###############################
 
【數據包概念】
 
當遊戲過大時,無法在 APK 檔案中容納。就會分離數據包。iOS 同理。
神魔從 4.0 開始,開始引入數據包的概念,畢竟圖鑑跟音樂只會越來越多。
透過玩家進入遊戲,下載數據包補足不足的資源內容。
 
如何拿到這裡的數據包,可以參考我的舊帖教學,以下我就不贅述了,概念性指導:
(1) 安卓不需 ROOT,數據包在:內部儲存空間 \ Android \ data \ com.madhead.tos.zh
(2) 如果你使用的是模擬器 bluestacks,可能需要豌豆莢,或其他方法自行爬文。
(3) 蘋果的玩家,自 iOS 8.3 以上,需要越獄才有辦法取得數據包資源。
(4) 本人是建議可以拿 bluestacks 用於拆包, bluestacks 的安卓還是自帶 ROOT 的。
 
【數據包的更名】
 
(1)
在電腦瀏覽時,會發現有文件已被壓縮,請自己手動解壓縮這些文件。
解壓過程遇到同名直接全部覆蓋就好。
 
(2)
自己先備份一下該版本的數據包吧,可以用於與下次版本更新比較。
如何從新版本中,只找新追加的部分,可以參照我的舊版教學:「小撇步一」。
又或者你可以根據「修改日期」排序一下,大概會知道那些數據包是最新的。
 
(3)
我們知道,神魔的數據包檔名相當難看,
估計是經過雜湊運算得出來類似 MD5 的東西,
這裡使用我開發的工具 TOS Tex Converter 2.0,協助你批量更名成易於識別的檔名。
 
(4)
如此一來,你便易於識別 Unity3D 包,裡頭到底裝的是什麼了。
可以選擇你想要解的東西
像這次的列王紛爭 (KOC) 合作背景音樂,可以輕鬆找到。
某些 Unity3D 包裡大概包了什麼,大概都很容易猜得到。
98% 的數據包都能成功重新命名。只有 3 份檔案無法更名。
 
【開始使用 Unity Studio】
 
(1)
開始使用 Unity Studio,
File → load file 到你數據包 的資料夾,
然後記得副檔名要選擇 .unity3D,否則你會看不到所有數據包資料
 
(2)
在 Asset List 的地方,可以預覽所有資源,
想要全部導出的:Export  → All assets,然後選擇一個輸出資料夾。
想個別導出的:在 Asset List 的地方,批量 Shift 選擇項目:Export  → Selected assets
在輸出的資料夾會得到這三個文件夾:(分別是音效、文字、貼圖)
 
(3)
音效倒出來的東西全是錯的,基本上可以先全刪掉了。
有關導出的貼圖大概有 dds、pvr、tex。轉成 PNG 需要其他工具:
dds:可以用 DDS Converter。
tex:需要用我的開發工具 TOS Tex Converter 2.0 轉換。
pvr:需要 PowerVR。
 
【開始使用 DDS Converter】
 
遇到 DDS 的貼圖,可以用這工具轉換,很容易操作。
 
(1) 選 Add,可 Shift 批量選擇 dds 載入到工具中。
(2) Browse,可以指定輸出資料夾
(3) Output Format,記得要選 PNG,你才有透明層。
(4) Convert,選 Yes,等待轉完。
(5) 你可以再次點選 Add,把看到的 dds 全刪除了。=w=
 
【開始使用 PowerVR】
 
(1)
從官網直接下載安裝檔,
建議安裝的路徑不要隨意更改,除非你知道在幹啥。
 
(2)
安裝時,可以選擇你需要的東西,
因為我們只要工具,所以直接選 PVRTexTool 就好,
其餘什麼 SDK,通通可以不用裝,那是給程式開發者用的庫。
 
(3)
識別附檔名,我是全鈎了,
如此一來,dds、pvr、ktx 都能開啟查看。
 
當然,如果你依然想依類型排序,以區別 dds,你 dds 可不必勾選,
因為全勾之後,就會註冊這三種檔案為同一類型的檔案了,
想要依類型排序時,就無法再區別 dds。
 
(4)
接下來你就可以開啟 pvr 的貼圖了,
你可以把它的 Logo 關掉。
 
(5)
單個檔案轉成 PNG:File → Save Image
 
(6)
需要批量處理的,要使用 .bat 來寫,
先配置好環境變量,感覺大概如下:
– 右鍵點擊我的電腦
– 選擇內容 (屬性)
– 選擇進階系統設定 (高級)
– 選擇環境變量
– 雙擊Path變量在最後的位置添加:(如果你當初的安裝路經沒改的話,如下)
C:\Imagination\PowerVR_Graphics\PowerVR_Tools\PVRTexTool\CLI\Windows_x86_32
 
※ Note :
你也可以將變量新增在系統中,我這裡是放在使用者裡。
win10 之前,沒有像 win10 這樣的表單,它是用『 ; 』區別的。
所以添加時,先找到字串結尾後添加,在字段最後要加上『 ; 』。
類似像這樣:xxxx ; ooooo ; ——- ; C:\Imagination\…….. ;
 
(7)
在你存放 .pvr 的地方先建立一個純文字件 ( .txt ),
然後貼上以下腳本內容:
@echo off
path %path%;”C:\Imagination\PowerVR_Graphics\PowerVR_Tools\PVRTexTool\CLI\Windows_x86_32″
for /f “usebackq tokens=*” %%d in (`dir /s /b *.pvr`) do (
PVRTexToolCLI.exe -f PVRTC1_4 -i “%%d” -d “%%~dpnd.png”
del “%%~dpnd.pvr”
)
有關路徑字段,如果你當初安裝路徑沒動的話,就不用改了。
另外哪天有 ktx 要轉換,把字段 *.pvr 換成 *.ktx 就好了。
貼完存檔後,把純文字件副檔名改為 .bat。
 
(8)
點擊  bat 檔,第一次大量檔案轉換需要一點時間,請耐心等後。
洗個澡、吃個飯、拉個(消音),回來再看看小黑窗有沒有消失了。XD
轉完後,你就可以把 pvr 的檔案給刪了 www
 
(9)
最後建議把 這些從 dds 及 pvr 轉出來的 png 放在同一個資料夾裡吧!
因為這些貼圖,Unity Studio 在導出的時候是:Y 軸上下顛。
 
 
PVRTexTool也支持翻转参数flip,但是在这里,我测试无效,只能使用另一个工具ImageMagick来进行上下翻转,批处理脚本为:

 

@echo off

path %path%;”D:\Imagination\PowerVR\GraphicsSDK\PVRTexTool\CLI\Windows_x86_32″

for /f “usebackq tokens=*” %%d in (`dir /s /b *.ktx`) do (

PVRTexToolCLI.exe -f PVRTC1_4 -i “%%d” -d “%%~dpnd.png”

del “%%~dpnd.pvr”

“D:\Program Files\ImageMagick-6.8.5-5\convert.exe” -flip “%%~dpnd.png” “%%~dpnd.png”

)

 
 
【無檔頭的 TEX 產物轉換】
 
由於 Unity Studio 有部分貼圖,它無法識別,大約有 36 份。
所以輸出的時候,會產生 .tex ,與 Unity Assets Explorer相似;
是一種 原始數據 (RawData) 的導出。
 
但與 Unity Assets Explorer 不同的是,這些 .tex 缺少了檔頭資訊
取而代之,輸出檔名型式大概如下:
{ 名稱 } # { 編號用於避免同檔名 } _ { 寬 } x { 高 } . { 貼圖解壓代號 } .tex
 
假設檔名是:1030n #10511_512x512.47.tex
表示這貼圖是 512 x 512 解壓代號為 47 的貼圖
而目前絕大多數都是 47 解不出來。
 
(1)
這時就需要我開發的工具:TOS Tex Converter 2.0
Output Path:指定輸出資料夾
Tex Viewer:選擇並預覽貼圖
Tex => PNG:選擇並轉換圖檔
 
(2)
選擇 預覽 或 轉換 前,由於  Unity Studio 導出的 .tex 沒有檔頭,
所以要在 Load Setting 那,勾選 None Header。
於此設定寬、高與解壓代號。
 
(3)
根據你所選的 .tex,匹配你的 Load Setting 設定
 
(4)
解出來的 PNG 方向是正確的,
所以這部分你就不用特別再修改了。
 
【Assets Bundle Extractor 提取音效】
 
由於 Unity Studio 解出來的音樂全是錯的,
所以我們這裡要換成 Assets Bundle Extractor。
雖然不能批量處理,但基本上不會花你太久的時間。
 
(1)
如果你剛剛有用我開發的工具更名,
會很容易找到有關音樂或音效的檔案
你可以先根據檔案大小來排序,
很容易找到檔案名稱是跟音效或與音樂有關的檔案,
如當中有 mp3 的字段。
然後把些相關的音樂或音效檔案搬移你方便處理的地方吧!
 
(2)
開啟 Assets Bundle Extractor,File → Open
到你特別擺放音樂或音效檔案的地方一一處理。
 
(3)
載入後,選擇 Info,接著你會看到有關 AudioClip 相關的 Type,
把那一欄選取起來,按下 Plugins,選擇導出路徑跟名稱,
最後便能導出音樂或音效了。
 
############################### 我是分割線 ###############################
 
【APK 內的資源】
 
教到這裡,擴充數據包的部分基本上是都拆完了。
你總體已拆解神魔 90% 的資源了,剩餘的 10% 是在 APK 裡。
也許未來 MH 會把 APK 慢慢輕量化至全用下載擴充數據的方式處理。
 
APK 裡的資源基本上有部分已經跟我們目前拆解的成果有重覆,
不過像是系統音效、系統 UI 介面等等,只有在 APK 裡才找得到。
 
(1) 從神魔官方網站下載 APK 版本。
(2) 將 綴名(附檔名) .apk 修改成 .zip,並解壓於某資料夾中。
(3) 素材資源都位於:assets / bin / Data 之下。
 
拆解方式大致與前面步驟相同,只是會方便更多,
因為資源沒有被分散,只是被分割而已,批量載入的需求很低。
 
【APK 內的拆解】
 
(1)
首些我們先用 Unity Studio 探勘 APK 的內容。
這次開啟附檔名就不用更動了 (Unity asset files),
這時你就會發現原本很多未知的檔案,只有 level0、level1、mainData。
 
(2)
你只需要載入 mainData,
你就會發現:assets / bin / Data 之下的所有檔案全自動載入了,
然後你就可以進行拆包了。
 
※ Note :
Unity Studio 在載入 mainData 檔案後,會生成:
sharedassets0.assets
sharedassets1.assets
sharedassets2.assets
這三份檔案就是 .assets.split 系列切割檔案的重組。
 
(3)
Unity Studio 導出的音效依然是錯的,
可以直接刪除。
 
(4)
使用 DDS Converter 時,
在批量載入之後,要注意的是:
有兩份有關 Font Texture 的 DDS 是損毀的,
要從 DDS Converter 表單內移除。
 
(5)
DDS Converter 轉完後,
你可以再次點選 Add,把看到的 dds 全刪除了。
 
(6)
PowerVR 的批量轉換 .pvr,跟前面一樣。
這裡我就不重複說明了!轉完後,你就可以把 pvr 給刪除了。
 
(7)
無檔頭的 TEX 產物,比照上述方法處理。
如果我沒記錯,有一份檔案是代號 45,不是 47。
 
(8)
要提取音效,依然要靠 Assets Bundle Extractor。
File → Open,檔名篩選選擇 Assets file (*.assets),
然後個別開啟剛剛 Unity Studio 重組好的:
sharedassets0.assets
sharedassets1.assets
sharedassets2.assets
然後按 Type 排序,一樣找到 AudioClip,
Shift 鍵批量選取起來,Plugin 就能導出音效了。
 
以上,拆解神魔的資源已經差不多了。
接下來的教學,可能比較偏向:
– 知識性的補充
– 補足一些工具的使用方法
 
############################### 我是分割線 ###############################
 
【Alpha 8 通道貼圖】
 
把我們解出來的 PNG 成果來查看,會發現一件事情:
沒錯,一張圖分兩張存,且其中一張標記上了Alpha8
 
Q:何謂 Alpha 通道貼圖 ?
A:
某些貼圖,會將「透明層」獨立出來成 1 份檔案,
換句話說將一張 ARGB,存成 一張 A 與 一張 RGB。
如果你不懂我在說啥,下圖會讓你更容易明白~~
 
而 Alpha8 的意思就是:8-bits (1 Byte) 描述一格像素的透明度。
顯而易見的是:我們的工具對於 Alpha8 的通道貼圖全解析成 黑色的了。
所以如果你想要這些「透明層」,不外乎要用其他方式去得到。
 
【Assets Bundle Extractor 批量轉換】
 
前面我有提到這工具…..
其特色可批量將 .unity3d 包換成 .assets 包
 
這可以協助你將大批的  .unity3d 轉成  .assets 後,
可以給老牌拆解器 Unity Assets Explorer 查看。
 
要如何做到呢 ? 遵照以下步驟:
 
(1) 在你存放 Assets Bundle Extractor 的地方建立兩個檔案
AssetsBundleExtractor.dir.txt
AssetsBundleExtractor.bat
 
(2) 用純文字編輯 bat,內容如下:
AssetsBundleExtractor -removetypetree batchexport AssetsBundleExtractor.dir.txt
 
(3) 純文字編輯 txt,內容如下:
+DIR { 你存放.unity3D 的文件夾位置 }
比如說你存在 C:\Users\teren_000\Desktop\TOS\bundles
那就是:「+DIR C:\Users\teren_000\Desktop\TOS\bundles」。
並且你可以多追加幾行,解不同的路徑。
 
(4) 執行這個 bat,你的 .unity3d 的文件下,就會產生 .assets 了。
 
(5) 如果你先前有使用我的工具,對 .unity3d 重新命名:
解出的 .assets 檔名仍有可讀性!
 
【Unity Assets Explorer 的導出】
 
(1)  此時你就可以用 Unity Assets Explorer 瀏覽神魔藉由下載的擴充數據包
 
(2) 雖然不能批量載入,但你可以根據檔名載入你想要導出的東西,不用再猜了。
導出前我們依然要關閉對 DDS 的轉換,它轉出來的色彩是錯的。
 
(3) 導出的 .TEX,要由我的工具去轉換出來
此時,None Header 就不用勾選了,
因為 Unity Assets Explorer 導出的 TEX 是有檔頭的,我的工具會自動判斷。
 
【解決 Alpha8 錯誤的思路】
 
透過剛剛的教學,已經可以解決 Alpha8 錯誤的貼圖。
這裡只提供思路,因為對 APK 內的數據還是有點問題。Orz
 
(1) 把你想要更正的 Alpha8 貼圖名稱記下來。
(2) 從 Unity Assets Explorer 載入時,找尋相關對應的  .assets 檔名
(3) 導出 .TEX
(4) 用我的工具 TOS Tex Converter 2.0 將  .TEX 轉成 .PNG,即可得到修正的貼圖。
 
【後記】
 
Untiy3D
其實是有提供加密運算的 API,所以神魔裡的媒體素材是可以被保護不被拆解的。
如果哪天神魔裡的媒體資源數據包被加密了,屆時這些拆包工具就會沒有作用了。
 
最後,希望大家能享受自己動手拆包的樂趣 w
假如哪天 disunity 支持了 Unity 5,或許我這份教學又要更新了呢 XD。
Enjoy !

 

因为Unity提供资源的工具很多,所有有些团队为了避免别人提取所以对资源进行了加密,最近又发现了一个神器基于硬件层面查看内存贴图,这样就直接无视对方加密了。。

下载地址在这里  https://developer.nvidia.com/gameworksdownload

下载Tegra Graphics Debugger   支持Mac Linux Windows

安装好以后连上安卓机器, 这里安卓的机器得是Tegra 机型查询 http://www.nvidia.cn/object/tegra-phones-cn.html

然后要选一个abd的路径,在android的sdk里platform-tools/adb

接着选择一个游戏包名,Lanch一下就会自动启动游戏,并且开始分析。

点击Capture Frame 截取一帧,然后选择Texture就可以看内存了, 给力吧。。

如果没有Tegra的手机,用高通的也可以,高通这个给力可以批量导出所有图片

下载地址: https://developer.qualcomm.com/software/adreno-gpu-sdk/tools

 

参考资料: http://zenhax.com/viewtopic.php?t=12