An Xposed module for the Android Faker reverse-engineering practice target, updated for:
- Xposed API 101 (modern
libxposedAPI) - Android Faker
v2.0.0-beta-9-6 - package
com.android1500.androidfaker
- Build and install the module APK.
- Enable Faker Unlocker in an API-101-compatible Xposed manager.
- Select Android Faker and every app in which Android Faker spoofing should run.
The module intentionally uses a dynamic scope (
staticScope=false). - Force-stop and reopen Android Faker and the selected target apps.
| Runtime target | Purpose | Patch |
|---|---|---|
wg6.OooO0O0() |
Core UserState.isVip |
Return true |
wg6$OooO00o |
Account state | Constructor status 1, expiry year 2100 |
AccountSummary |
Parcelable account state | Constructor status 1, expiry year 2100 |
HookState |
Hook-screen VIP state | Constructor/getter Boolean.TRUE |
ProfileState |
Profile-screen VIP state | Constructor Boolean.TRUE |
uf5 |
APK signature verifier | Return true |
Native.doInit(String) |
Native initialization guard | Return true |
Native.getDex() |
Spoofing payload | Serve the decrypted DEX |
Exact beta-9-6 names are attempted first. DexKit structural matchers provide a
fallback for the data and verifier classes. The old beta-9-5 HookConfig
boolean overrides were removed because those booleans now control fingerprint
randomization rather than VIP access.
JADX's p000 package is synthetic: wg6, wg6$OooO00o, and uf5 are
root-package runtime names.
In target apps, the module intercepts Runtime.loadLibrary0 before Android
Faker loads af_native. This prevents beta-9-6's abort watchdog from being
created by doInit or a failing getDex.
DexExtractor locates the encrypted dex\n header dynamically, reads the DEX
size from its header, and decrypts the payload with XOR key 0x32. For
beta-9-6 the payload is 46,416 bytes and has SHA-256:
6779812ebebaa4dcc79099a74dd3b2793d098541af0822551264a509d33befa1
The module can extract it from the Faker module classloader's APK path, the native-library directory, PackageManager, or the existing cache. It does not depend on hard-coded native RVAs, and it verifies the beta-9-6 payload size and SHA-256 before serving it.
The APK uses the modern module resources:
META-INF/xposed/java_init.list
META-INF/xposed/module.prop
META-INF/xposed/scope.list
The entrypoint extends io.github.libxposed.api.XposedModule and installs hooks
with hook(...).intercept(...). There is no legacy assets/xposed_init or
de.robv.android.xposed bridge dependency.
Requirements:
- Android SDK 35
- JDK 21
- local
io.github.libxposed:api:102.0.0artifact (the module targets API 101)
On Windows:
.\gradlew.bat :app:assembleDebugOutput:
app/build/outputs/apk/debug/FakerUnlocker-v1.1-debug.apk
Useful log filter:
adb logcat | findstr FakerUnlocker
Expected beta-9-6 markers include:
Build marker 2026-07-23-api101-beta-9-6
[BLOCKED] System.loadLibrary("af_native")
[OK] Native.doInit -> true
[OK] DEX from Faker module classloader: 46416 bytes
All exact beta-9-6 hooks installed successfully
The module does not use these addresses, but they are useful when validating the matching native library in Ghidra:
| ABI | JNI_OnLoad |
doInit |
getDex |
abort callback |
|---|---|---|---|---|
| arm64-v8a | 0x17374 |
0x19484 |
0x1AD00 |
0x1132C |
| armeabi-v7a | 0x121D1 |
0x13811 |
0x14939 |
0xE00D |
| x86 | 0x18FB0 |
0x1B0E0 |
0x1D050 |
0x11800 |
| x86_64 | 0x18890 |
0x1A980 |
0x1C890 |
0x116F0 |
Values are module-relative RVAs. ARMv7 values include the Thumb bit.
This project is for authorized reverse-engineering practice. Do not use it to circumvent protections on software you are not permitted to test.