行业解决方案查看所有行业解决方案
IDA 用于解决软件行业的关键问题。
发布时间:2022-10-09 15: 30: 17
本案例详细介绍针对iOS手游逆向研究全过程,附带丰富的实操过程及思考分析,如果你对游戏逆向研究感兴趣,相信本文一定有较大的帮助。
一、确定目标引擎
正式开始对游戏程序进行逆向分析的第一步,是确定对象的目标引擎,以便选择后续的技术方案。经过对游戏引擎的分析对比,以及网络资料,选择了Cocos2d-x这款国产开源开发引擎,下面是百度百科对Cocos2d-x的具体介绍:
Cocos2d-x是一款国产的开源的手机游戏开发框架,基于MIT许可证发布。引擎核心采用C++编写,提供C++、Lua、JavaScript三种编程语言接口,跨平台支持iOS、Android等智能手机,Windows、Mac等桌面操作系统,以及Chrome,Safari,IE等HTML5浏览器。
Cocos2d-x降低了手机游戏的技术从业门槛,在全球范围得到广泛使用和认可。腾讯、网易、盛大、掌趣等国内游戏大厂,以及任天堂、Square Enix、Gamevil、DeNA、LINE等国际大厂均已使用cocos2d-x引擎开发并推出了自己的手游产品。
使用Cocos2d-x引擎的历年代表作有《我叫MT Online》《捕鱼达人》《大掌门》《刀塔传奇》《放开那三国》《全民飞机大战》《欢乐斗地主》《开心消消乐》《保卫萝卜》《梦幻西游》《大话西游》《神武》《问道》《征途》《列王的纷争》《热血传奇》《传奇世界》《剑与家园》《乱世王者》《传奇霸业》等。
本次选择的案例为《问*》逐步进行分析。
二、初步分析
对游戏进行砸壳提取到如下内容:
可以看到包含有Cocos2d.lua文件,进一步确定该游戏是由Cocos2d-x引擎开发。下面我们将可执行文件拖到IDA中进行深入分析,打开字符串窗口搜索“cocos2d”,会看到下面的截图,这段参数代表该手游使用了3.2版本的Cocos2d-x引擎:
通过查看目录文件,发现res目录中出现大量的文件:
不过,在仔细排查后,我们发现并非是lua文件,其中部分是JSON数据,还有部分不可读。接着查看不可读文件的hex,如下图:
怀疑是某种文件格式被解析出来,但搜索无果,分析应该是加密处理了。一般来说游戏属于经常会被黑客盯上进行破解攻击。所以游戏厂商都会选择对程序进行加密,甚至是非常复杂的加密,所以需要借助工具进一步分析。
三、挖掘LUA代码
下面会从游戏引擎来入手,分析找出游戏的lua代码,这里需要查询一些官方的资料,罗列如下:
Cocos官方文档:https://www.cocos.com/docs#2dx
cocos2dx引擎源码:https://github.com/cocos2d/cocos2d-x
关于脚本的使用:https://docs.cocos.com/cocos2d-x/manual/zh/scripting/
可以看到有提供demo用于测试,先下载并按照官方教程来学习下Cocos2d-x是如何加载lua。首先还是要搭建开发环境-iOS为例,可以参考下面的手册:
https://docs.cocos.com/cocos2d-x/manual/zh/installation/iOS.html
环境搭建成功后,继续按照教程下载demo并查看源码,得到如下结果:
简单分析可以发现demo中加载lua的流程是如下的字段:
看上去代码很简单,通过调用executeScriptFile来加载文件,我们下载Cocos2d-x源码来查看函数的实现过程。在源码中搜索,可以查询到LuaEngine::executeScriptFile的实现:
这里能发现utils->getDataFromFile读取到文件后,会通过luaLoadBuffer函数加载,所以需要继续搜索luaLoadBuffer:
根据代码看到如果有加密则调用xxtea_decrypt进行解密,解密后调用luaL_loadbuffer加载脚本。再继续搜索luaL_loadbuffer并没有显示,只有头部定义,到这里应该就是lua解密后的加载全部。
即便之前没有开发过Cocos2d-x手游,但根据上述源码分析,现在已经清楚Cocos2d-x是如何加载加密和未加密lua的。
四、解密LUA文件操作
接下来提取解密后的lua文件有两件事要做:
1.找到手游中luaL_loadbuffer函数的地址。
2.hook luaL_loadbuffer函数提取解密后的lua代码。
首先来分析luaL_loadbuffer函数地址:
在Cocos2d-x加载lua的代码中存在CCLOG,目测是日志打印。后面紧跟着字符串,在IDA中尝试搜索下"[LUA ERROR]load\"%s\",error:unknown."
结果直接被找到了,可以双击字符串进去查看具体:
通过快捷键X查找交叉引用的代码:
再次双击进入:
来到了使用该字符串的函数位置,上图为ARM64汇编,尝试按下F5看看能不能还原为伪代码?
找出luaLoadBuffer代码对比下:
对比看下来不能说一样,简直一模一样!不管是不是,直接上HOOK,先打印一下看看数据再说,编写Tweak来Hook函数地址:
hook后启动游戏,尝试进入游戏:
可以看到,已经hook到lua的加载。不过buff看起来不是文本,我们将hook到的保存下来查看,先看hex:
可以看到已经出现部分明文,但是并不是文本代码,hex头部有字符串LuaQ,直接搜索引擎搜索下"LuaQ"看看资料:
资料中介绍到LuaQ是Lua5.1,也就是Luac。可以直接使用工具将Luac文件转为Lua文件。此时需要下载unluac.jar文件,并使用命令执行:
再次回到lua文件,可以注意到成功转为lua文件了,代码此时已经可以阅读:
下面就可以通过修改lua代码实现我们想要的功能,并让游戏加载我们修改后的lua了。
本文转自看雪网站,原文作者【尐进】
展开阅读全文
︾
读者也喜欢这些内容:
IDA软件反汇编后如何找到函数入口点 如何通过IDA反汇编分析软件的加密解密过程
在逆向工程领域,IDA软件是一款功能强大的反汇编工具,广泛用于分析二进制代码、查找函数入口点以及研究软件的加密解密过程。本文将详细探讨“IDA软件反汇编后如何找到函数入口点 如何通过IDA反汇编分析软件的加密解密过程”,并进一步介绍IDA反汇编和反编译的区别,帮助用户更好地理解和使用这一工具。...
阅读全文 >
IDA怎么修改字符串内容?IDA修改后怎么保存?
在软件开发和逆向工程领域,IDA Pro是一种极其强悍的工具,广泛用于程序剖析、调试和修改。它不仅支持多种处理器架构,还提供了大量的作用,以适应高档讲解的必须。本文将围绕ida怎么修改字符串内容,ida修改后怎么保存这一主题,详细描述怎样在IDA中更改字符串内容,及其修改后的存放方式。此外,我们还将探讨IDA转变的应用场景,帮助读者更深入地了解IDA的实际应用价值。...
阅读全文 >
汽车逆向工程是什么?使用IDA进行汽车逆向工程教程
汽车工业正面临着史无前例的技术创新,其中,车辆逆向工程作为一种新兴技术,正成为该行业的热点话题。结合IDA(Interactive Disassembler)该前沿逆向工程工具,车辆逆向工程的应用范围和深度不断发展。文中旨在深入分析汽车逆向工程是什么?使用IDA进行汽车逆向工程教程,分析IDA在车辆系统中的运用,为汽车行业的技术人员及发烧友提供有价值的参考信息。...
阅读全文 >
IDA反编译以后如何转成源码?IDA反编译修改后重新编译
在软件开发和安全分析领域,IDA(Interactive Disassembler)作为一款强大的逆向工程工具,常被用于软件的反编译过程。反编译是指将编译后的程序还原为更易于理解的源码形式,这一过程在软件分析和调试中至关重要。...
阅读全文 >