《 FRIDA系列文章 》

袁凌
2023-12-01

转载:《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 脚本篇

枚举所有的类、定位目标类并打印类的实例、枚举所有方法并定位方法

hook 方法的所有重载、类的所有方法、类的所有子类、本地库的导出函数

C. FRIDA API 篇

frida 变量类型 ( Data Types, Function and Callback )

https://frida.re/docs/javascript-api/

索引API含义
1new Int64(v)定义一个有符号Int64类型的变量值为v,参数v可以是字符串或者以0x开头的的十六进制值
2new UInt64(v)定义一个无符号Int64类型的变量值为v,参数v可以是字符串或者以0x开头的的十六进制值
3new NativePointer(s)定义一个指针,指针地址为s  ( NativePointer对象  等价于  C语言中的指针
4ptr(“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含义
1add(rhs)、sub(rhs)、and(rhs)、or(rhs)、xor(rhs)加、减、逻辑运算
2shr(N)、shl(n)向右/向左移位n位生成新的Int64
3Compare(Rhs)返回整数比较结果
4toNumber()转换为数字
5toString([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());
    });
}

拦截 java 层函数

拦截 SO 层函数

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:来自高纬的对抗系列

进击的Coder:精品连载

 类似资料: