理论基础
frida框架是一款hook框架,基于动态二进制插桩技术,在使用frida时只需要将自行编写的javascript代码通过python脚本注入到所要分析的程序并且和frida_server端进行交互进程中即可。
frida还是一款易用的跨平台工具,原生支持Win、Mac、Linux、Android、iOS等平台,并且支持java层和native层的hook,它的动态和灵活对逆向自动化分析支持非常好,虽然frida在持久化方面还有些不足,但由于其简单、跨平台的特性,在程序黑盒调试发挥出来强大的作用促使它变得的火爆和强大。
框架构成
Frida官网信息
https://frida.re/
Frida介绍文档
https://frida.re/docs/home/
Frida框架源码
https://github.com/frida
Frida框架的核心是C语言开发的,同时它有多种语言绑定例如 Node.js、JavaScript、Python、Swift、.NET等等。
Frida目前主流的使用方式,都是使用python或javaScript去编写frida脚本,并且js的异常处理机制非常棒相比于其他语言更高效好用。
Firda的框架源码的核心组成部分。
1、frida-core: Frida的核心库,它是vala语言开发
2、frida-gum: inline-hook框架,它是C语言开发
3、frida-python: 用于支持python
4、frida-node: 用于支持Node.js
5、frida-qml: 用于支持Qml
6、frida-swift: 用于支持Swift
7、frida-tools: CLI tools
8、capstone: instruction disammbler
frida-core
frida-core它是frida主要的功能源码部分,它的功能有进程注入、进程间通信、会话管理、脚本生命周期管理等功能,屏蔽部分底层的实现细节并给最终用户提供开箱即用的操作接口。它还包含了 frida 相关的大部分关键模块和组件,比如 frida-server、frida-gadget、frida-agent、frida-helper、frida-inject 以及之间的互相通信功能。
frida-gum
frida-gum是基于inline-hook实现的,它还有很多丰富的功能,
例如用于代码跟踪 Stalker、用于内存访问监控的
MemoryAccessMonitor,以及符号查找、栈回溯实现、内存扫描、动态代码生成和重定位等。
frida-server
在手机上启动的server,和pc端连接,启动frida-helper,与frida-helper保持dbus连接
frida-server启动的时候,会在/data/local/tmp想生成一个目录,释放Frida-helper 和frida-agent
frida-helper
frida-helper保持dbus连接,主要负责进程附加,so文件注入
通过frida-agent-<arch>.so
注入到进程中的文件,内含v8,执行各种hook操作等
HOOK原理
1.注入进程: 借助ptrace、dlopen系统函数
2.hook 目标函数
2.1 Java Hook
Static Field Hook:静态成员hook
Method Hook:函数hook
2.2 Native So Hook
GOT Hook:全局偏移表hook
SYM Hook:符号表hook
Inline Hook:函数内联hook
执行自身代码
获取敏感信息
修改返回值
函数拦截 : 拦截到函数后 , 可以分析函数的参数 , 返回值 , 得到被拦截函数的处理逻辑 ;
分析逻辑 : 拦截函数 , 数据 , 分析函数之间的承接关系 , 整体分析应用逻辑 ;
分析数据 : 分析 字符串 , 整数 , 浮点数 数据 , 找出 字符串拼接规律 , 加密逻辑 , 接口访问规律 ;
frida注入的主要思路就是找到目标进程,使用ptrace跟踪目标进程获取mmap,dlpoen,dlsym等函数库的便宜获取mmap在目标进程申请一段内存空间将在目标进程中找到存放[frida-agent-32/64.so]的空间启动执行各种操作由agent去实现。
frida注入之后会在远端进程分配一段内存将agent拷贝过去并在目标进程中执行代码,执行完成后会 detach 目标进程,这也是为什么在 frida 先连接上目标进程后还可以用gdb/ida等调试器连接,而先gdb连接进程后 frida 就无法再次连上的原因(frida在注入时只会ptrace一下下注入完毕后就会结束ptrace所以ptrace占坑这种反调试使用spawn方式启动即可)。
frida-agent 注入到目标进程并启动后会启动一个新进程与 host 进行通信,从而 host 可以给目标进行发送命令,比如执行代码,激活/关闭 hook,同时也能接收到目标进程的执行返回以及异步事件信息等。
脚本推荐
Frida中强大之处在于可以通过基于框架进行开发出各种强大的hook功能脚本,下面是平时用到比较多的一些脚本可以借鉴学习。
https://github.com/lasting-yang/frida_dump
https://github.com/lmangani/node_ssl_logger
https://github.com/hluwa/frida-dexdump
https://github.com/lateautumn4lin/AwsomeReverseTools
https://github.com/lymbin/frida-scripts
https://github.com/azurda/frida-dump
https://github.com/lasting-yang/frida_hook_libart
https://github.com/hanbinglengyue/FridaManager
https://github.com/CrackerCat/strong-frida
https://github.com/Ch0pin/medusa
结束
参考借鉴
https://bbs.pediy.com/thread-273450.htm
Android10系统定制之frida逆向分析速成培训班(定制专业的安全手机)
推荐阅读
强烈推荐Google系列Android机型(Android逆向的最佳机型)
2022全球20多款知名的Android刷机ROM镜像和Android系统开源源码(覆盖全球机型)
商务合作、进群添加微信