Unity Studio Command Line Tool

Unity

遊戲引擎 Unity 與 Cocos2D-x

最近因為在拆包一個手遊,目前手遊比較著名的引擎不外乎是 UnityCocos2D-x 兩大陣營,恰巧之前在拆 EVA適格者 的時候(因為它已結束營運說了也沒差)它就是用到 Cocos2D-x 的引擎。

不過這次拆的遊戲剛好是 Unity 引擎的遊戲,之前也研究過幾個手遊的資源,所以對 Unity 引擎的遊戲還不算太陌生,雖然各自遊戲廠商都會想辦法讓自己的原始碼、資源圖像、音效等資源做不同程度的加密與防盜。一方面是為了不讓辛苦開發出來的遊戲輕易被盜走,另一方面也是減少遊戲可能被惡意竄改的風險。

拆包遊戲的目的

即使是這樣,還是有許多各種各樣的人們,會想要(希望)能夠把遊戲反組譯,能夠一窺究竟遊戲的架構以及設計的方式。有人希望能夠找到遊戲漏洞或 BUG,讓自己遊戲能夠獨享別的玩家沒有的特權。也有人希望找到遊戲的圖片資源,作為收藏或參考用。當然還有各種各樣不同目的的人,而我,則是屬於拆包整理資料站分享給同樣喜愛這個遊戲的玩家們。

一直以來研究過了許多遊戲的架構,對我來說研究遊戲架構的過程有許多好處:

  • 了解遊戲引擎目前可以做到什麼程度(雖然看API也可以啦)
  • 了解遊戲的各種資源的打包方式
  • 思考資料結構為何如此設計
  • 發現為了效能做的各種 Workaround
  • 研究遊戲原始碼

其實常常會在研究時發現意外的驚喜,意外竟然有這種架構設計方式、意外會在加密時外洩了密鑰、意外大遊戲公司也會寫出一個 10000 行程式的檔案等等。

Unity Studio 資源神器

現在來介紹針對 Unity 引擎開發的遊戲,資源打包方式當然大部分也是直接使用 Unity 的方案,因此 ReduMC 開發了 Unity Studio 可以把打包的資源解開。

Unity Studio is a tool for exploring, extracting and exporting assets from Unity games and apps.

只不過 ReduMC 的版本後來較少更新,且不支援後來 Unity 自家的 UnityFS 格式的檔案解包,因此 Perfare 決定改造一下,Fork 出了 Perfare/UnityStudio 並接續加了許多非常棒的功能,也持續有在更新。

老實說 Perfare 的版本幾乎該有的功能都有了,只是對我希望自動化處理上,截至 2017/04/11 Release 的 v0.7.0 版本,仍然無法使用 Command Line 操作 Unity Studio,Issue #21 Command line usage 仍然是 Open 的狀態。

改造 Unity Studio Command Line (CLI) 支援

好啦廢話說了那麼多,終於要來說主要介紹的工具 UnityStudioCli 是 Unity Studio Command Line 的版本。因為是 MIT License 的關係,原始碼也有了,就決定也自己來改造一下 XD

考量很久是否要 Open Source 出來,但這只是為了達成我需要的目的而改造,Perfare 也沒有明確表明不會增加這個 Feature,我又沒有改得很漂亮到能發 Pull request(這才是重點吧XD),所以決定以編譯執行檔的方式釋出,也不特別在 GitHub 上開專案放了。

Unity Studio Command Line (UnityStudioCli.exe)

UnityStudioCli

原則上保留了原來 GUI 介面有能作到的功能,除了 Preview 之類的功能,指定檔案或目錄並解包到指定目錄。

下載:UnityStudioCli-v0.7.0-cli(1.0).zip

UnityStudioCli --help

Usage: UnityStudioCli [OPTIONS]+ extractPath
UnityStudioCli is forked from Perfare/UnityStudio
Perfare/UnityStudio GitHub: https://github.com/Perfare/UnityStudio
Based on Perfare/UnityStudio v0.7.0 GUI version.
Author: wsmwason https://wsmwason.com

Options:
  -s, --sourcePath=PATH      Unity assets source PATH or source FILE.
  -g, --group=type|resource  Extract assets group type|resource.
                               resource: Group by assets resource file.
                               (default)
                               type: Group by assets type.
  -o                         Extract assets with original path tree.
                               Will group by resource file.
  -V, --version              Output version information and exit.
  -h, --help                 Show this message and exit
  • 指定檔案解包到特定目錄 UnityStudioCli -s D:\res.asset D:\res_export
  • 指定目錄解包到特定目錄 UnityStudioCli -s D:\cab D:\cab_export
  • 指定解包時檔案分組方式使用資源檔案分組 UnityStudioCli -s D:\cab -g type D:\cab_export
  • 依照原始 UnityFS 的目錄樹結構 UnityStudioCli -s D:\cab -o D:\cab_export

Requirements

後記

這次用到 NDesk.Options 來作為 CLI 介面的參數處理 Library(也是 MIT License) ,原則上基本的 CLI 介面與防呆機制都做上去了,或許能幫到同樣有 CLI 需求的人,然後應該就暫時不會再更新版本或修正 BUG 了,因為我自己能用 XDD...除非我有其他的需求再看看吧。

也希望用到這個 Tool 的人都能用在正途,等到哪天 Perfare 或其他 PR 把這個 Feature 實作出來,它就完成階段性任務了。

留言

CHARLES
您好,小弟在網路上尋找了很久如何解包適格者的資料,恰巧看見大大的心得
因為滿喜歡美術設定,想提取某些場景圖片自用,但也礙於該遊戲已經結束營運,如今也無法藉由obb來解包
不過網路上還是有apk原始包,無奈的是試了滿多方式 依然解不出圖片檔,想求教大大是否能教學呢??
謝謝
回應於 2017-09-07 02:45:05
wsmwason
不好意思沒注意到有人留言
如果你只是要圖片的話
之前我做的 EVA 適格者資料庫應該有大部分的圖片才對
https://eva.fws.tw/

如果沒看到的話
我手上應該還有一些沒釋出的圖片
有需要的話我可以寄給你
回應於 2017-11-06 14:13:04
Copyright All Rights Reserved https://wsmwason.com 2000-2018, Powered by wsmwason