jshook 中文文档 下载 App

file 文件读写——读写目标应用沙箱及外部存储

基础用法

// 读文件
var content = file.read('/sdcard/Download/test.txt');
console.log('[+] 文件内容: ' + content);

// 写文件
file.write('/sdcard/Download/output.txt', 'Hello JsHook');

支持的路径

JsHook 运行在目标应用进程内,所以它的文件访问权限和目标应用一致:

如果开了内核驱动模式,JsHook 的守护进程可以以 root 身份读写任何路径,不受目标应用权限限制。

读取目标应用的 SharedPreferences

目标应用的配置文件存在沙箱的 shared_prefs/ 目录下,格式是 XML:

var prefs = file.read('/data/data/com.example.app/shared_prefs/config.xml');
console.log('[+] SharedPreferences: ' + prefs);

保存调试日志

调试过程中可以把日志写到文件里,方便事后翻:

file.write('/sdcard/jshook-debug.log', JSON.stringify({
    time: Date.now(),
    event: 'gold-changed',
    detail: { old: oldGold, new: newGold }
}));

追加写入

file.append('/sdcard/jshook-debug.log', '\n更多日志...');

文件列表

var files = file.list('/sdcard/Download/');
files.forEach(function (f) {
    console.log('[+] ' + f.name + ' (' + f.size + ' bytes)');
});

注意事项

路径要写完整

// 错误
file.read('Download/test.txt');

// 正确
file.read('/sdcard/Download/test.txt');

外部存储权限

Android 10+ 的分区存储(Scoped Storage)下,即使目标应用声明了存储权限,也不一定能直接访问任意路径。尽量用目标应用自己的沙箱路径。

二进制文件

JsHook 的 file 模块主要面向文本读写。读二进制文件可能需要转 base64:

var binaryContent = file.read('/data/data/com.example.app/databases/app.db');
var base64Content = base64.encode(binaryContent);

和 Frida File API 的区别

Frida 原生 API 也有文件读写,但 JsApi 的 file 模块更贴近 Android 沙箱结构、对中文路径和特殊字符处理更稳。日常使用优先用 JsApi。