转载:《FRIDA系列文章》github 地址:https://github.com/r0ysue/AndroidSecurityStudy
由 Frida 提供的很棒的 项目、库和工具的精选列表:https://github.com/dweinstein/awesome-frida
《Frida操作手册》:https://github.com/hookmaster/frida-all-in-one
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参数、修改结果
基本能力Ⅱ:参数构造、方法重载、隐藏函数的处理
中级能力:远程调用
高级能力:互联互通、动态修改
: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):1
new UInt64(1):1
new NativePointer(0xEC644071):0xec644071
new 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 = 8889
console.log("8888 + 1:"+new Int64("8888").add(1));
//8888 - 1 = 8887
console.log("8888 - 1:"+new Int64("8888").sub(1));
//8888 << 1 = 4444
console.log("8888 << 1:"+new Int64("8888").shr(1));
//8888 == 22 = 1 1是false
console.log("8888 == 22:"+new Int64("8888").compare(22));
//转string
console.log("8888 toString:"+new Int64("8888").toString());
});
}
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层函数
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 进阶:主动调用,密码克星
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/文件夹中