frida学习--01:安装与简单使用
frida安装
推荐安装以下版本
pip install frida==14.2.18
pip install frida-tools==9.2.5
pip install objection==1.8.4
frida-server安装
-
安装的frida版本:需要下载与安装的frida版本对应的frida-server,否则会出错
C:\Users\Administrator>frida --version
12.2.25
-
手机设备的架构
从 https://github.com/frida/frida/releases 中获取对应安装版本的 frida-server
# 先查看设备平台,然后在官网下载对应 server 版本
adb shell getprop ro.product.cpu.abi # 查看设备CPU
# 获取架构信息后,再与安装的Frida版本结合,便可前去Github下载
# 其Frida-server文件命名格式如下:
# frida-server-<Frida版本>-android-<设备架构版本>.xz
# 下载完毕之后,解压后通过adb push到设备的临时目录下
adb push [电脑端frida-server路径] /data/local/tmp/fs
adb shell
su
cd /data/local/tmp
chmod 777 fs # 文件权限修改
./fs # 启动frida-server
./fs -l 0.0.0.0:8888 # 监听端口就这样启动
-
启动frida服务并连接
然后 进行端口转发
adb forward tcp:27042 tcp:27042
adb forward tcp:27043 tcp:27043 -
完毕后,可以在windows上运行简单的frida命令测试我们是否安装成功了
frida-ps -U
frida 使用
-
代码内置在python文件中
# -*- coding: UTF-8 -*- import frida,sys js_code = ''' Java.perform(function(){ console.log("Frida Test"); var cls = Java.use("cn.gemini.k.fridatest.FridaHook1"); cls.func1_add.implementation = function(arg1,arg2){ console.log("hook arg1:",arg1," hook arg2:",arg2); return this.func1_add(arg1,arg2); } }); ''' # 目标包名 appPacknName = "cn.gemini.k.fridatest" scriptFile = "hook_script.js" # 输出日志的回调方法 def on_message(message, data): if message['type'] == 'send': print("[*] {0}".format(message['payload'])) else: print(message) device = frida.get_usb_device() # spawn模式,找到目标包名并重启,在启动前注入脚本 pid = device.spawn([appPacknName]) session = device.attach(pid) # 注意这里需要将device.attach(pid)这句代码写在前面,这样执行才符合预期(启动时程序白屏,等待下面这行代码来恢复执行) # 其实在https://www.jianshu.com/p/b833fba1bffe这篇文章中有提到 device.resume(pid) # 方式一: 通过js文件创建hook代码 #with open(scriptFile, encoding='UTF-8') as f : # script = session.create_script(f.read()) # 方式二: 直接将hook代码写在python文件中 script = session.create_script(js_code) script.on('message', on_message) script.load() #把js代码注入到目标应用中 # 避免结束 sys.stdin.read() -
封装js文件
hook_script.js代码如下function main(){ Java.perform(function(){ console.log("Frida Test"); var cls = Java.use("cn.gemini.k.fridatest.FridaHook1"); cls.func1_add.implementation = function(arg1,arg2){ console.log("hook arg1:",arg1," hook arg2:",arg2); return this.func1_add(arg1,arg2); } }); } setImmediate(main)load2.py代码如下
# -*- coding: UTF-8 -*- import frida,sys # 目标包名 appPacknName = "cn.gemini.k.fridatest" scriptFile = "hook_script.js" # 输出日志的回调方法 def on_message(message, data): if message['type'] == 'send': print("[*] {0}".format(message['payload'])) else: print(message) device = frida.get_usb_device() # spawn模式,找到目标包名并重启,在启动前注入脚本 pid = device.spawn([appPacknName]) session = device.attach(pid) # 注意这里需要将device.attach(pid)这句代码写在前面,这样执行才符合预期(启动时程序白屏,等待下面这行代码来恢复执行) # 其实在https://www.jianshu.com/p/b833fba1bffe这篇文章中有提到 device.resume(pid) # 方式一: 通过js文件创建hook代码 with open(scriptFile, encoding='UTF-8') as f : script = session.create_script(f.read()) # 方式二: 直接将hook代码写在python文件中 # script = session.create_script(js_code) script.on("message", on_message) script.load() #把js代码注入到目标应用中 # 避免结束 sys.stdin.read()运行结果如下
// frida打印日志 λ python load2.py Frida Test hook arg1: 1 hook arg2: 2 // APP程序执行打印日志 19493-19493/cn.gemini.k.fridatest E/func1_add: arg1:1 arg2:2 19493-19493/cn.gemini.k.fridatest E/FridaHook1: 一般方法 ret:3

浙公网安备 33010602011771号