免责声明
本文仅用于技术研究与学习交流目的,不鼓励、不支持任何对游戏内容的非法提取、篡改、传播或商业利用。所有操作均基于开源工具对本地已购游戏文件进行的逆向分析,未涉及服务器端数据、未破解DRM、未分发任何游戏资源。
文中所展示的截图与代码片段,仅为说明分析过程,不包含完整资源或可执行内容。
游戏版权归其原开发商与发行商所有。本博客无意侵犯任何知识产权,若权利方认为内容存在不当之处,请在评论区留言,我将第一时间配合处理。
技术无罪,善用为本。请读者遵守当地法律法规及游戏用户协议,切勿将本文内容用于非法用途。
使用工具
AssetStudio : 提取资源
Dnspy : 寻找代码中的加密逻辑
在线Base64解码 : Base64解码
背景
某游戏汉化堪忧,于是尝试自己获取游戏的英文文本,用大语言模型翻译,也是作为萌新解包的一个记录
提取资源
这一步比较简单,打开AssetStudio软件,选择File->Load folder,无视关于版本的报错,待加载完成后直接Export->All assets到一个目录即可。
在途中可以看看感兴趣的内容的浏览。
例如这里能看到是一串肉眼看不出有什么意义的代码,甚至base64解码后也无意义。观察类似文件的base64解码,似乎都带有
82 84 74 42 6E 29 3A 0F BD 28 78 28 E4 37 21 3D作为最开始的字节,但并没有现成的文件类型。那么是否就是资源提取有问题呢?在这里考虑到Unity和C#关系紧密,可以使用dnspy碰碰运气
反编译
首先找找游戏目录下有没有"Assembly-CSharp.dll"的文件,用dnspy打开(这是找的网上的)
依次展开,先随便看看。不过找了找似乎没有直接看到什么感兴趣的东西,那么就去找找类型引用
在类型引用里,我们可以看到LocalisedString这个类型,应该是和语言本地化有关的,双击过去看看。
可以看到很多方法的实现都依赖Language,Ctrl+左键点过去看看
从Language()一路LoadLanguage()到SwitchLanguage()再到DoSwitch,最后我们找到了GetLanguageFileContents,可以看到其最后调用了Encryption.Decrypt(),那么接下来就是去寻找解密函数,然后自己实现就可以了。
让AI帮忙用py写了脚本,测试确实输出了英文文本。
接下来就可以自己尝试翻译了。翻译完成后可以用UABE进行再次封包了





