安卓:frida hook 和 ida 调试 so 库的环境配置
按照这个顺序来布置一下安卓环境
- 编译一个安卓程序:带 native 层的
- 配置 frida 环境调试程序
- 配置 ida 调试 native 层
感觉版本还是很魔幻的,有些问题换了一个版本就莫名奇妙好了。
写安卓程序
如果 app install 没有让 app 在桌面显示:adb install问题
frida
配置
-
模拟器需要选择 “Google API” 而不是 “Google play” 版本
如果是 android studio 模拟的话,选择 “ Google API” 的版本才能开启 root,否则报错 android - ADB root is not working on emulator (cannot run as root in production builds) - Stack Overflow
-
usb debugging 调试的话要先 开启 usb debugging
-
安装 frida 安装 frida 参考 Frida 初体验
frida 和 frida-tools 的版本有对应关系 frida 与 frida-tools 对应关系,如果需要降级 frida 的话,二者需要对应版本安装。
最终是用 android 14(模拟器)+ 最新版本的 frida 16.7.0 来做的。
hook 脚本
-
写脚本
参考的是这个文档来写 hook 脚本:frida的用法–Hook Java代码()你敢信?把 javascript 注入到 java 代码里面来 hook?
使用 frida 脚本可以做到修改返回值修改参数等等的功能。
对于 native 层的代码:参考可以 hook 导出函数,对于没有导出的函数可以用偏移去找函数指针:
var ptr_func = new NativePointer(n_addr_func);
如果参数拿到的是指针,想打印指针指向的内容,可以使用 Java.cast 方式来转换:frida hook常用函数分享 - 吾爱破解 - 52pojie.cn,比如
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 跟踪的。
ida 调试
我的环境是 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 的状态和端口转发。