type
status
date
slug
summary
tags
category
icon
password
1.什么是frida
Frida 是基于 Python + JavaScript 的 Hook 与调试框架的一款开源的动态插桩工具,可以插入一些代码到原生App的内存空间去动态地监视和修改其行为,支持Windows、Mac、Linux、Android或者iOS,从安卓层面来讲,可以实现
Java
层和Native
层Hook
操作。frida是基于inline hook的,通过向目标程序注入代码来监控、观察、修改数据。
静态插桩与动态插桩的区别
- 静态二进制插桩:在程序执行前插入额外的代码和数据,生成一个永久改变的可执行文件。
- 动态二进制插桩:在程序运行时实时地插入额外代码和数据,对可执行文件没有任何永久改变。
2.frida和Xposed的对比
工具 | 优点 | 缺点 |
Xposed | 直接编写Java代码,Java层hook方便,可打包模块持久化hook | 环境配置繁琐,兼容性较差,难以Hook底层代码。 |
Frida | 配置简单,免重启hook。支持Java层和Native层的hook操作 | 持久化hook相对麻烦 |
Frida 安装
Frida 分为客户端和服务端。
客户端:PC(控制端)
服务器:手机设备(被控制端)
客户端编写的 Python 代码,用于连接远程设备,提交要注入的 JS 代码到服务端,接受服务端发来的消息。
服务端中需要用 JS 代码注入到目标进程,操作内存数据,给客户端发送消息。
搭建好frida环境后,了解一些frida基础知识
优点:在上面我们可以看到他的优点在于配置环境很简单,操作也很便捷,对于破解者开发阶段非常好用。支持Java层和Native层hook操作,在Native层hook如果是非基本类型的话操作有点麻烦。
缺点:因为他只适用于破解者在开发阶段,也就是他没法像Xposed用于实践生产中,比如我写一个微信外挂用Frida写肯定不行的,因为他无法在手机端运行。也就是破解者用的比较多。
3.一些frida的基础知识
pip 装载在windows上的一些exe文件
-U参数指的是连接到USB的设备
注入模式与启动命令:
注入模式 | 描述 | 命令或参数 | 优点 | 主要用途 |
Spawn模式 | 将启动App的权利交由Frida来控制,即使目标App已经启动,在使用Frida注入程序时还是会重新启动App | 在CLI模式中,Frida通过加上 -f 参数指定包名以spawn模式操作App | 适合于需要在App启动时即进行注入的场景,可以在App启动时即捕获其行为 | 当需要监控App从启动开始的所有行为时使用 |
Attach模式 | 在目标App已经启动的情况下,Frida通过ptrace注入程序从而执行Hook的操作 | 在CLI模式中,如果不添加 -f 参数,则默认会通过attach模式注入App | 适合于已经运行的App,不会重新启动App,对用户体验影响较小 | 在App已经启动,或者我们只关心特定时刻或特定功能的行为时使用 |
Spawn模式
attach模式 :
基于frida的简单hook
frida server 默认端口:27042
先来举个frida简单使用的例子
在这里使用正己大佬的教程demo的第二关做个演示(apk可在吾爱破解论坛上找到,文件有点大,暂时发不了,难绷)
第二关是要求收集10个硬币并完成一键三连
点击获取硬币,硬币数加一
收集10个硬币后要解锁大会员才能一键三连
在jadx中分析一下程序
再看看isvip方法
在这里hook实现一键三连后将硬币数设为20,isvip返回true
编写hook代码
用frida注入进行hook
frida Js基础
1.先来认识一下hook的基本框架
setImmediate
是 Node.js 中提供的一种异步执行的 API,setImmediate
在当前事件循环的结束时执行回调,比 setTimeout(fn, 0)
更快执行,但比 I/O 回调慢。它的执行顺序依赖于事件循环中的阶段,这可看作执行main2.基础语法
API名称 | 描述 |
Java.use(className) | 获取指定的Java类并使其在JavaScript代码中可用。 |
Java.perform(callback) | 确保回调函数在Java的主线程上执行。 |
Java.choose(className, callbacks) | 枚举指定类的所有实例。 |
Java.cast(obj, cls) | 将一个Java对象转换成另一个Java类的实例。 |
Java.enumerateLoadedClasses(callbacks) | 枚举进程中已经加载的所有Java类。 |
Java.enumerateClassLoaders(callbacks) | 枚举进程中存在的所有Java类加载器。 |
Java.enumerateMethods(targetClassMethod) | 枚举指定类的所有方法。 |
- Author:Albert1x
- URL:https://albert-1x.top//article/frida
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!