XPosed module to bypass Root detection within Microsoft Authenticator (com.azure.authenticator).
Microsoft Authenticator ships with a proprietary device integrity SDK called Bastion. Unlike conventional root detection, Bastion employs a multi-layered detection architecture: parallel local validators (validateAlpha/Bravo/Charlie), a standalone detection engine built on a reflection cache system with runtime-decoded strings, and server-side feature flags (IntegrationPhase) that control the enforcement level. Because Bastion is entirely Java-based with no JNI native methods, it does not rely on traditional file or process scanning, rendering Zygisk-level root hiding tools like Shamiko ineffective.
For the full reverse engineering analysis, see analysis.md.
Three-layer hook strategy (verified via Frida):
- Primary —
ValidationExecutor.handleValidationFailure()replaced withdismissLoadingScreen()+onComplete.invoke()+ return. This is the single convergence point for all validation failure UI from both the sync path and cache path. - Safety net —
ValidationUIManagerdisplay methods (showBanner,showBlockingDialog,showValidationWarning) replaced withDO_NOTHING. - Defense in depth —
IntegrationPhase.Companionphase checks (shouldBlockActions,shouldShowWarningUI,shouldWipeData) replaced to returnfalse.
- Xposed framework targeting libXposed API 100 and below (e.g., LSPosed / Vector)
- Download and install APK on device
- LSPosed Manager → Modules → Enable AuthenticatorHook
- Set scope to
com.azure.authenticator - Force-stop Authenticator and relaunch
src/main/kotlin/com/brandonstudio/azauthhook/
├── MainHook.kt # IXposedHookLoadPackage entry
├── Log.kt # Logging utility
└── hook/
├── ValidationExecutorHook.kt # Primary hook (private method)
├── UIManagerHook.kt # Safety net
└── PhaseHook.kt # Defense in depth
This project is licensed under the MIT License.