Description
申明:仅出于学习目的,如有侵权请通知我,我会立即删除。他人不得将此文中信息用于商业目的。
首先网上找了一下其他人是否有分享逆向《放置江湖》的经验,找到了这个 https://github.com/crazyyao0/codearchive/tree/master/reverse/%E6%94%BE%E7%BD%AE%E6%B1%9F%E6%B9%96
大概意思《放置江湖》应该是cocos2d-x写的,里面的数据和逻辑都在lua文件里。发布出来的apk里面打包进去的lua文件是加密过的,需要解密。作者是自己写的解密脚本,我比较懒,网上找了下看看有没有现成的。找到 https://github.com/lyzz0612/cocos_decrypt
这个脚本解密是全自动的,不过在识别 sign 和 key 的时候遇到了点问题。所幸它支持手动传 sign 和 key,网上也找到了如何寻找 cocos2d-x 加密的 sign 和 key:https://blog.csdn.net/u012278016/article/details/79607356
由于只需要破解一次,所以我没有去改进那个解密脚本,而是手动找出 sign 和 key 之后对 apk 做了解密。解密的过程中有点意外,解密脚本硬编码了需要解密的文件的后缀名为 .luac
,在《放置江湖》中,后缀名为 .lua
,所以需要调整下解密脚本。
解密完成后,提取出来的 *.lua
文件依然是二进制的,用 winhex 和未解密的版本作了下对比。发现文件是不一样的,这说明解密是完成了的,只不过解密出来的可能是 lua 的 bytecode,需要咱们反编译一下。
解密之后的 lua 文件在 winhex 下明显前四个字符是可见字符,应该是文件格式的 magic。显示为” LJ “,hex 为 “1B4C4A02“,猜测是 luajit 的 bytecode,通过搜索确认了我的猜测。于是开始搜索 luajit 的 decompiler。找到 https://gitlab.com/znixian/luajit-decompiler 应该是目前还在维护的版本。
反编译过程会出现很多 warning 和 exception,应该是 decompiler 不够完善导致的。不过不影响记录数据的 lua 文件的反编译。
由于我是比较懒的人,所以我比较乐意节省那些和我同样懒并且有着同样爱好的人的时间:
https://gist.github.com/hackwaly/3a7d6caeb50388c7b625c04105a39d60
Activity