赞
踩
lua手游一般是cocos2d引擎+lua,除此之外还有个love2d引擎,不过用的人特少。
lua手游有三种文件:lua,luac,luajit。
lua是明文代码,直接用记事本就能打开。
luac是lua编译后的字节码。
luajit是用的另一种对lua加密。
luac和luajit同样是.luac后缀,但是文件头不同,对其所使用的反编译方法也不同,所以需要特别注意。
luac文件头为:0x1B 0x4C 0x75 0x61 0x51
luacjit文件头为:文件头是0x1B 0x4C 0x4A
打开so文件(一般是文件大小最大的那个(不做更改的话是libcocos2dlua.so),在so文件里搜字符串有无lua就知道是不是)
lua调用是lua_loader->checkstring->cryptkey->readfilebyte->encrypt/decrypt->pushstring->loadbuffer
一般开始搜lua_loader,没有的话就搜在字符串中搜.lua。找到调用.lua文件的函数。再进行解密,最后存放在loadbuffer。
关于lua的解密
棋牌类的游戏下了几个都是cocos+lua,所以尝试破解了一个单机的斗地主游戏。
根据这篇文章做的:https://www.freebuf.com/column/173221.html
首先下载下来,解压搜索有无lua文件或者luac文件,然后在\assets\src_c找到了
查看文件头,既不是luac也不是luajit,但打开每个文件查看,每个文件开头都是byds
就很有可能是xxtea加密,byds是签名,只需要找到key就可以进行解密。
然后使用Android EagleEye这个开源项目进行hook找key
要hook首先要找到解密的关键函数,搜索了函数发现这个位关键函数
然后使用Android EagleEye,修改\EagleEye\jni\hooks\hook_apis.c
但是最后只要hook游戏就会停止运行,还没搞懂为什么。
暂存。
关于luajit的反编译
遇到一个叫做小闲幺鸡麻将的lua游戏,里面是luac文件,文件头为
所以是luajit文件。
要想反编译,需要先知道luajit的版本,通过so文件,搜索字符串luajit得知。
luajit文件的反编译工具有两种:
第一种工具:luajit-decomp
首先要下载对应版本的luajit源码,然后在vs的命令行中编译源码
编译好后将图中3个文件复制进luajit-decomp文件夹中
然后将要反编译的文件也复制进去,并改名为test.lua,运行
decoder_new.exe得到的out2.lua就是所需的。
第二种工具:ljd-master
环境:python3
执行命令 python main.py "路径"
两种工具,luajit-decomp兼容性更好支持所有的luajit版本,ljd-master支持luajit2.0、luajit2.1。并且像小闲幺鸡麻将这样的游戏有的luajit文件即使是2.1.0 beta2ljd-master工具也不能反编译出来,只能使用luajit-decomp。
而且luajit-decomp反编译出来的很难看懂,相对来说ljd就好得多,下面两张反编译结果,一张是luajit,一张是ljd。
luac反编译工具
unluac反编译工具挺好用的。有个LuacGUI可以批量反编译。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。