在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
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可以批量反编译。 |
请发表评论