一。分析app包

  1. 可以使用 apktool 进行拆包,这里不进行打包签名,直接解压,看到有如下等信息。

android setid 动态 ida android动态调试_lua

   2. 进入 assets 查看,发现全部是 lua 文件。

android setid 动态 ida android动态调试_android setid 动态_02

   3. 打开 lua 文件发现已经加密了, 且全部文件都是以 DADDY 开头,可以推测这是 cocos 加载 lua 文件。

android setid 动态 ida android动态调试_lua_03

  4. 打开 lib 里的库文件发现了加载 lua 文件的 .so 二进制文件, 可以知道加密解密 lua 文件就在这里面处理的了。

android setid 动态 ida android动态调试_lua_04

   5. 查看 lib 里只有 arm 架构,所以不能用模拟器调试,需要用真机调试。

android setid 动态 ida android动态调试_lua_05

 二。配置真机调试

  1. 一台 root 的安卓手机,设置里打开 开发者选项,勾选USB调试。

  2. 在 ida 安装目录找到对应的 android_server ,32 位 arm 就是 android_server 

android setid 动态 ida android动态调试_android_06

   3. 把 android_server 拷贝到 安卓手机里面

android setid 动态 ida android动态调试_android setid 动态_07

   4. 以 root 权限进入安卓手机

android setid 动态 ida android动态调试_lua_08

   5. 赋予 android_server 全部权限

android setid 动态 ida android动态调试_lua_09

   6. 启动 android_server

android setid 动态 ida android动态调试_十六进制_10

   7. 下载 mprop ,目的是设置所有 app 可调试

链接:https://pan.baidu.com/s/1bTF2R9S-y0X1qStwZjCohw  密码:7agb

  8. 把对应的 mprop 放到安卓手机里,并以 root 权限进入该目录

android setid 动态 ida android动态调试_十六进制_11

   9. 赋予权限,运行,并设置可调试

android setid 动态 ida android动态调试_十六进制_12

   10. 查看是否可调试成功

android setid 动态 ida android动态调试_android setid 动态_13

   11. 转发本机端口到 安卓 android_server监听的端口

android setid 动态 ida android动态调试_android setid 动态_14

  12. 完成真机环境

三。ida 动态调试

  1. 启动要调试的 app

  2. 打开 ida,选择 GO

android setid 动态 ida android动态调试_android_15

   3. 点击下图 attach 调试

android setid 动态 ida android动态调试_android setid 动态_16

  4.  填写地址和端口,点击确定,因为本地已经转发了端口,所以填 127.0.0.1 ,如果没有转发端口,输入安卓手机的IP

android setid 动态 ida android动态调试_android setid 动态_17

   5. 找到要调试的 进程ID 或者 包名,可以点下方的搜索直接搜, 进程ID和包名可以在安卓里面 ps 看到

android setid 动态 ida android动态调试_android setid 动态_18

   6. 确定之后可以看到该程序的汇编代码,且程序被暂停了

android setid 动态 ida android动态调试_android setid 动态_19

  7. 在想要的地方打上断点,点击左上角的运行,然后就可以操作安卓里的app了,会在执行到断点的地方暂停程序,然后就可以分析了

四。ida 常用功能

  1. 列出程序所加载的所有静态库,即 .so 二进程文件

android setid 动态 ida android动态调试_android setid 动态_20

   2. 在所有静态库中找出要调试的, 这里我们找加载 lua 文件的 so 库,ctrl + f 可以搜索

android setid 动态 ida android动态调试_android_21

   3. 双击进去即可找到该库的所有方法了, ctrl + f 可以搜索

android setid 动态 ida android动态调试_android setid 动态_22

按 F5 可以得到该汇编的伪代码

android setid 动态 ida android动态调试_android_23

可以直接在伪代码中打断点调试

android setid 动态 ida android动态调试_lua_24

   6. 鼠标悬浮在变量上可查看到变量保存在哪个寄存器里和变量的虚拟地址,右边也可以查看寄存器保存的虚拟内存地址

android setid 动态 ida android动态调试_lua_25

   7. 双击变量可以跳到变量存储的值

android setid 动态 ida android动态调试_android setid 动态_26

   8. 右击十六进制视图同步ida视图,即可同步到一起

android setid 动态 ida android动态调试_android_27

 可以在十六进制视图里看到详细的信息

android setid 动态 ida android动态调试_十六进制_28

   9. 右点击十六进制视图可以编辑内存里的值

android setid 动态 ida android动态调试_十六进制_29

 编辑完右点击更新值

android setid 动态 ida android动态调试_十六进制_30

地址保存的是0即为变量的结束地址

android setid 动态 ida android动态调试_android_31

十六进制里的 00 值

 

android setid 动态 ida android动态调试_android setid 动态_32

把内存里的值导出来

android setid 动态 ida android动态调试_十六进制_33

点击run,就可以以导出开始地址到结束地址的内容

 

android setid 动态 ida android动态调试_android_34

static main(void){
    auto fp, dex_addr,end_addr;
    //打开或创建一个文件
    fp = fopen("/Users/zgh/Desktop/111/11.txt", "wb");
    for ( dex_addr = 0xAC6D3058; dex_addr < 0xAC6D336B;    dex_addr ++ ){
      //按字节将其dump到本地文件中
      fputc(Byte(dex_addr), fp);
    }
}

找到 *(_DWORD *) 里的值,也就是指针的值

比如这个 a2,开始地址为 DC7002D4

 

android setid 动态 ida android动态调试_android setid 动态_35

双击可以查看到地址里的内容,局部变量存储在 栈 中,存储的地址为 ad65d2d4

android setid 动态 ida android动态调试_android_36

 右点击跳转地址

android setid 动态 ida android动态调试_lua_37

 输入地址即可跳转

android setid 动态 ida android动态调试_十六进制_38

 跳转后十六进制视图可以查看到值

android setid 动态 ida android动态调试_十六进制_39

  13. 打开另一个窗口的ida,把 so 文件拖进去分析可以得到更加详细的代码信息。

五。逆向分析cocos解密lua流程

  1.  在ida字符串中搜索 sign ,能找到 sign 可以在旁边找到key, 如果搜索不出来说明被优化处理了,接着第2步

  2. 找 luaL_loadbuffer 函数,这个函数出来的内容是已经解密的 lua 文件内容,可以直接导出,如果没有说明也被优化过了,到第三步

  3. 找 xxtea_decrypt 解密函数 和 xxtea_encrypt 加密函数,第一个参数为要加密或者解密的内容,第三个参数是加密或者解密的key ,如过也没有,到第四步

  4. 找 getfiledata 函数,不管怎么优化 so 文件,都必定需要有一个加载 lua 文件的起始 ,就可以顺着往下找加密解密函数以及相关的key了

  5. 注意有可能对 lua 文件做多重加密,所以需要多次解密。

六。参考

https://www.jianshu.com/p/4307cdb4b147

https://www.freebuf.com/articles/network/173217.html