一个面向 ColorOS(OPPO/一加/真我)的 Xposed / LSPosed 模块,用于修正系统人脸传感器上报的非标准强度值(4095),使其被识别为标准 Class 3(强认证)强度,从而让面容解锁能够正常用于应用的 BiometricPrompt。
Android中生物识别分为三个安全级,Class1(4095,最弱),Class2(255,弱),Class3(15,强)
ColorOS 的人脸传感器向 system_server 上报 4095。因此当普通应用通过 BiometricPrompt 请求 Class 3 强认证(如网银、密码管理器)甚至CLass2弱认证时,系统判定人脸强度不足(STATUS_INSUFFICIENT_STRENGTH),面容解锁不会被纳入可选认证方式。
- 在
system_server中hookPreAuthInfo的资格预检流程,将普通应用请求的4095人脸强度修改为标准 Class 3 强度(15)。 - 仅影响普通 App 的预检调用链,
SystemUI、系统锁屏等路径仍保持 ColorOS 原生实现不变。 - 排除
com.coloros.codebook等系统应用,(尽量)避免影响系统自带的认证判定。
-
com.android.server.biometrics.PreAuthInfo#getStatusForBiometricAuthenticatorsystem_server内部执行强度判定时无法可靠取得原始调用者的 UID,因此利用PreAuthInfo的参数把调用上下文(opPackageName)记录到ThreadLocal中,供后续判定使用。 -
com.android.server.biometrics.Utils#isAtLeastStrength当检测到处于普通 App 的预检查调用链、传感器强度为4095、且请求的是强认证(15)或弱认证(255)时,直接返回true;其余所有路径沿用 ColorOS 原生实现。
- 系统:ColorOS(OPPO / 一加 / 真我), LSPosed。
- 依赖 Xposed API legacy 及以上。
- 构建环境:AGP 9.3.2、Gradle 9.5.0、compileSdk 37、minSdk 35、targetSdk 37。
- 仅在oneplus ace3v + coloros 16 测试通过
./gradlew :app:assembleRelease或直接使用 Android Studio 打开项目。
生成的 APK 位于 app/build/outputs/apk/release/。
- 安装编译出的 APK(可能需关闭系统签名校验或使用支持的方式安装模块 APK)。
- 在 LSPosed 中启用本模块。
- 将模块作用域勾选为 System Framework(系统框架)。
- 重启系统。
- 在任意使用
BiometricPrompt的应用中即可看到面容解锁选项。
- 本模块通过 Hook 系统进程实现,存在风险,请掌握基本救砖操作;
- Vibe Coding而成,能用就行;
- 不同 ColorOS 版本的系统内部实现可能有所差异,如失效可查看 Xposed 日志(Tag:
FaceBiometricFix)定位原因。 - 本项目仅供学习研究使用,请自行评估风险。
本项目基于 GNU General Public License v3.0 开源发布。
项目通过 GitHub Actions 在推送时自动构建:
- 推送到
main分支:自动构建 Release APK(以 debug 密钥签名),并作为构建产物(Artifact)上传,可在 Actions 页面下载。 - 推送
v*标签(如v1.0.0):自动构建、签名,并创建 GitHub Release 附上 APK。
使用方法:在仓库页面点击 Create a new release,输入类似 v1.0.0 的标签,即可触发自动构建并生成 Release。