zoukankan      html  css  js  c++  java
  • 某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源码

  • 相关阅读:
    TCP协议中粘包现象
    python 中socket模块及用法
    网络编程之五层协议
    面向对象的反射和双下方法(魔术方法)
    Centos下的redis安装和使用
    面向对象简介
    supervisor进程管理工具
    redis的持久化
    redis的主从同步及哨兵的用法
    ubuntu修改grub默认启动项
  • 原文地址:https://www.cnblogs.com/konf/p/7209690.html
Copyright © 2011-2022 走看看