ITADN
tryigit/CleveresTricky
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

CleveresTricky

Build

CleveresTricky 是一个用于 Android keystore 和 attestation 兼容性的 KernelSU/APatch 模块。它提供应用范围的证书处理、keybox 管理、补丁级别控制、启动属性兼容性以及设备端 WebUI。

功能

功能提供的内容
定向认证处理仅对您选择的应用程序应用证书链替换,或在需要时启用全局模式。
TEE 和 StrongBox 支持支持真实的 Android KeyMint 密钥创建及后续的加密操作。
多密钥箱管理器从 WebUI 加载、验证、选择、轮换和监控 EC/RSA 密钥箱。
加密 CBOX 存储使用 AES-256-GCM 容器和加密本地缓存保护密钥箱文件。
完整的补丁级别控制全局或按应用配置 OS、供应商和启动补丁级别,支持实时重载。
启动属性兼容性针对常见的解锁/调试构建指标,提供可选的、有界的属性调整。
PIF 友好共存保持进程范围的指纹配置独立,而不是覆盖另一个模块的工作配置。
RKP 透传启用时,保持生成的密钥响应在 Android 真实的远程密钥配置路径上。
DRM 应用透传保持选定的流媒体/DRM 应用使用真实的密钥库证书路径。
安全 WebUI从模块 Action 按钮管理目标、密钥箱、配置文件、日志、加密备份和兼容性开关。
加固安装程序验证每个打包的负载,阻止不支持的安装路径,并保持配置仅限 root 访问。

快速入门

  1. 下载发布版 ZIP。
  2. 打开 KernelSU 或 APatch 并选择 Install module
  3. 选择 ZIP 并重启。
  4. 按下 CleveresTricky 的 Action 按钮以打开 WebUI。
  5. 添加已授权的 keybox,选择目标应用,并选择一个 profile。
  6. 在启用额外的兼容性选项之前,检查仪表板和日志。

未附带可用的 keybox 或私有证明密钥。仅使用您拥有或有权测试的密钥材料。

要求

组件支持情况
Android12–16 (API 31–36)
Root 管理器KernelSU 或 APatch
架构arm64-v8ax86_64
安装方式在 Android 运行时使用 Root 管理器应用
Magisk/recovery不支持;安装会停止,而不是留下部分模块

结果仍取决于实际设备状态、认证、固件、密钥材料、Google Play 服务以及服务器端策略。该模块改善了可用的兼容性路径,但无法保证在所有设备上获得特定的服务器判定。

推荐配置

配置文件适用场景主要行为
Daily Compatibility全新安装 / 日常使用定向替换、吊销检查、自动启动属性策略,启用 DRM 和 RKP 透传。
Default保守配置定向替换和吊销检查;关闭启动属性更改,开启 DRM/RKP 透传。
Maximum Compatibility针对性测试全局范围、身份刷新、电话和启动属性兼容性;禁用 DRM/RKP 透传。
Minimal故障排除关闭证书替换和主动欺骗功能;保持 DRM/RKP 透传开启。

Daily Compatibility 开始。如果某个厂商功能出现回归,请切换到 Default 或将 boot_props_mode 设置为 disable。由于 Maximum Compatibility 会故意更改最广泛的范围,因此仅用于短期、受控的测试。

WebUI 控件

Action 按钮会在设备的回环接口上打开一个经过令牌认证的 WebUI。它不会暴露给本地网络。

主要控件包括:

  • 全局模式: 针对所有调用 UID,而不仅仅是 target.txt 条目。
  • 禁用证书替换: 无需卸载模块即可立即进入安全模式。
  • 自动 Keybox 检查: 定期检查已加载的 keybox 和吊销状态。
  • 启动时刷新身份: 刷新支持的证明/电信标识符。
  • 电信标识符拦截: 可选的针对性电信处理;更改后建议重启。
  • 隐藏敏感属性: 在下次启动时应用启动属性兼容集。
  • RKP 直通: 保持生成的密钥响应不变,同时保留正常的现有密钥路径可用。
  • DRM 应用直通:drm_packages.txt 中的包排除在证书替换之外。

RKP 和 DRM 直通在新安装时启用。它们是兼容性保障措施,而非模拟的 RKP 或 DRM 实现。

boot_props_mode 控制属性层:auto 跳过已知的重叠/厂商敏感设置,force 在启用隐藏敏感属性时应用它,而 disable 在不删除切换开关的情况下将其关闭。

如果您还使用进程范围的 PIF/Zygisk 模块,请让该模块拥有其指纹文件。CleveresTricky 不会下载公共指纹或覆盖外部 PIF 配置;其证明身份、补丁级别、keybox 和启动属性层继续独立工作。

配置

配置存储在 /data/adb/cleverestricky 中,权限仅限 root。WebUI 保存经过验证并原子写入。

目标应用

从 WebUI 编辑 target.txt

com.google.android.gms
io.github.vvb2060.keyattestation
com.example.*

