Guise 覆盖的 8 个 Hook 通道详解
通道总览
Guise Reborn 当前覆盖 8 个核心 Hook 通道,以及 2 个需要手动开启的高级通道。这里逐一说清楚每个通道拦截什么、为什么重要。
1. Build.\*(Java 构建常量)
最常用也是最基础的一层:
Build.BRAND— 品牌(如 Google、Xiaomi、Samsung)Build.MANUFACTURER— 制造商(容易和 BRAND 混淆,Guise 明确分离)Build.MODEL— 型号Build.DEVICE/Build.PRODUCT— 设备/产品代号Build.BOARD/Build.HARDWARE— 主板/硬件代号Build.FINGERPRINT— 指纹,自动拼接生成Build.ID— 构建 IDBuild.HOST/Build.USER/Build.TIME— 构建元信息
2. Build.VERSION.\*
Build.VERSION.RELEASE— Android 版本号Build.VERSION.INCREMENTAL— 增量版本Build.VERSION.SECURITY_PATCH— 安全补丁日期Build.VERSION.SDK_INT— SDK 级别(API 号)
⚠️ Android 版本号和 SDK/API 级别通常取自真机,改 API 级容易导致目标应用崩溃。
3. Build.getSerial()
自 Android 8 起,Build.SERIAL 常量恒为 UNKNOWN。真正被调用的是 Build.getSerial() 方法。Guise 专门 Hook 这个入口,覆盖真正会被应用读到的序列号。
4. SystemProperties
最容易被忽略的一层。 很多应用和完整性检查根本不读 Build,而是直接读系统属性。Guise 覆盖 23 个 ro.* 键,包括:
ro.product.brandro.product.modelro.product.devicero.product.namero.build.display.idro.build.fingerprint- ……等 23 个构建相关属性
只 Hook Java 层、属性层漏了——这是改机模块「半残」最常见的样子。
5. Settings.Secure
ANDROID_ID(SSAID)— Android 10 后按应用签名隔离,但应用仍能通过多种入口读取
6. GPU(GLES)
GLES20.glGetString(GL_VENDOR)— GPU 厂商GLES20.glGetString(GL_RENDERER)— GPU 型号
GPU 信息暴露真机芯片。同一芯片的机型共享这些值,Guise 按 SoC 自动匹配。
7. 电话 API
- IMEI / MEID — 通过 Luhn 校验合成
getImei(int)全部重载 +getPrimaryImei+getDeviceId
8. Wi-Fi MAC
- 当前 Wi-Fi MAC 地址(合法的本地管理单播地址)
手动开启的两个高级通道
编解码器厂商前缀
MediaCodecList 里的组件名带芯片厂商前缀——c2.mtk.(联发科)、c2.qti.(高通)、c2.google.(Tensor)。不覆盖就直接暴露真实芯片。
但列表只能过滤不能增加,隐藏后可能让目标应用找不到它需要的解码器(表现为视频播放异常)。所以 Guise 把这个做成开关,由你决定。
屏幕密度(DPI)
修改会改变目标应用的布局——控件大小、排列、间距都会变。分辨率完全不改(改了容易出半改状态),DPI 同样做成开关。
不在覆盖范围内
Guise 不做的事:
- 内核 SoC(
/sys/devices/soc0/machine)— Java 层 Hook 不到,这是物理事实 - 内存、ABI、核心数、主频— 物理事实,客户端改不了
- IP 定位— 这是网络侧服务推断
- DRM / 硬件保护内容的截图绕过— 强制截图只清 FLAG_SECURE,不保证绕过硬件保护
- 系统框架— 只为目标应用 Hook,不扩大作用域