美文网首页
血族手游Lua脚本及资源文件解密

血族手游Lua脚本及资源文件解密

作者: To_Be_Better | 来源:发表于2018-01-11 16:24 被阅读0次

快速分析

下载最新的血族apk并解压之后看到assets\lua可以猜测这个游戏是由cocos2d-lua开发的。打开其中的一个lua脚本看到里面都是乱码而且开头也没有特征值,应该不是使用xxtea加密的。

story Lua.png
打开png图片提示无法读取该文件。
png报错.png
打开lib\armeabi文件夹,libgame.so是最大的也是等一下分析的重点文件。
libgame.png

快速分析小结
1.血族使用cocos2d-lua开发
2.lua脚本和一些重要资源都已经被加密,但不是用官方的xxtea
3.加解密是由libgame.so进行


静态分析libgame.so

用IDA打开libgame.so,文件较大打开时间比较长。打开字符串窗口可以快速获得一些重要信息。比如LuaJIT2.0.1、Lua5.1等等。
lua脚本由cocos2dx_lua_loader加载,最后由lua_loadbuffer函数加载到内存中。动态分析一般会在这两个地方下断点,然后将lua脚本dump下来。

cocos2dx_lua_loader分析

找到cocos2dx_lua_loader之后f5查看反汇编代码。根据之后的动态调试分析可以知道,lua脚本是在第一个红色方框处进行解密操作。

Lua_load.png
lua_load调用了CCFileUtilsAndroid::getFileData,接着调用CCFileUtilsAndroid::doGetFileData,然后调用decryptFile。其实所有的资源都是在decryptFile中进行解密操作。根据文件类型主要分为三大类:png、jpg、其他加密文件(Lua,csv,xml)。
decryptFile.png

cocos2d::decryptTxt分析

在接下去分析会发现这三个类型的解密过程都是大同小异,先是判断该文件是否已经加密,如果加密了就调用了cocos2d::decryptData进行真正的解密,只是传入的参数有所差异。下面用cocos2d::decryptTxt作为例子

decryptTxt特征.png

1.判断文件最后第4个字节到最后第2个字节是否为0x53 0x44 0x47
2.调用cocos2d::decryptData进行解密操作,传入的参数只用到了前三个。第一个:开始解密的位置。第二个:需要解密的大小。第三个:用于后续解密的“密钥”

lua特征.png

cocos2d::decryptData分析

解密的步骤如下:
1.将需要解密的第一个字节和“密钥”异或
2.将需要解密的最后一个字节和“密钥”异或
3.将第一个字节和最后一个字节交换
4."密钥" =("密钥"+1)%0xff
...
解密的步骤还是比较简单的稍微花点时间就能看懂。


decryptData.png

静态分析小结
函数调用的顺序是:
1.cocos2dx_lua_loaderlua脚本加载函数
2.cocos2d::CCFileUtilsAndroid::GetFileData
3.cocos2d::CCFileUtilsAndroid::doGetFileData
4.cocos2d::decryptFile选择对应的解密函数
5.cocos2d::decryptTxt判断是否需要解密
6.cocos2d::decryptData解密完成


动态分析

在lua_load和loadbuffer下断点


lua_load断点.png
loadbuffer断点.png

点击游戏里的一些按钮触发断点,当运行到loadbuffer断点的时候,lua脚本源码已经出现在内存中了


loadbuffer动态调试.png

R1:脚本的起始位置
R2:脚本的长度

可以使用IDC脚本将lua代码保存到本地


idc脚本.png

效果源码如下图


storyLua源码.png

动态调试总结
在loadbuffer关键函数下断点可直接获得解密后的代码
使用IDC脚本将代码保存下来
优点:省略分析加解密算法的步骤,配合hook框架可以将运行过的代码都获取到
缺点:没运行到的代码依然得不到


最后放几张jpg,png解密后的图片和解密脚本的效果


png解密.png
png解密.png
解密脚本效果.png

详细代码已经上传github

脚本代码链接


参考文章链接

浅析android手游lua脚本的加密与解密
Lua游戏逆向及破解方法介绍

相关文章

  • 血族手游Lua脚本及资源文件解密

    快速分析 下载最新的血族apk并解压之后看到assets\lua可以猜测这个游戏是由cocos2d-lua开发的。...

  • Lua 脚本解密

    教程: 一个Lua脚本的解密过程 lua脚本的加密和解密(GG游戏脚本) 下载地址: unluac_2015_06...

  • Unity Tool - Lua编辑

    用途 关联Project窗口lua脚本文件 关联Console窗口lua输出的日志 方案 监听打开资源事件Unit...

  • Lua游戏逆向及破解方法介绍

    背景介绍 随着手游的发展,越来越多的Cocos-lua端游开发者转移到手游平台。Lua脚本编写逻辑的手游也是越来越...

  • lua脚本

    lua脚本 执行方法下载lua 打开cmd 或者命令界面 执行lua使用lua 文件

  • Lua xxtea 解密脚本

    众所周知,使用 cocos 引擎编写的游戏,如果直接使用 xxtea 加密 Lua 脚本,实际上是很容易被解密的,...

  • suricata lua脚本

    lua 脚本 语法: lua:[!] ; 脚本文件名将附加到您的默认规则位置。该脚本有2个部分,一个init函数和...

  • 限流算法(三)SpringBoot调用redis-lua脚本

    引入redis依赖 资源目录新建scripts文件夹,将上一节讲解的lua脚本放进去 构造redis-script...

  • redisgo操作LUA脚本

    LUA脚本基础学习:LUA脚本--菜鸟教程[https://www.runoob.com/lua/lua-tuto...

  • Windows环境下Nginx+Lua+Redis实现灰度发布

    Windows环境下Nginx+Lua+Redis实现灰度发布 1.配置nginx.conf文件 2.lua脚本 ...

网友评论

      本文标题:血族手游Lua脚本及资源文件解密

      本文链接:https://www.haomeiwen.com/subject/kivznxtx.html