Android安全之Frida Hook框架浅析
2022-7-31 10:2:41 Author: 哆啦安全(查看原文) 阅读量:68 收藏


理论基础

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逆向分析速成培训班(定制专业的安全手机)

推荐阅读

Android逆向渗透测试实用清单

强烈推荐APP破解常用工具集合!

防止Java反编译的一些常用方法(建议收藏)

零基础培训课程+技术指导服务(技术交流社群)

零基础学编程/零基础学安全/零基础学逆向实战速成培训班

强烈推荐Google系列Android机型(Android逆向的最佳机型)

2022全球20多款知名的Android刷机ROM镜像和Android系统开源源码(覆盖全球机型)

商务合作、进群添加微信

 


文章来源: http://mp.weixin.qq.com/s?__biz=Mzg2NzUzNzk1Mw==&mid=2247493450&idx=1&sn=c80bac553cf7ab133170b0cea408df2d&chksm=ceb8a204f9cf2b1266e35b297f481140564f06dd5d1daba2e717c0f736526f303062c30d294d#rd
如有侵权请联系:admin#unsafe.sh