▒ 目录 ▒
- 🛫 导读
- 开发环境
- 1️⃣ 环境搭建
- 安装Android模拟器
- 安装Frida CLI
- 安装Frida Server
- 端口重定向:`adb forward`
- 2️⃣ 运行测试
- `spwan`模式
- `attach`模式
- 直接加载脚本
- 📖 参考资料
🛫 导读
开发环境
版本号 | 描述 | |
---|---|---|
文章日期 | 2024-03-24 | |
操作系统 | Win11 - 22H2 | 22621.2715 |
node -v | v20.10.0 | |
npm -v | 10.2.3 | |
python | 3.9.9 | |
frida | 16.2.1 | |
frida-tools | 12.3.0 | |
objection | 1.11.0 | |
1️⃣ 环境搭建
注意:我们首先确定使用的各种版本,参考上面的《开发环境》。
安装Android模拟器
为了方便后续学习,这里使用夜神模拟器
7.0.5.8
做为目标系统,安装Android9
系统,如下图所示:
我们需要注意:
- 为了避免使用中的各种问题,我们开启Android的
root权限
。nox_adb.exe
是夜神自带的adb,我们复制一份,并命名为adb.exe
。- 保证全局只有一个adb.exe,多个版本adb会导致不同软件同时使用时,出现各种异常。
安装Frida CLI
这里以常见的Python方式进行安装。
方式一:
objection
objection是基于frida的三方工具,包含了很多方便的功能。
之前听说objection跟frida有版本冲突,但是直接安装objection,就可以顺便安装frida相关工具,避免冲突问题,所以我们直接执行pip install objection
即可。版本列表如下图所示:
方式二:
frida-tools
这种方式是官方提供的方式,直接执行pip install frida-tools
,需要注意与objection版本的冲突问题。
ps: 除了python方式,我们还可以使用node方式,执行命令
npm install -g frida-tools
。
安装Frida Server
由于上小节中,我们使用的frida版本是
16.2.1
,在开发机器上下载适用于Android设备的Frida Server版本,下载地址为:https://github.com/frida/frida/releases/tag/16.2.1。
下载前,我们需要先通过adb命令查看系统的架构。执行命令adb shell getprop ro.product.cpu.abi
,可以看到,架构是x86_64
所以,我们需要下载frida-server-16.2.1-android-x86_64.xz
接着,我们需要连接Android设备到计算机,并使用adb将Frida Server推送到设备上:
# fs就是frida-server的缩写
adb push frida-server-16.2.1-android-x86_64 /data/local/tmp/fs
最后,在设备上通过adb shell,运行Frida Server:
adb shell
cd /data/local/tmp/
chmod +x fs
./frida-server &
端口重定向:adb forward
使用adb端口转发将本地端口与Android设备上运行的Frida Server端口连接起来:
adb forward tcp:27042 tcp:27042
2️⃣ 运行测试
Frida操作App的方式有两种。
第一种是spwan
模式,简而言之就是将启动App的权利交由Frida来控制。采用这个模式时,即使目标App已经启动,在使用Frida注入程序时还是会重新启动App。在CLI模式中,Frida通过加上-f
参数指定包名以spwan模式操作App。
第二种是attach
模式,建立在目标App已经启动的情况下,Frida通过ptrace注入程序从而执行Hook的操作。在CLI模式中,Frida通过加上-N
参数指定包名以attach模式注入App。
下面我们以系统自带的
设置工具
(包名为com.android.settings
)为例,进行测试。
ps: 旧的frida版本,不添加任何参数,则默认会通过attach模式注入App。
spwan
模式
spwan
模式会自己启动目标软件com.android.settings
,所以我们不必启动该软件,直接执行frida.exe -U -f com.android.settings
即可。
运行后,我们执行js命令,打印[*] 开始执行 Hello World
。
Java.perform(function() {
console.log("[*] 开始执行 Hello World");
});
attach
模式
该模式不会启动目标进程,当进程不存在的时候,直接执行
frida.exe -U -N com.android.settings
会报下面的错误:
只有按照下面的步骤启动设置后,再执行
frida.exe -U -N com.android.settings
才能附加到进程上,然后进行交互。
直接加载脚本
通常,我们会编写脚本,然后直接加载脚本,方便测试。
frida.exe -U -l .\01_手把手教你环境搭建\index.js -N com.android.settings
效果如下:
📖 参考资料
- frida 常见问题和报错https://crifan.github.io/reverse_debug_frida/website/summary_note/common_issue/
- objection地址:https://github.com/sensepost/objection
ps: 文章中内容仅用于技术交流,请勿用于违规违法行为。