
碧蓝航线Lua代码和JSON数据提取方案
最终成果 Lua代码: AzurLaneTools/AzurLaneLuaScripts JSON数据: AzurLaneTools/AzurLaneData 相关工具 数据解密工具 碧蓝航线使用了luajit作为脚本引擎, 核心代码都保存在 scripts32 文件中, 此外还有部分数据保存在 sharecfgdata 目录下. scripts32文件使用了两层加密: 外层是对 UnityAssetBundle 文件整个加密, 可以使用 uabdec 进行还原. 还原后, 得到 UnityAssetBundle 文件, 可以使用 UnityPy 等工具提取出加密后的 LuaJIT 字节码. (PS: 其实是对字节码进行了部分魔改) 这些字节码可以使用 bcdec 进行还原, 还原后将会得到正常版本的 LuaJIT字节码. 开发过程中, 也尝试对上面两个解密工具进行了一些二次开发, 例如linux环境适配、支持使用stdin/stdout直接输出等. 对于JSON数据提取来说, 可以直接补全或者模拟部分运行环境后, 直接执行这些LuaJIT字节码, 可以免除反编译的时间. AzurLaneData 目前的提取流程就是使用的这一方式. 当然, 在没有看到过反编译结果的情况下, 补全或者模拟运行环境其实是不太现实的任务, 因此在分析阶段还是会依赖于反编译的结果. 反编译工具 LuaJIT 字节码的反编译也有一些现成的工具, AzurLaneLuaScripts 目前使用的是AzurLaneTools/ljd. 这是基于Dr-MTN/luajit-decompiler进行了一些针对性二次修改的版本, 主要修改其实就是针对反编译时的各种报错进行手动处理. 此外, 还加上了一些辅助函数, 例如支持bytes的输入和输出, 从而减少文件IO. 其他工具 除了数据处理之外, 数据获取也是一个不可忽略的部分. 这里需要的文件是 scripts32 文件, 以及 sharecfgdata 目录下的所有文件....