【APP安全测试】Frida 基础

一、Frida 简单介绍

本质上是一个动态插桩框架 ,核心能力是在不修改 APK 的前提下,向运行中的 Android 进程注入 JavaScript 脚本,从而拦截、观察、修改 Java 方法或 Native 函数。

原理:

  • frida-server 通过 ptrace 等方式附加到目标进程。
  • 在目标进程中分配可执行内存,注入 Frida Agent。
  • Agent 在进程内启动 JavaScript 引擎,并与电脑端建立通信通道。
  • 你写的 JS 脚本被下发到目标进程执行,通过 Interceptor、Java.use 等 API 劫持函数。
  • Java 层 Hook 主要靠 Frida 的 Java Bridge 与 ART/Dalvik 交互;Native 层 Hook 则直接操作 so 库中的函数地址。

二、下载安装

Frida 是 C/S 架构:电脑端是客户端,需要在 Android 设备上运行 frida-server。frida-server 可以通过下面的链接下载:

https://github.com/frida/frida

  1. 推送 frida-server 到安卓设备中
bash 复制代码
adb -s 127.0.0.1:16384 root
adb -s 127.0.0.1:16384 push frida-server-17.23.3-android-arm64 /data/local/tmp/frida-server
  1. 给 frida-server 授权执行权限
bash 复制代码
adb -s 127.0.0.1:16384 shell "chmod 755 /data/local/tmp/frida-server"
  1. 打印版本号测试
bash 复制代码
adb -s 127.0.0.1:16384 shell "/data/local/tmp/frida-server --version"
  1. 后台拉起 frida server
bash 复制代码
adb -s 127.0.0.1:16384 shell "nohup /data/local/tmp/frida-server >/dev/null 2>&1 &"
  1. 查看运行情况
bash 复制代码
adb -s 127.0.0.1:16384 shell "ps -A | grep frida"
  1. 下载 frida 连接客户端
    注:要与服务器版本一致
bash 复制代码
pip install -U frida==17.23.3 frida-tools

三、使用

模式

hook 启动阶段逻辑

bash 复制代码
frida -U -f com.example.app -l hook.js --no-pause

App 已经在运行了,Frida 通过 ptrace 附加到现有进程上注入。

bash 复制代码
frida -U -n com.example.app -l hook.js

Frida API

API 作用 常用场景
Java.perform(fn) 在 Java 运行时执行回调 Java Hook 入口
Java.use(className) 获取 Java 类的 JS 包装对象 定位目标类
Java.cast(obj, cls) 把对象强转为指定类型 接口/父类转具体实现
Java.choose(className, cb) 枚举堆上已有实例 找存活对象、调用实例方法
Java.enumerateLoadedClasses(cb) 枚举已加载类 找隐藏类、动态加载类
Java.enumerateClassLoaders(cb) 枚举类加载器 多 Dex、壳、插件场景
Java.array(type, values) 创建 Java 数组 给 Java 方法传数组参数

Frida 绕 Root

场景: APP 通过判断 su 命令执行情况,来判断设备是否 root

那么,我们可以通过下面的代码定位 String 方法重载,然后使用 implementation 替换其实现:

bash 复制代码
var Runtime = Java.use("java.lang.Runtime");
Runtime.exec.overload("java.lang.String").implementation = function (cmd) {
    if (cmd === "su") throw Java.use("java.io.IOException").$new("not found");
    return this.exec(cmd);
};
相关推荐
文章永久免费只为良心10 小时前
Web应用安全与防护_第三章_日志文件包含_从一道 CTFshow 题目讲透「日志投毒型 LFI → RCE」:原理、时序陷阱与全变种攻防手册
android·网络安全·渗透测试·漏洞危害·漏洞描述·日志投毒·红队指南
塞讯科技11 小时前
13,500 个分支被植入窃密工作流:Gheist 如何用 GitHub 令牌搬走仓库密钥
网络安全·ai·github·软件供应链安全·供应链投毒
学逆向的1 天前
C++ 合并命名空间
开发语言·c++·网络安全
学逆向的1 天前
C 局部静态变量
c语言·开发语言·网络安全
杭州默安科技1 天前
从“被动响应”到“主动遏制”:AI Agent时代,网络防御体系如何重构?
人工智能·网络安全·ai智能体
砚凝霜1 天前
[CTF Misc 图片隐写] misc1:文件末尾追加 flag(strings 一秒出 flag,附原理)
网络安全
Gnevergiveup1 天前
ATT&CK红蓝对抗实战指南-Windows安全基础
笔记·网络安全
白帽攻防录2 天前
某pc客户端app从xss到rce实战案例
前端·网络安全·黑客·xss·rce·src漏洞·app漏洞
学网安的肆伍2 天前
认证机制攻防学习|PortSwigger Authentication 靶场复现总结(二):用户名枚举进阶
学习·web安全·网络安全·burpsuite·portswigger·认证安全·靶场复现
网络小江2 天前
组网第41课:ACL 门禁——标准/扩展、规则顺序、time-range、in/out 方向
运维·网络安全·acl·访问列表·in/out