Live2DViewerEX 創意工坊檔案解密
Live2DViewerEX 創意工坊檔案解密
宣告:
本文只是討論解密 wpk、lpk檔案。本人不會提供任何程式,只是經驗分享。
如有侵權,聯絡刪除。
最近換了系統,而\(Live2DViewerEx\)是無法再\(linux\)上執行的,\(steam play\)也是不支援的,\(wine\)也沒能執行成功,
ztO如有它法,敬請告知Orz
沒有辦法,從github上找到了ppet這個軟體,倒是可以支援,但是需要原始的模型檔案,於是便開啟瞭解密之旅。
本文是基Live2DViewerEX 創意工坊lpk檔案分析 – 動態除錯Unity程式一文。
WPK
這檔案很簡單就是一個zip壓縮,解壓即可,會得到,形如下的檔案
file
┠**.lpk
┠**.png
┗config.json
LPK
這個檔案本身也是一個zip壓縮包,解壓之後會有兩個無後綴檔案、一堆字尾為(\(bin/bin3\))的檔案
其中較小的無後綴檔案也是個\(json\)檔案,另一個無後綴檔案則是上一層中的那張圖片
\(bin/bin3\) 的區別無非是 \(moc/moc3\) 猜也能猜到,後續也能在反編譯的程式碼中找到相關程式碼
反編譯
至此,已經無法再進一步獲得資訊了,開始反編譯
dnSpy
\(dnSpy\) 是一個非常好用的除錯\(c\#\)的程式,可以照著倉庫去編譯安裝,也可以直接去找現成的使用
修復mono.dll
Unity程式為了防止別人通過反編譯來破解修改自己的遊戲專案。可以通過兩種比較成熟的方案來預防。一種是混淆,另一種就是加密(加殼)。
Unity通過Mono來達到跨平臺的效果。在Build編譯時會將你編寫的\(code\)轉為符合\(CLI\)的\(CIL\)(\(Common Intermediate Language\)),並且主要的Code會編譯在Assembly-CSharp.dll裡面,然後再有mono來載入,解析,執行。
很多有安全意識的遊戲都會自己修改mono原始碼的mono_image_open_from_data_with_name函式,對DLL指令碼進行加密。
不過這種的加密方式缺點比較明顯。會在載入前進行一次性解密,遊戲執行過程中,記憶體中存在解密後完整的\(dLL\)。
以上來源網路,本人並不會unity,對於這個專案,也挺大的,去提取每個\(dll\)
那就走另一條路,修復的mono.dll,於是還需要\(dnSpy-Unity-mono\)。照著文件就行了。
最後用\(Visual \ Studio\)編譯(最好用\(2019\),高版本有適配的問題),配置是\(Release\),平臺是\(x86\)。用編譯好的\(mono-2.0-bdwgc.dll\)替換你需要除錯的\(Live2DViewerEX\)里程序的\(mono\)就行(有兩個,你除錯哪個exe就替換哪個)
除錯程式
為了能夠更仔細的觀察過程,選擇自己上傳打包自己的模型,這樣能仔細觀察,程式是怎麼把模型打包成\(wpk\)的,所以選則除錯\(exstudio.exe\)
至於怎麼除錯,閱讀相關程式碼就不說了
這裡只提供個找程式碼的好方法,\(dnSpy\)他只能搜函式,可以把程式碼反編譯匯出來,用其他的idea(本人用的\(vsc\)),就可以搜字串了,
再在\(dnSpy\)裡把你懷疑的程式碼打上斷點即可
最後用自己熟悉的語言寫個揭祕指令碼就行了
bin檔案改名
這就非常遺憾了,明眼也能猜七八,檔名明顯是md5,但有和直接md5不用,經過檢視程式碼,發現是先處理後md5
言而總之,檔名恢復是不可逆的,
只能通過檔案的前1024個位元組或\(mode.json\)去判斷檔案的型別了,明明就看自己習慣了,挺難受的
寫了半天的通過\(mode.json\)改名,結果不同的模型的配置檔案差挺大的,有的在一級有的在二級,老費勁了