1. 程式人生 > 其它 >Live2DViewerEX 創意工坊檔案解密

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\)改名,結果不同的模型的配置檔案差挺大的,有的在一級有的在二級,老費勁了