Post on: 2024-10-7Last edited: 2024-10-10Words 00 min

type
status
date
slug
summary
tags
category
icon
password

1.什么是frida

Frida 是基于 Python + JavaScript 的 Hook 与调试框架的一款开源的动态插桩工具,可以插入一些代码到原生App的内存空间去动态地监视和修改其行为,支持Windows、Mac、Linux、Android或者iOS,从安卓层面来讲,可以实现Java层和NativeHook操作。
 
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的基础知识

notion image
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可在吾爱破解论坛上找到,文件有点大,暂时发不了,难绷)
notion image
第二关是要求收集10个硬币并完成一键三连
notion image
点击获取硬币,硬币数加一
notion image
notion image
收集10个硬币后要解锁大会员才能一键三连
在jadx中分析一下程序
再看看isvip方法
在这里hook实现一键三连后将硬币数设为20,isvip返回true
编写hook代码
用frida注入进行hook
notion image

frida Js基础

1.先来认识一下hook的基本框架
setImmediate 是 Node.js 中提供的一种异步执行的 API,setImmediate 在当前事件循环的结束时执行回调,比 setTimeout(fn, 0) 更快执行,但比 I/O 回调慢。它的执行顺序依赖于事件循环中的阶段,这可看作执行main
2.基础语法
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)
枚举指定类的所有方法。
 

基于python Crypto库的一些加密函数

🗒️基于python Crypto库的一些加密函数

Crypto库的一些api

python的一些知识总结

🗒️python的一些知识总结

python学习