frida教程(一)
首先,frida
是啥,github目录Awesome Frida这样介绍frida
的:
Frida is Greasemonkey for native apps, or, put in more technical terms, it’s a dynamic code instrumentation toolkit. It lets you inject snippets of JavaScript into native apps that run on Windows, Mac, Linux, iOS and Android. Frida is an open source software.
frida
是平台原生app
的Greasemonkey
,说的专业一点,就是一种动态插桩工具,可以插入一些代码到原生app
的内存空间去,(动态地监视和修改其行为),这些原生平台可以是Win
、Mac
、Linux
、Android
或者iOS
。而且frida
还是开源的。
安装
- 安装pc工具
建议使用python虚拟环境
venv — 创建虚拟环境 — Python 3.10.7 文档
python3 -m venv ./frida_venv |
然后在虚拟环境中安装frida
cd ./frida_venv |
- 查看工具版本
firda --version |
- 根据客户端版本下载service
Releases · frida/frida (github.com)
根据机器的架构下载对应的版本
- 将service push 到 机器中
adb push .\frida-server-15.2.2-android-x86_64 /data/local/tmp
adb shell # 进入安卓系统
系统内操作
su # root 模式进入 |
pc 端验证服务是否启动成功
frida-ps -U |
成功后会显示所有进程
IDE 环境搭建
工具:vscode
API提示:
可以在package.json
中安装"@types/frida-gum": "^18.1.0",
,或者可以直接在官方的demo上进行修改
官方demo:
oleavr/frida-agent-example: Example Frida agent written in TypeScript (github.com)
然后在控制台中输入npm install
就会自动安装Frida 开发工具包
Hello world
api 脚本:
JavaScript API | Frida • A world-class dynamic instrumentation framework
创建一个ts脚本helloworld.ts
function hello_world(){ |
setImmediate
:
在Frida 的JavaScript线程上循环调用hello_world
这个方法setTimeout
:
1s后,在Frida 的JavaScript线程上调用hello_world
这个方法
执行脚本:
frida -U -l .\helloworld.ts 应用报名 |
在这里,我们使用的attch方式启动脚本
控制台输出:
Hook JAVA方法
JavaScript API | Frida • A world-class dynamic instrumentation framework
进入JVM环境
打印所有加载的类
function showAllLoadedClass() { |
Java.perform
:
让当前线程进入附加到JVM中,
Java.enumerateLoadedClasses
:
使用Frida的enumerateLoadedClasses
方法,枚举当前所有加载的类
控制台输出:
Hook方法
function hookResume() { |
Java.use
: 查找实例
控制台输出:
每当Activity执行onResume
方法后就会抛出异常
获取对象
利用 Java.choose 来寻找堆上实例化的对象。
function getObject() { |
控制台输出:
可以在控制台看到View的信息
使用对象
function useJavaFun(){ |
控制台输出:
获取成员变量
var d = this._d;//获取成员属性d |
通过反射获取所有成员变量
var fields = Java.cast(this.getClass(),Java.use('java.lang.Class')).getDeclaredFields(); |
获取一个就把getDeclaredFields() 改成 getDeclaredField(‘FieldName’);
同上。记得开启强制读取以及是否为空。否则容易报错碍眼。