转载:《FRIDA系列文章》github 地址:https://github.com/r0ysue/AndroidSecurityStudy
由 Frida 提供的很棒的 项目、库和工具的精选列表:https://github.com/dweinstein/awesome-frida
《Frida操作手册》:https://github.com/hookmaster/frida-all-in-one
A. 环境准备 和 入门篇
01.Android环境准备:谷歌原版镜像8.1、TWRP、Magisk root
:https://github.com/r0ysue/AndroidSecurityStudy/blob/master/FRIDA/A01/README.md
02.一篇文章带你领悟frida的精髓(基于安卓8.1)
:https://github.com/r0ysue/AndroidSecurityStudy/blob/master/FRIDA/A02/README.md
frida 是啥?
frida 为什么这么火?
frida 实操环境
基本能力Ⅰ:hook参数、修改结果
基本能力Ⅱ:参数构造、方法重载、隐藏函数的处理
中级能力:远程调用
高级能力:互联互通、动态修改
B. FRIDA 脚本篇
枚举所有的类、定位目标类并打印类的实例、枚举所有方法并定位方法
- 01. FRIDA脚本系列(一)入门篇:在安卓8.1上dump蓝牙接口和实例:https://github.com/r0ysue/AndroidSecurityStudy/blob/master/FRIDA/B01/README.md
hook 方法的所有重载、类的所有方法、类的所有子类、本地库的导出函数
- 02.FRIDA脚本系列(二)成长篇:动静态结合逆向WhatsApp:https://github.com/r0ysue/AndroidSecurityStudy/blob/master/FRIDA/B02/README.md
- 03.FRIDA脚本系列(三)超神篇:百度AI“调教”抖音AI
- 04.FRIDA脚本系列(四)更新篇:几个主要机制的大更新
C. FRIDA API 篇
frida 变量类型 ( Data Types, Function and Callback )
:https://frida.re/docs/javascript-api/
索引 | API | 含义 |
---|---|---|
1 | new Int64(v) | 定义一个有符号Int64类型的变量值为v,参数v可以是字符串或者以0x开头的的十六进制值 |
2 | new UInt64(v) | 定义一个无符号Int64类型的变量值为v,参数v可以是字符串或者以0x开头的的十六进制值 |
3 | new NativePointer(s) | 定义一个指针,指针地址为s ( NativePointer对象 等价于 C语言中的指针 ) |
4 | ptr(“0”) | 同上 |
代码示例以及效果
Java.perform(function () {console.log("");console.log("new Int64(1):"+new Int64(1));console.log("new UInt64(1):"+new UInt64(1));console.log("new NativePointer(0xEC644071):"+new NativePointer(0xEC644071));console.log("new ptr('0xEC644071'):"+new ptr(0xEC644071));
});输出效果如下:new Int64(1):1new UInt64(1):1new NativePointer(0xEC644071):0xec644071new ptr('0xEC644071'):0xec644071
frida
也为 Int64(v)
提供了一些相关的 API:
索引 | API | 含义 |
---|---|---|
1 | add(rhs)、sub(rhs)、and(rhs)、or(rhs)、xor(rhs) | 加、减、逻辑运算 |
2 | shr(N)、shl(n) | 向右/向左移位n位生成新的Int64 |
3 | Compare(Rhs) | 返回整数比较结果 |
4 | toNumber() | 转换为数字 |
5 | toString([radix=10]) | 转换为可选基数的字符串(默认为10) |
使用案例,代码如下。
function hello_type() {Java.perform(function () {console.log("");//8888 + 1 = 8889console.log("8888 + 1:"+new Int64("8888").add(1));//8888 - 1 = 8887console.log("8888 - 1:"+new Int64("8888").sub(1));//8888 << 1 = 4444console.log("8888 << 1:"+new Int64("8888").shr(1));//8888 == 22 = 1 1是falseconsole.log("8888 == 22:"+new Int64("8888").compare(22));//转stringconsole.log("8888 toString:"+new Int64("8888").toString());});
}
拦截 java 层函数
- 01. FRIDA-API使用篇:FRIDA输出打印、frida变量类型、rpc、Process、Module、Memory 使用方法及示例:https://www.anquanke.com/post/id/195215
拦截 SO 层函数
- 02. FRIDA-API使用篇:Java、Interceptor、NativePointer(Function/Callback) 使用方法及示例:https://www.anquanke.com/post/id/195869
03. Frida Java Hook 详解(安卓9):代码及示例(上):https://mp.weixin.qq.com/s/2BdX-rtAu8WZuzY3pK94NQ
FRIDA SCRIPT的"hello world"
"hello world"脚本代码示例
"hello world"脚本代码示例详解
Java层拦截普通方法
拦截普通方法脚本示例
执行拦截普通方法脚本示例
Java层拦截构造函数
拦截构造函数脚本代码示例
拦截构造函数脚本代码示例解详解
Java层拦截方法重载
拦截方法重载脚本代码示例
Java层拦截构造对象参数
拦截构造对象参数脚本示例
Java层修改成员变量的值以及函数的返回值
修改成员变量的值以及函数的返回值脚本代码示例
修改成员变量的值以及函数的返回值之小实战
04. Frida Java Hook 详解(安卓9):代码及示例(下):https://mp.weixin.qq.com/s/heK_r0zXo_6_RoA37yPtGQ
Java层拦截内部类函数
Java层枚举所有的类并定位类
Java层枚举类的所有方法并定位方法
Java层拦截方法的所有方法重载
Java层拦截类的所有方法
Java层拦截类的所有子类
RPC远程调用Java层函数
D. 实用 FRIDA 篇
01. 实用 FRIDA 进阶:内存漫游、hook anywhere、抓包:https://www.anquanke.com/post/id/197657
1 内存漫游
1.1 获取基本信息
1.2 提取内存信息
1.3 内存堆搜索与执行
1.4 启动activity或service
2 Frida hook anywhere
2.1 objection(内存漫游)
2.2 objection(hook)
2.3 ZenTracer(hook)
3 Frida用于抓包
3.1 推荐抓包环境
3.2 Http(s)多场景分析
3.3 SSL Pinning Bypass
3.4 Socket多场景分析
02. 实用 FRIDA 进阶:脱壳、自动化、实用问题集锦:https://www.anquanke.com/post/id/197670
1 Frida用于脱壳
1.1 文件头搜dex
1.2 DexClassLoader:objection
1.3 暴力搜内存:DEXDump
1.4 暴力搜内存:objection
2 Frida用于自动化
2.1 连接多台设备
2.2 互联互通
2.3 远程调用(RPC)
3 Frida更多技巧
3.1 必须上版本管理
3.2 反调试基本思路
3.3 非标准端口连接
3.4 打印byte[]``[B
3.5 hook管理子进程
3.6 hook混淆方法名
3.7 中文参数问题
3.8 hook主动注册
3.9 追踪JNI API
3.10 延迟hook
03. 实用 FRIDA 进阶:主动调用,密码克星
《FART系列文章》
源码系列
2020年安卓源码编译指南及FART脱壳机谷歌全设备镜像发布
:https://www.anquanke.com/post/id/199898
简介&&引言
2020年的AOSP源码编译指南
选择编译目标:安卓10
选择虚拟机编译
选择Kali Linux操作系统
选择清华源初始包
准备编译环境
开始动手编译
编译成功
FART自动脱壳机全设备镜像制作
加入FART代码
制作镜像刷机
FART 源码解析 及 编译镜像支持到 Pixel2(xl)
:https://www.anquanke.com/post/id/201896
镜像编译
源码解析
第一组件:脱壳
第二组件:转存函数体
第三组件:函数体填充
链接:https://pan.baidu.com/s/1zAYliYbkagdUUsykww_L4g 提取码:vv5u)
XPOSED 魔改一:获取特征
:https://github.com/r0ysue/AndroidSecurityStudy/blob/master/FART/xposed1.md
Kali Linux 虚拟机下载种子在 FART/文件夹中
OPPOSRC:来自高纬的对抗系列
- 来自高纬的对抗①:定制ART解释器脱所有一二代壳 (附件)
- 来自高纬的对抗②:魔改XPOSED过框架检测(上)
- 来自高纬的对抗③:魔改XPOSED过框架检测(下)(附件1、附件2)
- 来自高纬的对抗④:定制安卓内核过反调试(附件:链接:https://pan.baidu.com/s/1zAYliYbkagdUUsykww_L4g 提取码:vv5u])
- 来自高纬的对抗⑤:替换安卓内核并解封Linux命令和环境(附件)
进击的Coder:精品连载
- 安卓 App 逆向课程一之环境配置
- 精品连载丨安卓 App 逆向课程之二逆向神器 frida 的介绍
- 精品连载丨安卓 App 逆向课程之三 frida 注入 Okhttp 抓包上篇
- 精品连载丨安卓 App 逆向课程之四 frida 注入 Okhttp 抓包中篇
- 精品连载丨安卓 App 逆向课程之五 frida 注入 Okhttp 抓包下篇