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改名,结果不同的模型的配置文件差挺大的,有的在一级有的在二级,老费劲了