行业解决方案查看所有行业解决方案
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 Pro软件以其强大的反编译和反汇编功能成为众多工程师和安全研究人员的重要工具。对于逆向分析而言,能够准确提取程序中的变量信息和迅速定位关键函数是至关重要的。本文将深入探讨“如何使用IDA软件反编译功能提取程序中的变量信息 IDA软件反汇编功能如何快速定位关键函数”,全面介绍IDA Pro的核心功能及其应用技巧,帮助用户高效开展逆向工程任务。...
阅读全文 >
IDA软件反汇编后如何找到函数入口点 如何通过IDA反汇编分析软件的加密解密过程
在逆向工程领域,IDA软件是一款功能强大的反汇编工具,广泛用于分析二进制代码、查找函数入口点以及研究软件的加密解密过程。本文将详细探讨“IDA软件反汇编后如何找到函数入口点 如何通过IDA反汇编分析软件的加密解密过程”,并进一步介绍IDA反汇编和反编译的区别,帮助用户更好地理解和使用这一工具。...
阅读全文 >
IDA怎么修改字符串内容?IDA修改后怎么保存?
在软件开发和逆向工程领域,IDA Pro是一种极其强悍的工具,广泛用于程序剖析、调试和修改。它不仅支持多种处理器架构,还提供了大量的作用,以适应高档讲解的必须。本文将围绕ida怎么修改字符串内容,ida修改后怎么保存这一主题,详细描述怎样在IDA中更改字符串内容,及其修改后的存放方式。此外,我们还将探讨IDA转变的应用场景,帮助读者更深入地了解IDA的实际应用价值。...
阅读全文 >
汽车逆向工程是什么?使用IDA进行汽车逆向工程教程
汽车工业正面临着史无前例的技术创新,其中,车辆逆向工程作为一种新兴技术,正成为该行业的热点话题。结合IDA(Interactive Disassembler)该前沿逆向工程工具,车辆逆向工程的应用范围和深度不断发展。文中旨在深入分析汽车逆向工程是什么?使用IDA进行汽车逆向工程教程,分析IDA在车辆系统中的运用,为汽车行业的技术人员及发烧友提供有价值的参考信息。...
阅读全文 >