Frida安装与apk脱壳脚本使用

本文介绍了Frida这款跨平台的Hook工具,详细讲解了如何在不同平台上安装Frida,并且探讨了如何利用FRIDA-DEXDump脚本进行APK的脱壳操作,包括使用步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Frida

Frida 是一款基于 Python + JavaScript的 Hook 与调试框架,可运行在Win、Mac、Linux、Android、iOS等平台
它是一款易用的跨平台Hook工具,主要被用作动态二进制插桩技术

1. 安装frida

# 1.安装 python 3.8+

# 2.安装 frida
pip install frida frida-tools

# 3.查看安装版本
frida --version

# 4.下载服务端
adb shell getprop ro.product.cpu.abi # 查询android平台
# 服务端程序下载地址:https://github.com/frida/frida/releases
# android x86 平台 选择 frida-server-16.0.8-android-x86.xz

# 5.执行服务端程序
adb push .\frida-server-16.0.8-android-x86 /data/local/tmp/ # 推送到android
adb root # 获取shell  root
adb chmod 777 /data/local/tmp/frida-server-16.0.8-android-x86 # 添加执行权限
adb shell /data/local/tmp/frida-server-16.0.8-android-x86 # 执行服务程序
adb forward tcp:27042 tcp:27042 #frida 端口转发到本地计算机端口
adb forward tcp:27043 tcp:27043 

# 6.查看是否连接成功
frida-ps -U # 查看所有进程

2. frida -h

PS > frida-ps -h
usage: frida-ps [options]

optional argum
Frida是个轻量级so级别的hook框架,它可以帮助逆向人员对指定的进程的so模块进行分析。它主要提供了功能简单的python接口和功能丰富的js接口,使得hook函数和修改so编程化,值得一提的是接口中包含了主控端目标进程的交互接口,由此我们可以即时获取信息并随时进行修改。使用frida可以获取进程的信息(模块列表,线程列表,库导出函数),可以拦截指定函数和调用指定函数,可以注入代码,总而言之,使用frida我们可以对进程模块进行手术刀式剖析。 它主要的工作方式是将脚本库注入到目标进程,在目标进程执行脚本。这里需要注意的是,它是将脚本库注入到已经启动的进程,但并不是说,对于进程初始化所做的动作,frida无能为力,frida提供了一个接口spawn,可以启动并暂时挂起进程,然后待我们布置好hook代码后再恢复进程运行,但是这个时间很短,大概2秒,也可能是我的使用姿势不对,求大佬指正。 此外,frida提供了相关的文档,但是frida官网提供的关于python接口的文档实在是少的可怜,连工具命令行的参数都没有,这点需要下载frida的python接口的源代码自己去分析了。值得高兴的一点是,Frida官网提供的js接口的文档稍微详细一些,并附有一些可喜的例子。 除了用于脚本编程的接口外,frida还提供了一些简单的工具,比如查看进程列表,追踪某个库函数等。 剩下就是关于frda学习路线了,Frida的学习还是蛮简单的,只需要了解两方面的内容: 1)主控端和目标进程的交互(message) 2)Python接口和js接口(查文档)
### 使用 Frida 对雷电模拟器进行脱壳的操作方法 #### 工具准备 为了实现对雷电模拟器中的应用进行脱壳操作,需要准备好以下工具和环境: - **Frida**: 动态 instrumentation 框架,用于 hook 和修改运行时的行为[^2]。 - **frida-server**: 需要下载并部署到目标环境中,确保其版本雷电模拟器使用Android 版本匹配。 - **雷电模拟器**: 安装并配置好所需的 APK 文件。 --- #### 环境搭建 1. 下载适合雷电模拟器所对应 Android 版本的 `frida-server`。可以从官方 GitHub 发布页面获取最新版本: ```bash wget https://github.com/frida/frida/releases/download/16.0.9/frida-server-16.0.9-android-x86.xz ``` 2. 将下载好的 `frida-server` 解压后放置于雷电模拟器文件系统的 `/data/local/tmp/` 或其他可执行路径下,并赋予可执行权限: ```bash chmod +x /data/local/tmp/frida-server ./data/local/tmp/frida-server & ``` 3. 启动 `frida-server` 并确认它能够正常监听连接请求。 --- #### 实现动态分析脱壳 通过 Frida 的 JavaScript API 可以拦截关键函数调用来绕过保护机制。以下是具体步骤: 1. 编写一个简单的脚本来 hook 加密或校验逻辑的关键函数。例如,假设目标程序使用了 `nativeLoad` 函数加载加密库,则可以编写如下脚本: ```javascript Interceptor.attach(Module.findExportByName(null, "JNI_OnLoad"), { onEnter: function(args) { console.log("[+] JNI_OnLoad called"); }, onLeave: function(retval) { console.log("[+] JNI_OnLoad returned"); } }); Interceptor.attach(Module.findExportByName("libart.so", "_ZN3art7DexFile10OpenMemoryEPKhmRKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEPKNS_10OatDexFileEPS9_PmPb"), { onEnter: function(args) { var dexSize = args[2].toInt32(); var dexBuffer = Memory.readByteArray(args[1], dexSize); console.log("[+] Intercepted DexFile::OpenMemory call with size:", dexSize); // Dump the DEX file to disk var fs = require('fs'); fs.writeFileSync("/sdcard/dumped.dex", Buffer.from(dexBuffer)); } }); ``` 2. 运行上述脚本目标进程绑定: ```bash frida-ps -Uai # 列出当前设备上的所有应用程序及其 PID frida-trace -i "open\|close" com.example.app # 替换为目标包名 frida -U -n com.example.app -l your_script.js --no-pause ``` 3. 当检测到内存中有解密后的数据时,将其保存至本地磁盘以便进一步分析。 --- #### 注意事项 - 确保 `frida-server` 的架构(armeabi-v7a、arm64-v8a、x86、x86_64)雷电模拟器内部虚拟化环境一致。 - 如果遇到 SELinux 导致无法启动服务的情况,可以通过设置 permissive 模式解决: ```bash adb shell setenforce 0 ``` - 不同的应用可能采用不同的加壳方式(如 DEX 层面的加固或者 SO 库级别的混淆),需针对性调整 Hook 点[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值