You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Frida中列出目录?基于Frida Gadget的文件系统探查需求

Frida Gadget 实现目录内容遍历函数

因为Frida本身没有内置文件系统操作API,我们可以通过调用目标进程依赖的libc中的目录操作函数(opendir、readdir、closedir)来实现目录内容读取,以下是适配类Unix系统(如Android、Linux)的listdir函数:

function listdir(path) {
    // 绑定libc中的目录操作函数
    const libc = Process.getModuleByName('libc.so');
    const opendir = new NativeFunction(libc.getExportByName('opendir'), 'pointer', ['pointer']);
    const readdir = new NativeFunction(libc.getExportByName('readdir'), 'pointer', ['pointer']);
    const closedir = new NativeFunction(libc.getExportByName('closedir'), 'int', ['pointer']);

    // 转换路径为Native指针
    const pathPtr = Memory.allocUtf8String(path);
    const dirp = opendir(pathPtr);

    if (dirp.isNull()) {
        console.log(`无法打开目录: ${path} (权限不足或目录不存在)`);
        return [];
    }

    const entries = [];
    let dirent;
    // 循环读取目录项
    while (!(dirent = readdir(dirp)).isNull()) {
        // 读取d_name字段(标准POSIX结构体偏移,部分平台可能需调整)
        const namePtr = dirent.add(Process.pointerSize).readPointer();
        const name = namePtr.readUtf8String();
        // 跳过当前目录和上级目录的占位符
        if (name !== '.' && name !== '..') {
            entries.push(name);
        }
    }

    closedir(dirp);
    return entries;
}

使用说明

  • 调用示例:console.log(listdir('/data/local/tmp'));
  • 注意事项:不同平台的dirent结构体字段偏移可能存在差异,若读取异常,可查阅目标系统的dirent.h头文件调整偏移量;若目标进程无指定目录的访问权限,函数会返回空数组并打印提示信息。

内容的提问来源于stack exchange,提问作者Howard Jack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 06:47:35