首页 正文阅读

【初夏原创】【技术教程】一次关于unity–lua逆向的分析文章

emer 2025-12-06
268 0

导语:样本xlua,简单涉及到解密、hook等部分基础逆向。补足个人学习路上该路线的教程贴
【初夏原创】【技术教程】一次关于unity–lua逆向的分析文章 - 第 1 张图
本次样本算是一个比较标准的基础xlua样本,没有涉及到复杂的op还原,以及对dat等关键untiy文件的保护逆向。

简单介绍lua与untiy结合的背景,方便代码进行热更新从服务端拉取下发,unity做好相关承接即可也就是热更新

大部分逻辑将在lua中写明,unity基本为一个空壳

国内常见的是,我的老乡小腾腾公司的xlua,近年版本多为5.3的lua版本
【初夏原创】【技术教程】一次关于unity–lua逆向的分析文章 - 第 2 张图
简单执行支持流程dump出dll文件,拉进分析。不出意外没啥有用的东西,毕竟我们逆向方向不在这里
【初夏原创】【技术教程】一次关于unity–lua逆向的分析文章 - 第 3 张图
此类游戏,前面提到unityandlua,那么unity肯定有存在相关的注册函数来与lua建立联系就如同jni一样(java的native交互),这类函数一般都是固定的loadbuffer,可能根据不同框架函数名字略有区别比如本次的xlua他在ida中具体的实现为int32_t XLua_LuaDLL_Lua__xluaL_loadbuffer(intptr_t L, System_Byte_array buff, int32_t size, System_String_o name, const MethodInfo *method),最重要的参数是字节流buff,和脚本名字name。

关键函数拿下,直接手搓Frida的jshook脚本,核心代码逻辑为,hook该函数读写出buff的参数值,根据name作为文件名写入文件存储到我们的路径上
【初夏原创】【技术教程】一次关于unity–lua逆向的分析文章 - 第 4 张图
xlua存储后,我们发现常规的lua反编译使用unluac进行反编译失败,字节码验证不对。
在无进行op重写,以及魔改lua的情况下。我们针对lua框架只需进行字节码的一定修复,原为1B 4C 75 61 53 01 19 93
0D 0A 1A 0A 04 04,需将其改为1B 4C 75 61 53 00 19 93
0D 0A 1A 0A 04 04 04,然后再拖入jar进行反编译即可完成。

结合以上思路,编写Python、js两个Frida脚本将整个流程自动化,js复制hook字节流发送给Python端,Python端完成字节码验证、字节码修复、文件写入、拉起jar修复的完整流程即可获得下面的lua文件

获取完成后仅就只需进行正常的逆向改代码,以及hook替换字节流(配合c方向)

本次教程结束,逆向小白啥也不懂。部分名词有误的地方还请见谅。欢迎更多对uniy+lua、游戏引擎、游戏安全方面的有识之士加入初夏团队 到技术军团中找我交流[滑稽]

本篇文章,全篇只交代核心逻辑思路,不提供其他脚本代码。希望还未了解此方向的朋友带来一点微不足道的光芒[呵呵]
【初夏原创】【技术教程】一次关于unity–lua逆向的分析文章 - 第 5 张图

【初夏原创】【技术教程】一次关于unity–lua逆向的分析文章 - 第 6 张图

emer

emer

每天发现网络新鲜事

68858 文章
13 分类
10458.8k+ 访问

搜索

Zoomed Image