支持通配符。全局模式会忽略此列表,并针对所有 UID。

每个应用的身份和密钥箱

app_config 接受三列:

# package                      identity-template  keybox-file
com.example.attestation       pixel8pro          test.xml
com.example.second            null               second.cbox

当不需要针对特定应用的覆盖时,使用 null

安全补丁级别

security_patch.txt 可以设置所有三个认证补丁字段:

# Global defaults
system=YYYY-MM-05
vendor=device_default
boot=no

# Per-app override
[com.google.android.gms]
system=2025-10-01

支持的键:

  • system:操作系统补丁级别;
  • vendor:供应商补丁级别;
  • boot:启动/内核补丁级别;
  • all:同时设置以上三项。

支持的值包括 YYYY-MM-DDYYYYMMDDYYYYMMtoday、日期占位符、device_defaultpropnodevice_default 保留证书的真实字段;prop 读取匹配的系统、供应商或启动镜像安全补丁属性;no 移除该字段。无效或过大的文件将被拒绝,且最后的有效配置保持激活状态。

旧的 package.name=date 语法仍受支持,用于操作系统补丁覆盖。

构建与证明身份

spoof_build_vars 仅包含模块实际使用的值:

TEMPLATE=pixel8pro
MANUFACTURER=Google
MODEL=Pixel 8 Pro
BRAND=google
PRODUCT=husky
DEVICE=husky
ATTESTATION_ID_SERIAL=ABC123XYZ789

与 Bootloader 相关的用户空间属性由 Hide Sensitive Props 控制,而不是通过在此文件中放置任意 ro.* 行。该文件仅接受模块支持的字段。

DRM 直通包

编辑 drm_packages.txt 以选择哪些应用保留真实的 keystore 路径:

com.netflix.mediaclient
com.amazon.avod.thirdpartyclient
com.example.video.*

在 DRM App Passthrough 处于禁用状态时,该列表不生效。

Keybox 管理器

CleveresTricky 接受:

  • /data/adb/cleverestricky/keybox.xml 用于旧版配置;
  • /data/adb/cleverestricky/keyboxes/ 下的 XML 文件;
  • 从 WebUI 上传的加密 .cbox 文件;
  • 显式配置的 HTTPS 源。

在 keybox 激活之前,模块会检查其私钥/证书匹配情况、算法、链结构、有效期以及吊销状态。损坏或混合的池将被整体拒绝。如果无法检查吊销列表,新加载的材料将保持非活动状态。

建议将 CBOX 用于存储和传输。纯 XML 包含 root 可读的私钥材料,绝不应提交到 Git。

KernelSU 包布局

KernelSU 通过 module.prop 识别该模块。启动脚本、策略、Action 脚本以及其他模块文件按照 KernelSU 的文档包含在 ZIP 根目录中。

service.apkinjectlibcleverestricky.so 是构建输出。Gradle 为每个受支持的 ABI 编译它们,进行验证,并将它们与 SHA-256 文件一起放入发布 ZIP 中。module/template 包含受版本控制的脚本和配置模板。

KernelSU 不需要恢复风格的 META-INF/com/google/android/update-binary,并且由于不支持恢复和旧版 Magisk 安装,因此未包含在内。请参阅官方 KernelSU 模块指南

故障排除

使用 WebUI 的 Logs 选项卡或运行:

logcat -s CleveresTricky

常见检查:

  • 密钥箱未激活: 打开密钥箱,运行验证,并检查对吊销列表的网络访问。
  • 属性更改后应用行为异常: 禁用隐藏敏感属性并重启。
  • 密钥生成或配置出现回退: 启用 RKP 直通。
  • 原生端点不可用: 禁用其他 ptrace/注入模块并检查 SELinux 日志。
  • 篡改警告: 重新安装完整的 ZIP;负载或校验和缺失或已更改。
  • 不确定哪个选项导致问题: 选择最小配置,重启,然后每次启用一个选项。

参见 LOG.md, CONTRIBUTING.md, LANGUAGES.md, 和 THEME.md

构建

构建需要 JDK 21、Android SDK 36、Android NDK 27.3.13750724、Rust、rustupcargo-ndk 以及已初始化的 Git 子模块。

git submodule update --init --recursive
./gradlew testDebugUnitTest ktlintCheck zipDebug

Release ZIP 在 module/release/ 中创建。CI 还会运行 Android lint、针对两种 ABI 的原生构建、Rust 格式化/Clippy/测试/审计、shell 验证、模块结构检查以及 ZIP 组装。

安全

  • 将 WebUI 保持在回环地址上,切勿通过公共代理或隧道暴露。
  • 在测试启动/属性更改之前,保留可恢复的备份。
  • 仅使用已授权的关键材料。
  • 在公开漏洞利用细节之前,私下报告漏洞。

Android 证明和 Play Integrity 可能独立于本项目发生变化。官方的 Android 证明文档Play Integrity 判定文档 以及 KernelSU 模块指南 仍具有权威性。