背景
最近无聊尝试反编译了个apk(XX幻想
)
工欲善其事必先利其器
解包apk
java -jar apktool.java d <APK> -o <OUT_FILE>
- assets 通常资源文件都包含在这里;lua的代码通常也在这里
- lib ; 如果有 libcocos2dlua.so 文件那么,这个游戏基本就是使用cocos2d(如:
XX幻想
)
解密文件
- cocos2d使用的是XXTEA加密
- XXTEA加密/解密 包含签名和密钥两个部分
- 寻找签名这个容易
- 随便用编辑器(如:
UltraEdit
)打开几个文件会发现加密的文件都会以相同的文本开头(如:abcd@)其中abcd
这个就是签名了
- 随便用编辑器(如:
- 寻找密钥
- 首先用IDA打开
libcocos2dlua.so
文件(灰长慢) - 然后在找到文本常量页面(VIEW->Open subView -> Strings)
- 尝试在文本区内搜索上面找到的签名,通常密钥会在签名附近
- 将签名附近的文本逐一使用XXTEA进行解密尝试一边,如果能够成功解密那么就是正确的密钥,否则就不是;
- 如果附近的文本都不能解密的话,那就尝试暴力枚举,便利所有文本逐一当做你要尝试一边,如果还不行的话那我也没辙了(要慢慢分析代码,请挪步百度or google)
- 首先用IDA打开
反编译lua文件
- 如果在assets中存在 codes 文件夹
- codes 中存在大量的 .luac文件 那么就该游戏应该就是使用lua编写的
- luac 反编译请诺步于此: https://bbs.pediy.com/thread-216800.htm
- 对于cocos2d无论是lua还是luac都能正常运行,所以反编译之后可以尝试修改lua文件...
- 修改完lua文件后可以用apktool 重新打包,生成apk...