jshook 中文文档 下载 App

device 设备信息读取——型号、系统版本、CPU、分辨率

支持的信息

接口返回内容
device.model设备型号(如 SM-G9910)
device.brand品牌(如 Samsung、Xiaomi)
device.manufacturer制造商
device.androidVersionAndroid 版本(如 13)
device.sdkVersionSDK 版本号(如 33)
device.cpuAbiCPU 架构(如 arm64-v8a)
device.cpuCountCPU 核心数
device.screenWidth屏幕宽度(像素)
device.screenHeight屏幕高度(像素)
device.screenDensity屏幕密度
device.deviceId设备唯一标识(Android ID)
device.phoneNumber手机号(部分设备需要权限)
device.totalMemory总内存
device.freeMemory可用内存

快速示例

console.log('[+] 设备信息:');
console.log('    型号: ' + device.model);
console.log('    品牌: ' + device.brand);
console.log('    Android: ' + device.androidVersion);
console.log('    CPU: ' + device.cpuAbi + ' x' + device.cpuCount);
console.log('    屏幕: ' + device.screenWidth + 'x' + device.screenHeight);

典型使用场景

设备兼容性判断

某些脚本在特定 Android 版本或设备型号上不工作,提前判断做降级:

if (device.sdkVersion >= 33) {
    // Android 13+ 的逻辑
} else {
    // 旧版本的兼容逻辑
}

日志里记录设备信息

发 issue 或跟别人讨论问题时,附上设备信息能快速定位:

function printDeviceInfo() {
    console.log('=== 设备信息 ===');
    console.log('型号: ' + device.model);
    console.log('Android: ' + device.androidVersion + ' (SDK ' + device.sdkVersion + ')');
    console.log('CPU: ' + device.cpuAbi);
    console.log('屏幕: ' + device.screenWidth + 'x' + device.screenHeight);
    console.log('内存: ' + device.totalMemory);
    console.log('JSHook: ' + runtime.modVersion);
    console.log('================');
}

防滥用(反反作弊思路)

如果脚本不想在模拟器上被滥用,可以用 device 信息判断是不是真机:

if (device.model.indexOf('sdk') !== -1 ||
    device.model.indexOf('generic') !== -1 ||
    device.manufacturer.indexOf('Genymotion') !== -1) {
    console.log('[!] 检测到模拟器,脚本退出');
    // return;
}

runtime 和 device 的区别

device 模块读取的是手机硬件层面的信息,runtime 模块提供的是Frida 运行时层面的信息:

接口说明
runtime.packageName当前注入的应用包名
runtime.processName当前进程名
runtime.isKernel是否内核驱动模式
runtime.coreVersionCodeJsHook 版本号
runtime.modVersionfridamod 版本
runtime.appInfo当前应用的 ApplicationInfo
device.model设备型号
device.androidVersion系统版本
device.screenWidth屏幕宽度

两个模块常用 runtime.isKernel 判断脚本运行环境,device.* 记录日志。