安卓:frida hook 和 ida 调试 so 库的环境配置

按照这个顺序来布置一下安卓环境

  1. 编译一个安卓程序:带 native 层的
  2. 配置 frida 环境调试程序
  3. 配置 ida 调试 native 层

感觉版本还是很魔幻的,有些问题换了一个版本就莫名奇妙好了。

如果 app install 没有让 app 在桌面显示:adb install问题

最终是用 android 14(模拟器)+ 最新版本的 frida 16.7.0 来做的。

  • 写脚本

    参考的是这个文档来写 hook 脚本:frida的用法–Hook Java代码()你敢信?把 javascript 注入到 java 代码里面来 hook?

    使用 frida 脚本可以做到修改返回值修改参数等等的功能。

    对于 native 层的代码:参考可以 hook 导出函数,对于没有导出的函数可以用偏移去找函数指针: var ptr_func = new NativePointer(n_addr_func);

    如果参数拿到的是指针,想打印指针指向的内容,可以使用 Java.cast 方式来转换:frida hook常用函数分享 - 吾爱破解 - 52pojie.cn,比如

    js

    function jstring2Str(jstring) {
       var ret;
       Java.perform(function() {
           var String = Java.use("java.lang.String");
           ret = Java.cast(jstring, String);
       });
       return ret;
    }
  • 看看 frida 实现原理

    关于原理,有一个很好的讲解原理的文章:从trace到二进制插桩到Frida

    frida 不仅仅可以在安卓,也可以在多个平台,多种文件。有多种实现方式,最常见的一种实现是不需要长期的 ptrace 跟踪的。

我的环境是 andoird 11 真机 + ida 8.3

参考

  • ida 版本

    ida 的版本也是有点问题。9 没法用,8 可以。

  • ddms

    需要使用 ddms 工具,这个是旧版 android studio 的工具,安装的方式是:

    • Android Studio → Tools → SDK Manager → SDK Tools 选项卡。
    • 勾选 Android SDK Tools (Obsolete)(旧版工具),点击 Apply 安装。

    用 ddms 可以方便来看 debug 的状态和端口转发。