Frida 安装与入门

这年头不会用这个, 就有点low了

下载

Server 下载

  1. 先查看设备平台,在官网下载对应 server 版本

    1
    adb shell getprop ro.product.cpu.abi
  2. Sever 端官方网址

  3. adb push server路径 /data/local/tmp/frida-server 推入设备
  4. 设置权限

    1
    2
    3
    4
    adb shell
    su
    cd /data/local/tmp
    chmod 777 frida-server
  5. 启动 ./frida-server 或者后台启动 ./frida-server &

  6. 如果检测不到 server 端,就转发一下端口
    1
    adb forward tcp:27042 tcp:27042

客户端下载

这里推荐一个版本套装 12.8.0 比较稳定, 当然也可以直接 pip install 安装最新版

  • python >= 3.7.0
  • pip install frida==12.8.0
  • pip install frida-tools==5.3.0
  • pip install objection==1.8.4

常用命令

  • frida-ps --help 查看帮助
  • ./frida -l 0.0.0.0:9898 手机端自定义端口启动
  • frida -H 192.168.31.218:9898 -f com.android.settings -l test.js --no-pause 自端口 hook并启动app
  • frida -H 192.168.31.218:9898 com.android.settings -l test.js 挂到已开启的app上
  • -H host 指定端口
  • -f file 指定包文件运行
  • -l load 读取指定js文件
  • --no-pause 启动后自动启动主线程(开启后直接注入 指定js,并启动app)
  • frida-ps -H 192.168.x.x:xxxx 手机端开启的程序

RPC 混合连接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import frida
import sys
import os


class HookManager:
def __init__(self, arg, Flag):
self.arg = arg
self.js_code = ''
self.JS_FILE = 'jscode/'
self.load_js()
if flag: self.log = open('log/' + arg + '.txt', 'w+', encoding='utf-8')

def load_js(self):
file_names = os.listdir(self.JS_FILE)
for filename in file_names:
print('载入:' + filename)
with open(self.JS_FILE + filename, 'r', encoding='utf-8') as f:
self.js_code += f.read()
print('\n')

def message(self, msg, data):
if msg["type"] == 'send':
print(u"[*] {0}".format(msg['payload']))
if not self.log: return
self.log.write(u"[*] {0}\n".format(msg['payload']))
self.log.flush()
else:
print(msg)

def hooking(self, host):
try:
process = frida.get_device_manager().add_remote_device(host).attach(self.arg)
# one devices use
# process = frida.get_remote_device(host).attach(self.arg)
script = process.create_script(self.js_code)
script.on("message", self.message)
script.load()
sys.stdin.read()
except frida.ServerNotRunningError:
print('没有开启对应app, 或没有开启映射端口')

def close(self):
self.log.close()


if __name__ == '__main__':

bak = "com.example.test"
host_list = [
"192.168.191.2:9898",
]

flag = True if len(host_list) ==1 else flag == False # 只有一台机子的时候默认是调试模式, 多台就是控制模式
hk = HookManager(bak, flag)

for host in host_list:
hk.hooking(host)

hk.close()

Frida 接口暴露至外网

  1. 使用插件NPS https://github.com/ehang-io/nps 或者 Frp https://github.com/ehang-io/nps
  2. 按照教程配置 NPS
  3. 可以添加数百台电脑
  4. 也可以用python rpc 来远程公网群控

官方使用案例