吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 353|回复: 4
收起左侧

[Android 求助] frida-gadget,静态注入,执行内置hook.js问题求助

[复制链接]
milisianna 发表于 2026-7-17 09:43
本帖最后由 milisianna 于 2026-7-17 09:50 编辑

目标app没有加固,libfrida-gadget.so、libfrida-gadget.config.so、hook.js都放到app的lib/arm64-v8a里面,libfrida-gadget.config.so配置为listen模式时可以通过电脑启动frida执行电脑上的hook.js脚本
{
  "interaction": {
    "type": "listen",
    "address": "0.0.0.0",
    "port": 27042
  }
}

如果使用本地脚本模式没办法执行脚本,修改"path": "lib/arm64-v8a/hook.js",为"path": "hook.js"也不行
{
  "interaction": {
    "type": "script",
    "path": "lib/arm64-v8a/hook.js"
  }
}
有没有成功的,指导一下

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

yc19951005 发表于 2026-7-17 11:17
# Frida Gadget 本地script模式加载失败完整解决方案(arm64-v8a 打包内置场景)
## 核心根源
Android 里 `lib/arm64-v8a` 目录是**Native库目录**,**不支持直接读取该目录下的 js 文件**:
1. 系统权限隔离:`.so` 能被 dlopen 加载,但应用运行时无法以文件路径访问 lib 目录内普通文本;
2. Gadget 的 `script` 模式读取 `path` 是走**常规文件IO**,不是 Native 库加载逻辑;
3. 你填 `lib/arm64-v8a/hook.js` / `hook.js` 都找不到文件,路径全部无效。

## 两种可行方案(按推荐度排序)
## 方案一:把 hook.js 放进 assets 目录(最稳定,推荐)
### 1. 目录结构
```
APK根目录
└── assets
    └── hook.js          # 脚本放这里
└── lib
    └── arm64-v8a
        ├── libfrida-gadget.so
        └── libfrida-gadget.config.so
```

### 2. gadget.config 正确配置
不能直接填 assets 路径,Android 运行时 assets 不是真实文件路径,需要**代码读取assets写入私有存储**,或改用 Gadget 支持的特殊写法/预释放。
### 最简实现(二选一)
#### 方式A:启动时Java代码把assets/hook.js复制到 /data/data/包名/files/
```java
// Application onCreate 里执行
try {
    InputStream is = getAssets().open("hook.js");
    File out = new File(getFilesDir(), "hook.js");
    FileOutputStream os = new FileOutputStream(out);
    byte[] buf = new byte[4096];
    int len;
    while ((len = is.read(buf)) > 0) os.write(buf, 8, len);
    os.close();
    is.close();
} catch (Exception e) {e.printStackTrace();}
```
然后 config 写绝对私有路径:
```json
{
  "interaction": {
    "type": "script",
    "path": "/data/data/你的应用包名/files/hook.js"
  }
}
```

#### 方式B:不想改Java代码 → 用listen模式(你当前能跑的方案)
listen 完全绕开本地文件读取问题,电脑 frida -H 设备IP:27042 -l hook.js,无路径坑,适合调试。

## 方案二:把 hook.js 嵌入so,编译进gadget(纯Native无Java修改)
1. 将 hook.js 以资源形式编译到自定义 gadget 或封装成 .so;
2. 在 gadget 初始化阶段释放 js 到应用私有目录;
门槛高,适合无源码加固场景,新手不推荐。

## 方案三:临时折中 —— push 文件到私有目录(调试用)
1. 安装内置gadget的apk
2. adb push hook.js /data/data/包名/files/
3. config path 写绝对路径 `/data/data/包名/files/hook.js`
重启APP即可加载成功。

# 为什么你两种path写法全部失效
1. `"path":"lib/arm64-v8a/hook.js"`
   APP运行工作目录不在APK根,相对路径找不到lib目录;且lib目录禁止普通文件IO读取。
2. `"path":"hook.js"`
   会去进程当前工作目录(通常 `/` 或 `/` 下无权限)查找,不存在。

# 避坑补充关键点
1. **不要把js塞进lib文件夹**:lib仅存放ELF动态库,文本文件无法被文件API访问,这是Android系统机制限制,不是gadget bug;
2. listen模式无文件路径问题原理:gadget只开启socket监听,脚本由PC端下发,不走本地文件读取;
3. 权限校验:`/data/data/包名/files/` 是应用私有读写目录,无需额外授权,gadget可读;
4. 打包注意:assets目录打包时不要压缩,部分打包工具压缩assets会导致读取失败。

# 快速测试流程(验证是否路径问题)
1. adb shell
2. su
3. cd /data/data/包名/lib/arm64-v8a
4. ls hook.js
能看到文件,但执行 `cat hook.js` 大概率权限拒绝,直接证明lib目录不能读普通文件。
Vvvvvoid 发表于 2026-7-17 14:35
我成功过, 只不过是 mac 的 app ;
```
{
  "interaction": {
    "type": "script",
    "path": "/path/to/workspace/scripts/cipher.js",
    "on_change": "reload"
  }
}
```
niheibie 发表于 2026-7-17 15:32
{
  "interaction": {
    "type": "script",
    "path": "hook.so"
  }
}

hook.so 里面写上你的脚本内容

libfrida-gadget.so
libfrida-gadget.config.so
hook.so
这三个放在一起
 楼主| milisianna 发表于 2026-7-17 17:01
niheibie 发表于 2026-7-17 15:32
{
  "interaction": {
    "type": "script",

hook.so是由hook.js直接改名吗,我测试了也不行,我手机没有root
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-7-26 10:33

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表