frida框架

简介

Frida是一款基于python + javascript 的hook框架,适用于android/ios/linux/win/osx等平台。Frida的动态代码执行功能,主要是在它的核心引擎Gum中用C语言来实现的。

  1. 注入模式:大部分情况下,我们都是附加到一个已经运行到进程,或者是在程序启动到时候进行劫持,然后再在目标进程中运行我们的代码逻辑。这种方式是Frida最常用的使用方式。注入模式的大致实现思路是这样的,带有GumJS的Frida核心引擎被打包成一个动态连接库,然后把这个动态连接库注入到目标进程中,同时提供了一个双向通信通道,这样控制端就可以和注入的模块进行通信了,在不需要的时候,还可以在目标进程中把这个注入的模块给卸载掉。
  2. 嵌入模式:针对没root过的设备Frida提供了一个动态连接库组件 frida-gadget, 可以把这个动态库集成到程序里面来使用Frida的动态执行功能。一旦集成了gadget,就可以和程序使用Frida进行交互。
  3. 预加载模式:自动加载Js文件。
    在这里插入图片描述

环境搭建

  1. 下载FRIDA
    直接安装frida和frida-tools的最新版本
pip install frida
pip install frida-tools


紧接着查看自己frida版本:
frida --version


然后查看自己的目标机架构版本,但有些可能不能显示出目标机架构版本,所以我直接到客户端:

在这里插入图片描述
模拟器版本: 7.0.1.0005-7.1.2700210226
系统版本: Windows10-64bit-8cpu
电脑型号: ASUSTeK COMPUTER INC.-TUF Gaming FX505DT_FX95DT
CPU: AMD Ryzen 7 3750H with Radeon Vega Mobile Gfx
总内存: 15809MB
可用内存: 8615MB
是否开启VT: 开启
渲染模式: OpenGL+
OpenGL版本: 4.6.0 NVIDIA 431.87
OpenGL渲染: GeForce GTX 1650/PCIe/SSE2
是否独显: 开启
显卡1: NVIDIA GeForce GTX 1650
显卡2: AMD Radeon™ RX Vega 10 Graphics
防火墙: 开启(推荐关闭)
安装路径: D:\夜神模拟器\Nox\bin
日志文件路径: C:\Users\ASUS\AppData\Local\Nox
模拟器磁盘大小: 总共 64G, 剩余 61G

在这里插入图片描述
64位程序执行不起来,所以的话frida-server下载32位

  1. 下载frida-server
    去github上下载frida-server,网址为 https://github.com/frida/frida/releasesfrida-server 是一个守护进程,通过TCP和Frida核心引擎通信,默认的监听端口是27042
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

adb devices

在这里插入图片描述

  1. 解压后,使用adb将frida-server放到手机目录/data/local/tmp,然后修改属性为可执行
adb push G:\buuctf\frida-server-14.2.2-android-x86\fs  data/local/tmp/frida-server_test						

在这里插入图片描述

注意点1:

使用push指令,这里注意点,如果是新安装的夜神模拟器,那么会遇到这个报错:

adb: error: failed to copy 'G:\buuctf\frida-server-14.2.14-android-x86_64\fs_Rui' to 
'data\local\tmp\fs_Rui': couldn't create file: Read-only file system

在这里插入图片描述
文件系统仅仅可读。

  1. 在夜神模拟器中查看/proc/mounts文件里面的目录的权限,确定是否缺少w权限,如果是的话,那么在proc目录下执行以下代码:
mount -o remount,rw /

(一般到这里就可以试试push指令能不能用了,因为报错是文件系统的原因)

  1. 执行以下命令
adb remount
adb root

注意点2:

linux下的目录(后者是linux目录)都是反斜杠,写正的没用。

错误写法:
adb push  G:\buuctf\frida-server-14.2.14-android-x86_64\fs_Rui data\local\tmp\fs_Rui
正确写法:
adb push G:\buuctf\frida-server-14.2.2-android-x86\fs  data/local/tmp/frida-server_test
adb shell //进入模拟器
exit//退出模拟器

//以下均为linux命令行 
su
cd data/local/tmp
chmod 777 frida-server_test

在这里插入图片描述

  1. 启动手机上的frida服务器,记得要以root权限启动,
./frida-server_test

在这里插入图片描述

  1. 在windows主机上另外开启一个cmd,输入命令 frida-ps -U ,这行命令是列出手机上所有的进程信息,如果出现进程信息则说明环境搭配成功:
frida-ps -U

在这里插入图片描述

疑问点

但是我这里利用脱壳脚本,去连接frida-server,直接连接不上
在这里插入图片描述
求救

脱壳已解决

  1. 第一个问题:未进行端口转发
adb forward tcp:27042 tcp:27042
adb forward tcp:27043 tcp:27043
  1. 第二个问题:sdk中的adb和夜神中的abd版本不合。。adb server version (31) doesn’t match this client (36),以至于每次一使用脚本连接,然后frida-server就会挂掉,然后就出现了上方的报错,只需要把sdk的adb复制一份放在夜神里面就行喽

在这里插入图片描述

没有SDK环境的报错

在这里插入图片描述

  1. 解码
D:\桌面\apktool.jar d D:\桌面\02.apk -o targetappFolder
  1. 将apk重新打包
D:\桌面\apktool.jar  b -o repackaged.apk targetappFolder/
  1. 创建keystore(如果没有的话)
keytool -genkey -v -keystore custom.keystore -alias mykeyaliasname -keyalg RSA -keysize 2048 -validity 10000
  1. 签名
jarsigner -sigalg SHA256withRSA -digestalg SHA1 -keystore custom.keystore -storepass 你的密码 repackaged.apk mykeyaliasname

