这一个hook工具。
该工具分为服务端和客户端,手机最好要root,否则很多函数hook不了。没root需要magisk。
前置条件是安装python。pip注意换个源。安装frida全家桶。
1
| pip install frida-tools objection frida-dexdump apkid
|
| 包名 |
作用 |
命令入口 |
frida-tools |
Frida 官方命令行工具 |
frida、frida-ps、frida-trace |
objection |
基于 Frida 的运行时探索工具(免写脚本) |
objection |
frida-dexdump |
从内存中 dump 脱壳后的 dex |
frida-dexdump |
apkid |
APK 查壳/识别加固类型 |
apkid |
安装后输入frida –version不能用,是因为该工具安装在python的scripts中,但是这个路径没被加入系统PATH,用以下指令查看目录
1 2 3 4
| python -c "import frida_tools; print(frida_tools.__file__)" C:\Users\test>python -c "import frida_tools; print(frida_tools.__file__)" C:\Users\test\AppData\Roaming\Python\Python314\site-packages\frida_tools\__init__.py
|
结果路径将C:\Users\test\AppData\Roaming\Python\Python314\Scripts添加到系统PATH中即可。
将服务端推送到手机上
1 2
| frida --version adb shell getprop ro.product.cpu.abi
|
得到结果frida版本是17.24.3,CPU架构是x86_64,去发行版 · frida/frida下载
frida-server-17.24.3-android-x86_64.xz,然后解压推送过去
1
| adb -s 127.0.0.1:16384 push D:\data\code\APK\frida-server-17.24.3-android-x86_64\frida-server-17.24.3-android-x86_64 /data/local/tmp
|
进入adb shell的这个目录下,启动服务
1
| ./frida-server-17.24.3-android-x86_64
|
如果没有root权限,则要开启root权限。
mumu开启root权限,模拟器设置中打开root权限和将磁盘共享改成可写系统盘。
然后重启 adbd(Android Debug Bridge Daemon)并以 root 权限运行。
1
| adb -s 127.0.0.1:16384 root
|
进入shell启动服务端
1 2 3 4 5
| a55x:/ # cd /data/local/tmp a55x:/data/local/tmp # ls frida-server-17.24.3-android-x86_64 a55x:/data/local/tmp # chmod 755 frida-server-17.24.3-android-x86_64 a55x:/data/local/tmp # ./frida-server-17.24.3-android-x86_64
|
测试本地frida连接
1 2 3 4 5 6
| 建立转发:PC 的 27042 → 设备的 27042 adb -s 127.0.0.1:16384 forward --list
通过本地 27042 端口连接设备上的 Frida-server frida-ps -H 127.0.0.1:27042
|
| 部分 |
说明 |
frida-ps |
Frida 自带的进程列表工具,用于查看目标设备/系统上运行的进程 |
-H |
--host 的缩写,指定通过 TCP/IP 网络连接(而不是 USB/adb) |
127.0.0.1:27042 |
连接地址:本地回环地址 + Frida-server 的端口 |
如果是本地数据线连接,就是frida-ps -U
说明:frida被用的太多了,厂商都做了检测,后续可以找一找其他的魔改版本,比如hluda。
frida常见指令参数
连接与设备选择
| 参数 |
全称 |
作用 |
-U |
--usb |
连接 USB 设备(手机接电脑,靠 frida-server 通信) |
-H |
--host <host> |
连接远程 frida-server(如 -H 192.168.1.10:27042) |
-D |
--device <id> |
多设备时指定设备 ID |
-R |
--remote |
连接远程 frida-server(默认 127.0.0.1:27042) |
目标进程选择
| 参数 |
全称 |
作用 |
-f |
--file <包名> |
Spawn 模式:从零启动目标 App 并注入(启动前就挂上 Hook) |
-F |
--attach-frontmost |
附加到当前前台 App |
-n |
--attach-name <名称> |
按进程名附加到已运行进程 |
-p |
--attach-pid <PID> |
按 PID 附加到已运行进程 |
-N |
--attach-application |
按包名附加到已运行 App |
脚本加载与执行
| 参数 |
全称 |
作用 |
-l |
--load <js> |
加载本地 JS 注入脚本(可多次 -l 加载多个) |
-e |
--eval <code> |
直接执行一行 JS 代码(如 -e "console.log(1)") |
-c |
--codeshare <uri> |
加载 CodeShare 上的脚本 |
-s |
--script <js> |
指定脚本(同 -l,兼容旧版本) |
启动行为控制
| 参数 |
全称 |
作用 |
--no-pause |
— |
Spawn 后不暂停,App 自动继续跑(否则要手动 %resume) |
--pause |
— |
Spawn 后暂停等待(默认行为) |
-w |
--wait |
等待进程出现后再附加(配合 -f 使用) |
输出与日志
| 参数 |
全称 |
作用 |
-o |
--output <文件> |
将输出日志写入文件 |
-q |
--quiet |
静默模式(跑完脚本就退出) |
-v |
--verbose |
显示详细信息(调试用) |
--runtime |
— |
指定运行时(qjs / v8) |
--realm |
— |
指定 Realm(native / emulated) |
辅助工具
| 命令 |
全称 |
作用 |
frida-ps -U |
— |
列出 USB 设备上的进程 |
frida-ps -Uai |
— |
列出已安装 App(含未运行) |
frida-ls-devices |
— |
列出所有可用设备 |
frida-trace -U -i <函数> |
— |
快速跟踪函数调用 |