安卓逆向之Luac解密反编译

APP抓取 2018-08-03 3:27:05 阅读(27588) 评论(0)

本文阐述针对Cocos2dx-lua提供的轻量级加密方案的反编译。

本文demo对象:

安卓逆向之Luac解密反编译1

lua文件大概分3种。lua是明文代码,直接用ide能打开,luac是lua编译后的字节码,文件头特征为0x1B 0x4C 0x75 0x61 0x51。

lua虚拟机直接解析lua和luac脚本文件,luaJIT是另一个lua的实现版本,采用即时解析运行机制,luaJIT更高效,文件头特征为0x1B 0x4C 0x4A。

加密流程

一篇文章搞定Cocos2dx-lua正向开发打包流程:

CSDN文章【Cocos2dx-lua 3.11.1】打包lua项目为安卓apk

https://blog.csdn.net/lannan91/article/details/67637373/

加密指令:cocos luacompile -s 未加密源码目录 -d 加密后源码目录 -e -k 加密key -b 加密sign –disable-compile

解密逻辑

lua官方加解密实现方式很容易就能查找资料得到,根据得到key和sign就可以利用xxtea算法来对脚本进行解密,只需要三个条件,文件路径&加密sign&加密key就能解密。
加密和解密算法在这:
https://github.com/cocos2d/cocos2d-x-3rd-party-libs-bin/tree/v3/xxtea

实现过程

加密sign的找寻方法sign在.luac文件头中
随机打开一个项目内的.luac文件,找第一个字符串。

安卓逆向之Luac解密反编译2

 

加密key的找寻方法

key在打包后的cocos的lib库的libcocos2dlua.so中
1.第一种方法是libcocos2dlua.so使用IDA pro打开,全局查找加密sign。点击进入查找结果,在该结果的上方3行能够发现加密key。
2.第二种方法,由于写作的电脑已经升级到10.15.5 (19F101),IDA pro运行有问题。所以用osx自带的strings工具查找。
2-1.终端运行 strings -a libcocos2dlua.so
2-2.ctrl+f 查找sign,观察sign上方的字符串,即为key。

安卓逆向之Luac解密反编译3

解密实现

OSX实现脚本:
https://github.com/dengxiaochun/luac_decodeToolwin实现工具:
https://www.jb51.net/softs/575428.htmlOSX演示:
将解密脚本放在项目assets目录下

安卓逆向之Luac解密反编译4

修改decode.sh的SIGN&KEY变量,并保存。

安卓逆向之Luac解密反编译5

终端执行:sh ./decode.sh src

安卓逆向之Luac解密反编译6

执行结果:

安卓逆向之Luac解密反编译7

 

执行后脚本将自动备份luac源代码(src_backup)

安卓逆向之Luac解密反编译8

解密后的.lua文件在src目录中,ide打开,源代码反编译成功,可以进一步研究程序的客户端源码实现。

安卓逆向之Luac解密反编译9

猿人学banner宣传图

我的公众号:猿人学 Python 上会分享更多心得体会,敬请关注。

***版权申明:若没有特殊说明,文章皆是猿人学 yuanrenxue.con 原创,没有猿人学授权,请勿以任何形式转载。***

说点什么吧...