转载:《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 抓包下篇

《 FRIDA系列文章 》相关推荐

  1. 数据结构学习系列文章合集

    数据结构学习系列文章目录 前言 1.稀疏数组和队列 稀疏数组和二位数组的转换 数组队列的实现 环形队列的介绍与实现 2.链表 单链表的增.删.改.查 总结 前言 学习数据结构记录,作为自己的笔记,同时 ...

  2. 积少成多 Flash(ActionScript 3.0 Flex 3.0) 系列文章索引

    [源码下载] 积少成多 Flash(ActionScript 3.0 & Flex 3.0) 系列文章索引 作者:webabcd Flash 之 ActionScript 3.0  1.积少成 ...

  3. Scott的ASP.net MVC框架系列文章之四:处理表单数据(2)

    前几周我发表了一系列文章介绍我们正在研究的ASP.NET MVC框架.ASP.NET MVC框架为你提供了一种新的开发Web应用程序的途径,这种途径可以让应用程序变得更加层次清晰,而且更加有利于对代码 ...

  4. Enterprise Library系列文章回顾与总结

    Enterprise Library系列文章回顾与总结 自Enterprise Library 1.1 推出以来,Terry写了一系列的关于Enterprise Library的文章,其中得到了很多朋 ...

  5. 系列文章|OKR与敏捷(三):赋予团队自主权

    OKR与敏捷开发的原理有着相似之处,但已经使用敏捷的团队再用OKR感觉会显得多余.这种误解的根源就在于对这两种模式不够了解,运用得当的情况下,OKR和敏捷可以形成强强联合的效果,他们可以创造出以价值为 ...

  6. 系列文章|OKR与敏捷(二):实现全栈敏捷

    OKR与敏捷开发的原理有着相似之处,但已经使用敏捷的团队再用OKR感觉会显得多余.这种误解的根源就在于对这两种模式不够了解,运用得当的情况下,OKR和敏捷可以形成强强联合的效果,他们可以创造出以价值为 ...

  7. C#网络编程系列文章索引

    1. 网络协议简介 介绍了网络分层: 网络层 数据链路层 网络层 传输层 应用层 2. HTTP协议详解 介绍应用层的HTTP协议,是Asp.net开发人员必须掌握的协议 HTTP请求 HTTP响应 ...

  8. [推荐推荐][提供下载]ORACLE SQL:经典查询练手系列文章收尾(目录篇)

    [推荐推荐][提供下载]ORACLE SQL: 经典查询练手系列文章收尾(目录篇) --通过知识共享树立个人品牌. 通过近一个月的努力,<经典查询练手系列>也快告一段落,但并不代表结束,以 ...

  9. 推荐介绍一项新的工程技术:[威胁建模]的相关系列文章《威胁建模Web 应用程序》...

    以往我们建立和开发web应用,特别是要部署到Internet上的工程项目,都要多多少少考虑一些安全性问题,分析可能存在的漏洞,来决定如何有效防范攻击,但是很少有公司或个人将这种行为活动归结到项目的建模 ...

最新文章

  1. mysql存储过程number类型_MySQL存储过程的基本函数(三)
  2. 目前有量子计算机,中国“祖冲之”刚刚成为当前最强大的量子计算机
  3. linux 系统tar文件压缩打包命令
  4. 科技论文新在哪里?-如何写好科技论文之我见(三)
  5. Pycharm用鼠标滚轮控制字体大小
  6. Java加密与解密的艺术~RSA模型分析
  7. IDEA建立Spring MVC Hello World 详细入门教程
  8. ccf运行错误是什么原因_正压送风机运行中叶轮裂纹产生原因是什么?
  9. Linux命令----系统目录结构
  10. 旅游大数据:从投资决策到分析工作的常态化
  11. 【软考】2018年下半年软件设计师上午试题及答案
  12. leg引擎适合什么系统的服务器,第一讲 LEG引擎服务端更新BLUE引擎
  13. 计算机在环境工程专业中的应用,计算机在环境科学与工程方向的应用.pdf
  14. 10.24程序员节专辑——程序员最爱的数字,1024的秘密
  15. 【渝粤题库】陕西师范大学200031 中国现代文学 作业
  16. IEEE Transactions on Industrial Informatics(TII)投稿指导
  17. 阿里巴巴校招内推简历筛选方案
  18. 矩阵手册(六)—— Cauchy–Schwarz 不等式及其证明
  19. AAE结合resnet的生成器搭建(失败)
  20. JavaScript概述和HTML中嵌入JavaScript的三种方式

热门文章

  1. LeetCode-二叉树算法总结-层次遍历,路径总和等
  2. JAVA:网络编程总结
  3. 如何做一名优秀的电子工程师[zz]
  4. Intel格式与Motorola格式的区别
  5. jQuery使用():Deferred有状态的回调列表(含源码)
  6. c#之using关键字
  7. angular element()
  8. sql server select和set赋值的区别
  9. 标准控件(二)——Calendar
  10. PHP中的中文截取乱码问题_gb2312_utf-8