Switch游戲《超偵探事件簿 霧雨謎宮》UE4解包筆記

最近在玩《超偵探事件簿 霧雨謎宮》這款彈丸精神續(xù)作,里面的小死神的各種顏藝表情,讓我想起之前的黑白熊非常的可愛。

在有著同樣想法的群友慫恿下,開始了痛苦的初次解包之旅。
需要的工具我會放在文末跟參考文章鏈接一起,并在文章中用加以標注。

解包本體NSP獲取NCA資源文件
首先拿到游戲的ROM,我是從Switch520上下載的nsp文件。隨后是本次解包需要的prod.keys[注 1],當前最新的V16.0.3測試可用。
第一個是BASE是游戲本體,而第二個是更新包,我們要提取的表情就在游戲本體里。
下載游戲文件解包工具:NCA-NSP-XCI_TO_LayeredFS_v1.6.rar[注 2],把下載的prod.keys放在同一的文件夾下。
打開腳本NCA-NSP-XCI_TO_LayeredFS.bat,第一個界面是選擇要處理的文件類型,因為我們本次的解壓的是NSP商店包,所以選擇?2.? eShop NSP。
之后選擇對文件進行的操作,我們選擇1.? Extract Eshop NSP。
之后腳本提示我們把文件拖入窗口,選擇剛才的BASE文件然后回車。
在解包結束后生成一個Extracted_NSP的子文件夾,里面會有些nca、cert、tik文件,其中后續(xù)會用到的文件有
將tik文件拖到NCA-NSP-XCI_TO_LayeredFS工具包里的腳本獲取titlekey.bat上
這個32位字符串就是我們后續(xù)解包NCA所需的titlekey。
提取NCA文件里的Romfs文件夾
這一步驟我們還是用到腳本NCA-NSP-XCI_TO_LayeredFS.bat,選擇需要提取的文件類型1.? NCA,隨后選擇2.? Extract Ecrypted NCA提取已加密的NCA包,之后選擇2.? Romfs folder我們把提取的文件釋放到文件夾,之后拖入上面提到的體積最大NCA包,輸入獲取的32位titlekey后回車。
如果解包順利你可以看到最后有如下的輸出,若提示prod.keys不存在等信息,嘗試把prod.keys 重命名為keys.ini后重新解包。
這告訴我們UE4引擎的資源包pak和ucas文件都已經(jīng)成功輸出到Extracted_NCA\romfs\RC\Content文件夾下了。
確定所用引擎版本
需要用到另一個腳本UnrealPakSwitchv10[注 3],我們把提取出的pakchunk0-Switch.pak復制到解壓后的文件夾內(nèi),將pak文件拖動到腳本1.check.cmd就能看到當前使用的UE引擎版本。
一定要把pak文件復制到腳本同一文件夾下。因為作者的編寫問題,腳本會以pak包所在文件夾的相對位置去調(diào)用u4pak.py,如果pak文件在不同文件夾就無法調(diào)用
腳本提示我們pak包版本可能是11或者11.27。按照腳本發(fā)布作者的原帖可以找到,對應的引擎版本是Unreal Engine 4.26.2 (for v11 *.pak),或Unreal Engine 4.27.2 (for v11.27 *.pak)。
題外話:UnrealPakSwitchv10本身設計也有解壓pak包的功能,但本次教程并沒有使用這個方法。其一需要下載原UE4引擎再調(diào)用其中的UnrealPak.exe,下載UE引擎略微麻煩。其二超偵探的包雖然沒有加密,但是提取出的并不完整,原因不明。
非加密UE4的資源查看方式1:UnrealPakViewer
在前面的操作中我們已經(jīng)提取到了pak和ucas文件,以下就進入到常規(guī)的UE4引擎游戲解包流程。
查閱資料的時候我發(fā)現(xiàn)大多數(shù)都是針對pak的解包教學,但是很少有人提到另一個文件ucas,而在我們解包出來的資源文件中,ucas明顯應該是包含更多資源的。
查詢了UE官方wiki[注 4]和一些論壇討論后逐漸了解到,在UE4和UE5引擎更新了一種打包方式,優(yōu)化原來的pak包的資產(chǎn)存儲模式來加快加載速度。可以簡單地理解為:
.pak 存儲訪問率低的文件,在《超偵探事件簿:霧雨迷宮》中主要存儲游戲劇情動畫,音樂等。
.utoc 是一個描述文件,主要記載容器文件壓縮格式以及是否被加密。
.ucas 存儲游戲中的主要數(shù)據(jù),在本作游戲中所有的場景貼圖,人物建模和動作,以及UI等資產(chǎn)都在這個包里。

UnrealPakViewer[注 5]是一個界面友好的pak查看器,README中描述也支持ucas文件,但是使用過程中發(fā)現(xiàn)只能讀取到ubulk文件,無法直觀的看到素材資產(chǎn)。懷疑可能是沒辦法導入utoc的原因。
下載工具后打開腳本Run.bat就可以把pak包拖進窗口使用樹形圖方式閱覽。

pak包中主要的內(nèi)容集中在RC/Content/CriData路徑下,awb是音頻格式,里面存放著游戲的BGM和效果音以及人物配音。在Moives文件夾下的usm文件是游戲的劇情動畫,而RC/Content/RC/Ul/Font/FontFace路徑下存放的是游戲所用字體。
右鍵Extract選擇提取文件到文件夾,對于usm視頻文件選擇用vgmtoolbox[注 6]工具來查看。

VGMToolbox → Misc . Tools → Stream Tools → Video Demultiplexer 打開視頻提取工具,格式選擇USM,右側(cè)勾選提取音頻與視頻,按照提示將文件拖入上方的Drop Files Here區(qū)域,等待轉(zhuǎn)換進度條完成,可以在原usm文件所在文件夾找到同名m2v文件,主流播放器即可正常播放。

非加密UE4的資源查看方式2:UEViewer
上文說到無法直接提取的ucas文件,也有其他更強大的軟件可以進行破解,這里使用的是最強大的UE引擎提取軟件UEViewer[注 7]。
文件輸入我們NCA部分提取到的整個Paks文件夾地址,勾選Overmide game detection,引擎選擇UE4 4.27版本,這里不勾選具體引擎版本雖然可以閱覽資源目錄,但是在預覽的時候無法正常查看模型和貼圖等資產(chǎn)。

下面的Platform可以選擇游戲原始平臺,這里我們不勾選switch的原因是UEViewer論壇中有帖子[注 8]提到勾選后紋理顯示可能會不正常。
打開資產(chǎn)樹狀圖,忽略掉Engine和Plugins(引擎與插件)兩個配置文件夾,我們主要的提取內(nèi)容在RC/Content/RC路徑下,也就是新增的ucas文件包含內(nèi)容。
UEViewer在打開無法正常解析的文件時會整個軟件崩潰,所以建議pak文件夾常開隨時準備重啟UEViewer后輸入path。此外UEViewer的文件提取并不全,像RC/Content/CriData路徑下的音頻文件在UEViewer中沒有正常顯示,暫時沒有查到相關解決資料
超偵探的人物模型在RC/Content/RC/Characters文件夾下,但是并不是按照人物命名分類的,而是編號+子編號的方式。例如002代表小死神,003代表大死神,后續(xù)子編號則代表不同場景下的模型。
子文件夾分別對應材質(zhì)Materials、模型Meshes、動作Motins、分支Sequence、紋理Textures,下面的部分uasset文件可以用UEViewer內(nèi)置的預覽器預覽。
我們打開Chr00300文件夾,這個對應了大死神的主要場景素材文件,

而我們想要提取的表情包則是附著在對話框上的(如下圖),那么它應該屬于游戲UI的一部分(這里感謝麻衣舞HalfMai的指點),順著這個思路開始分析UI文件夾中的結構。

在UI文件夾中,可以看到類似于菜單Menu、對話記錄BackLog,謎迷宮NzUI、游戲標題Title等子文件夾,其中COMMON這個UI引起了注意。

終于我們在UI/COMMON/Character/FaceChip下找到了想要的對話框表情包,而旁邊的FaceEffects自然就是表情動效的其他素材。右鍵文件夾選擇Export folder content,就可以將整個文件夾內(nèi)的素材用UEViewer內(nèi)置的轉(zhuǎn)換器導出為TGA圖片格式,至此我們的解包之旅終于告一段落。
還沒完?圖片的格式轉(zhuǎn)換
TGA的圖片格式雖然可以用常規(guī)圖片瀏覽軟件和PS正常打開,但是透明通路部分是無法正常查看的,需要轉(zhuǎn)換為PNG等更通用的格式。原本自己搓輪子的時候發(fā)現(xiàn)已經(jīng)有前人做好了工具tga2png[注 9](開源最棒?。?span id="s0sssss00s" class="font-size-16">,我需要做的只有寫一個批量轉(zhuǎn)換腳本即可。
將以上內(nèi)容保存到文本文件,修改后綴為bat。將下載好的tga2png和保存的腳本與TGA圖片放在同一文件夾,雙擊即可批量轉(zhuǎn)換。

“累死小爺了”
本次解包出來的小死神與大死神表情包也分享給大家,See You Next Time。
https://nbxx.lanzouj.com/ioPvZ11u39bg

這一次的解包雖然收獲頗豐,但是仍然有很多我沒有涉及到的內(nèi)容,有待后續(xù)學習:
xci、nsz格式的解包
UE4引擎的aes key提取
UE5引擎的解包
UE Viewer中無法查看部分文件的真實原因
模型的提取與導入
UE引擎游戲制作實操(地圖文件和流程文件的理解)

本文涉及到的參考文章與工具下載鏈接如下
https://prodkeys.net/
https://shipengliang.com/games/switch-%E8%A7%A3%E5%8C%85-%E5%9B%BE%E6%96%87%E6%95%99%E7%A8%8B.html
https://gbatemp.net/threads/how-to-unpack-and-repack-unreal-engine-4-files.531784/
https://docs.unrealengine.com/5.0/en-US/zen-loader-in-unreal-engine/
https://github.com/jashking/UnrealPakViewer
https://sourceforge.net/projects/vgmtoolbox/
https://github.com/gildor2/UEViewer
https://www.gildor.org/smf/index.php/topic,8627.msg45495.html
https://github.com/shusaura85/tga2png