Loading

某Android手游的lua源码逆向分析与还原


近日分析某一款Android上面的手游,反编译后再起asset目录下可以看到加密过的脚本,lib目录下发现lua的so 初步怀疑其使用lua脚本实现的

  • 解密函数定位
  • 动态跟踪解密函数流程
  • 静态分析解密函数流程
  • 编写程序进行解密

lib目录下so的名称

1. 解密函数定位。

IDA加载SO,导出函数搜索关键字loadbuffer,定位到lua脚本加载的地方。Android so中使用lua脚本需使用loadbuffer函数进行加载该脚本。

2. 动态跟踪解密函数流程。

启动游戏后,动态调试该so,loadbuffer上一步的操作为其解密函数跟踪分析。(最终跳转的函数为bt_decrypt)

1.getFileData函数

2.doGetFileData

3.bt_decrypt函数

3. 静态分析解密函数流程。

1.分析bt_decrypt函数,有明显的头部判断操作。

分析其操作为读取第八位后即1,左移两位1<<2 == 4 在加40的位移 刚好4c对应的操作及函数_Z13decrypt_basicPhi

2.分析decrypt_basic函数,有过滤掉前32位无效操作以及读取第九位作为偏移量进行函数操作。

偏移的函数列表

3.分析各个函数操作,以encrypt_hash_odd为例。(主要对HASH_BITS进行操作,步骤2中的解密最后需要改哈希表进行异或解密)

4.原理总结:读取加密脚本的第九位判断,使用对应偏移函数对哈希表前32字节进行操作,最后将修改的位数填充到哈希表128位。完成对哈希表的操作,使用该哈希表进行异或解密。

4.编写解密程序解密脚本文件夹验证

解密后结果可以直接看到lua源码

posted @ 2017-07-20 11:14  loz2015  阅读(9293)  评论(1编辑  收藏  举报