这个custom.keystore也就是前面所生成的keystore,注意路径问题就行

  1. 验证
jarsigner -verify repackaged.apk	

在这里插入图片描述
在这里插入图片描述

<think>好的,我需要回答用户关于如何使用Frida框架替代Xposed实现方法钩子和功能修改的问题。首先,我得确认用户的需求是什么。他们可能已经了解Xposed,但想转向Frida,可能是因为Frida的动态注入和跨平台支持更好。接下来,我需要解释Frida的基本原理,比如基于注入和JavaScript脚本进行Hook。 然后,我需要分步骤说明如何安装Frida,包括安装Python包、服务器端工具以及设备上的运行环境。这部分要确保用户能顺利搭建环境,避免常见错误,比如设备连接问题或者版本不兼容。 接下来,实际操作部分很重要。需要给出具体的代码示例,比如使用JavaScript脚本进行方法Hook,并修改参数或返回值。同时,要说明如何运行脚本,包括命令行参数和常见选项。这部分代码必须正确无误,语法正确,用户可以直接复制使用。 此外,还要比较Frida和Xposed的优缺点,帮助用户理解在什么情况下选择Frida更合适。比如,Frida不需要修改系统或重启,适合动态分析和临时修改,而Xposed更适合持久的模块化修改。 用户可能会遇到的一些问题,比如如何选择Hook的时机,或者处理混淆后的方法名,这里需要给出建议,比如使用模糊匹配或动态获取方法名。同时,安全性方面的问题也需要提醒,比如检测Frida的存在。 最后,生成的相关问题要覆盖用户可能进一步想了解的内容,比如逆向工程、绕过SSL Pinning、动态分析等,这样可以帮助他们扩展知识面。 需要确保整个回答结构清晰,步骤明确,代码示例正确,并且引用相关资源供用户参考。同时,语言要简洁,用中文表达,避免专业术语过多,必要时进行解释。</think># 使用 Frida 框架实现方法钩子与功能修改 ## 一、Frida 框架核心原理 Frida 通过动态代码注入技术实现方法拦截,其核心组件包括: 1. **注入引擎**:将 JavaScript 运行时注入目标进程 2. **通信管道**:通过 TCP/WebSocket 与宿主程序交互 3. **多平台支持**:覆盖 Android/iOS/Windows/Linux 等系统 与 Xposed 的对比: | 特性 | Frida | Xposed | |---------------------|--------------|----------------| | 修改方式 | 动态注入 | 系统框架修改 | | 是否需要重启 | 否 | 是 | | 支持平台 | 跨平台 | 仅 Android | | 开发语言 | JavaScript | Java | ## 二、环境搭建步骤 1. 安装 Python 环境: ```bash pip install frida-tools ``` 2. 下载设备端守护程序: ```bash # 查看设备架构 adb shell getprop ro.product.cpu.abi # 下载对应版本 # https://github.com/frida/frida/releases adb push frida-server-16.1.7-android-arm64 /data/local/tmp/ adb shell "chmod 755 /data/local/tmp/frida-server-16.1.7-android-arm64" adb shell "/data/local/tmp/frida-server-16.1.7-android-arm64 &" ``` 3. 验证连接: ```bash frida-ps -U ``` ## 三、Hook 实现方法 ### 1. Java 层方法拦截 ```javascript Java.perform(function () { // 拦截 Activity 类的 onCreate 方法 var Activity = Java.use("android.app.Activity"); Activity.onCreate.overload("android.os.Bundle").implementation = function (bundle) { console.log("[*] Activity.onCreate() called"); this.onCreate(bundle); // 调用原始方法 }; // 修改字符串返回值 var System = Java.use("java.lang.System"); System.getProperty.overload("java.lang.String").implementation = function (key) { if (key === "http.agent") { return "Frida Modified Agent"; } return this.getProperty(key); }; }); ``` ### 2. Native 层函数 Hook ```javascript Interceptor.attach(Module.findExportByName("libc.so", "strstr"), { onEnter: function (args) { this.arg0 = args[0]; this.arg1 = args[1]; }, onLeave: function (retval) { if (this.arg1.readCString() === "sensitive_string") { retval.replace(ptr(0)); // 修改返回值 } } }); ``` ## 四、实战应用技巧 1. **动态类加载处理**: ```javascript Java.enumerateClassLoaders({ onMatch: function (loader) { try { Java.classFactory.loader = loader; var targetClass = Java.use("com.example.SecretClass"); // Hook 逻辑... } catch (e) {} }, onComplete: function () {} }); ``` 2. **内存操作技巧**: ```javascript var base = Module.findBaseAddress("libtarget.so"); var offset = 0x1234; var funcPtr = base.add(offset); Interceptor.replace(funcPtr, new NativeCallback(function (param) { return 0xBADCODE; // 替换函数实现 }, "int", ["int"])); ``` 3. **RPC 远程调用支持**: ```javascript rpc.exports = { decryptString: function (encrypted) { var result = ... // 解密逻辑 return result; } }; // Python 端调用示例 session = frida.get_usb_device().attach(app_name) script = session.create_script(...) print(script.exports.decryptstring("ENCRYPTED_DATA")) ``` ## 五、调试与优化建议 1. 使用 `frida-trace` 快速追踪方法: ```bash frida-trace -U -i "open" com.example.app ``` 2. 内存泄漏检测: ```javascript // 在回调结束时释放资源 onLeave: function(retval) { this.arg0.release(); // 手动释放指针 } ``` 3. 性能优化方案: - 使用 `WeakRef` 处理 Java 对象引用 - 避免在 Hook 回调中执行复杂逻辑 - 启用 `--runtime=v8` 提升执行效率
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寻梦&之璐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值