# 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

image-20220423112839478

以该处为例,该类中有两个 a 方法,我们只想 hook 上面一个,直接写就会报错。

image-20220423113034693

这样,我们只需要等他报错后,修改代码即可。

// 加上.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" <在启动前注入命令>
  1. 寻找包名 frida-ps -U | grep 参数
  2. Objection 注入
  3. android hooking search classes [类名]
  4. android hooking search methods <key>[关键词] (从所有内存中加载)
  5. android hooking list class methods 包名 + 类名 (列出所有的方法)
  6. android hooking list 组件
  7. android hooking watch class_method <methodName>(hook 指定方法) --dump-args --dump-backtrace --dump-return
  8. jobs list (查看作业,显示 hook 的函数的信息)
  9. job kill <id> 删除作业
  10. memory list modules

如果要 hook 构造方法 需要使用 $init

Edited on

Give me a cup of [coffee]~( ̄▽ ̄)~*

Mr2 WeChat Pay

WeChat Pay