frida学习--01:安装与简单使用

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--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

相关推荐

统帅产品质量评测(揭秘统帅产品品质)
英国beat365官方登录

统帅产品质量评测(揭秘统帅产品品质)

📅 07-08 👁️ 2413
《国风 · 魏风 · 汾沮洳》 原文
365网新闻

《国风 · 魏风 · 汾沮洳》 原文

📅 08-12 👁️ 3881
十大象棋软件排行榜 象棋游戏哪个比较好 与电脑下象棋的软件推荐
游戏行业的投资方法论 一、游戏行业值得投资不个人认为值得,理由有六:1、游戏是虚拟产品,强规模效应,边际成本趋于零,成功产品利润率极高,少数带...
健身房的健身运动口号标语2
中爱365APP

健身房的健身运动口号标语2

📅 07-10 👁️ 8455
这是因为
英国beat365官方登录

这是因为

📅 07-23 👁️ 5208
2019上海国际宠博会暨2019世界杯犬展
365网新闻

2019上海国际宠博会暨2019世界杯犬展

📅 08-12 👁️ 9335
英雄联盟手游赏金猎人厄运小姐资料大全 技能属性
麻将的历史和起源
英国beat365官方登录

麻将的历史和起源

📅 07-07 👁️ 6150
拼多多机构入驻需要多久通过
中爱365APP

拼多多机构入驻需要多久通过

📅 08-03 👁️ 5350
狗为什么喜欢食用人粪?深入了解宠物行为背后的原因
芭樂買回家別急著放冰箱!農業部教1招延長保存期限:千萬不要用水清洗