# Frida 基础
# 安装
需要把 frida-serve push 到对应的 tmp 文件夹中
adb push myfs14218 /data/local/tmp/ | |
adb shell | |
su | |
cd /data/local/tmp/ | |
chmod 777 对应frida-serve的名字 | |
./对应frida-serve的名字+& | |
//cmd 端口转发 | |
adb forward tcp:27043 tcp:27043 | |
adb forward tcp:27042 tcp:27042 |
# Frida 介绍
frida 操作 app 的方式有两种:
- spawn (调用模式), 通过 frida 启动 app
- attach (附加模式), 对已启动的 app 通过 ptrace 原理注入程序
两种注入方式主要是时机不同
# spawn | |
frida -U --no-pause -f app -l hook.js | |
# attach | |
frida -U -l test.js app |
# HOOK
原理就是在函数运行前,进行动态二进制插桩,很关注时机。
# python
import frida | |
import sys | |
def on_message(message, data): | |
if message['type'] == 'send': | |
print("[*] {0}".format(message['payload'])) | |
else: | |
print(message) | |
test_signature = ''' | |
js代码 | |
''' | |
# 启动方式 1 attachH 后跟进程名 | |
process = frida.get_usb_device(-1).attach('com.chaozhuo.texteditor') | |
script = process.create_script(test_signature) | |
script.on('message', on_message) | |
script.load() | |
sys.stdin.read() |
本质上写 Js 代码即可。
process = frida.get_usb_device().enumerate_processes() | |
#可以查看当前运行的进程名 | |
print(process) |
也可以直接 adb 查看进程,这里条件可以任意,为 com.xxx 皆可,目的是缩小范围.
adb shell "ps | grep 条件" |
# 重载的代码 hook
以该处为例,该类中有两个 a 方法,我们只想 hook 上面一个,直接写就会报错。
这样,我们只需要等他报错后,修改代码即可。
// 加上.overload ('a.u$a') | |
Signature.a.overload('a.u$a').implementation = function(val){ | |
console.log('enter a'); | |
console.log(val); | |
return this.a(val); | |
}; |
以上是对于调用的函数进行 hook,得到的,还有一种情况,就是方法没有被调用,我们想查看他的方法,拿到其结果,那么我们可以采用 Java.choose (类名 + 回调)。
也可以考虑直接编写 js 脚本进行 frida.
// 打印出当前手机上的进程 | |
frida-ps -Ua | |
//后面的是进程名,只需要在jsl | |
frida -U -l test.js com.example.simpleencryption |
# Objection
Objection 本质上是 frida 的一种工具实现,可以通过命令行输出,实现 frida 交互过程,达到类调用,hook 的目的。
# 安装
由于 frida 版本是 14.1.3,直接 pip install objection 即可
# 使用
// 注入代码 | |
objection -g 进程名 explore --startup-command "android root disable" <在启动前注入命令> |
- 寻找包名 frida-ps -U | grep 参数
- Objection 注入
- android hooking search classes [类名]
- android hooking search methods <key>[关键词] (从所有内存中加载)
- android hooking list class methods 包名 + 类名 (列出所有的方法)
- android hooking list 组件
- android hooking watch class_method <methodName>(hook 指定方法) --dump-args --dump-backtrace --dump-return
- jobs list (查看作业,显示 hook 的函数的信息)
- job kill <id> 删除作业
- memory list modules
如果要 hook 构造方法 需要使用 $init