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

使用Frida 16.2.1读取Android13文件报错:期望无符号整数

解决Frida调用Files.readAllBytes时报错"expected an unsigned integer"的问题

问题分析

在Android 13设备上使用Frida 16.2.1调用java.nio.file.Files.readAllBytes(Path)时出现类型错误,提示"expected an unsigned integer",核心原因是Frida对Java NIO的Path对象与底层Native方法的类型映射存在兼容性问题,导致传入的Path对象被错误解析为需要无符号整数参数。

解决方案

改用Android传统IO流方式读取文件,避开NIO API的兼容性问题,代码示例如下:

function readFileContent(pathName) {
    var FileInputStream = Java.use("java.io.FileInputStream");
    var ByteArrayOutputStream = Java.use("java.io.ByteArrayOutputStream");
    var String = Java.use("java.lang.String");

    var fis = null;
    var bos = null;
    try {
        fis = FileInputStream.$new(pathName);
        bos = ByteArrayOutputStream.$new();
        var buffer = Java.array('byte', new Array(1024));
        var len;
        while ((len = fis.read(buffer)) != -1) {
            bos.write(buffer, 0, len);
        }
        return String.$new(bos.toByteArray());
    } catch (e) {
        console.error("读取文件失败: " + e.message);
        return null;
    } finally {
        if (fis != null) {
            try {
                fis.close();
            } catch (ignore) {}
        }
        if (bos != null) {
            try {
                bos.close();
            } catch (ignore) {}
        }
    }
}

额外说明

  • 原代码中Paths.get(URI.create("file://" + pathName))的路径格式需要注意:如果pathName是绝对路径(如/sdcard/test.txt),拼接后会得到file:///sdcard/test.txt,这是正确的URI格式,但即使路径正确,仍会因Frida的NIO类型映射问题报错。
  • 传统IO流方式在各Android版本上兼容性更好,且Frida对FileInputStream等类的方法调用支持更稳定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 01:47:45