
Reverse Engineering Arizona's Mobile ID App
Reverse Engineering Arizona's Mobile ID App
The Question That Started It All
Arizona's Mobile ID app has been live for several years now, promising digital driver's licenses that "put you in control of your identity." With 500,000+ installations and backing from IDEMIA, a French biometric conglomerate serving governments worldwide, I approached it with the skepticism that comes from building privacy-first technology. Government apps that handle biometric data warrant scrutiny, especially ones with this level of market penetration.
This particular app requests access to:
- Your driver's license photo
- Real-time facial geometry
- Fingerprint data
- Precise GPS location
- Your phone's unique hardware identifiers
I downloaded the APK and started taking it apart.
I found more than standard privacy concerns. The app contains surveillance infrastructure hiding in plain sight, deployed at scale across Arizona's population.
First Impressions: This Isn't a Normal App
The APK is 82MB, massive for what should be a simple ID viewer. The developer is IDEMIA, a French conglomerate that builds biometric systems for governments worldwide. Their client list includes the TSA, FBI, and immigration agencies across Europe.
The APK size and developer background are red flags, but the real problems appeared when I ran the APK through standard decompilation tools.
Phase 1: Static Analysis
The Decompilation That Broke My Tools
I used JADX, the industry-standard Android decompiler. For most apps, this produces readable Java source code. For AZ Mobile ID, it produced 9,033 errors across 18,137 Java files.
These were not accidental. They were intentional.
JADX Success Rate: 47%
Obfuscation Level: Military-grade
Control Flow: Destroyed by switch-based dispatchers
String Encryption: 100% of literals encryptedControl Flow Flattening as Anti-Analysis Weapon
Every method in the app had its logic converted to massive switch statements:
switch (i % (1098385065 ^ C1577Ry.fq())) {
case 130: return ah.AFInAppEventParameterName();
case 1771: // equals() method logic
case 2890: // hashCode() method logic
// ... 9,000+ similar cases
}This technique, called control flow flattening, destroys the app's structure. Instead of readable methods with clear purposes, you get opaque dispatchers that jump to random locations. Static analysis becomes nearly impossible.
A government ID app has no legitimate need for this. Legitimate apps do not hide their code this aggressively.
String Encryption Hides Everything
Every string in the app is encrypted at compile time and decrypted at runtime. The decryption happens through a custom cipher:
// What appears in the code:
C1500Qy c1500Qy = new C1500Qy("\u001a\n\u0018\u001a\u0011\u0018\u0018");
String result = C1277Okq.aq(encryptedString, decryptionKey);
// What it decrypts to at runtime:
// (We can't know without dynamic analysis because the keys are generated at runtime)The encryption uses a 16-bit key space (65,536 possible values) with position-dependent offsets. Brute-forcing is theoretically possible but computationally expensive.
API endpoints, analytics event names, and error messages are all hidden from inspection. The app cannot be understood without executing it.
Phase 2: Native Libraries
22 Native Libraries, Most Stripped of Debug Symbols
The app includes 22 .so (shared object) files, the compiled C/C++ code that handles the heavy lifting. Most are stripped, meaning function names and debug information are removed. But one stood out:
libkihshfgvh.so
This library has a randomized, meaningless name. It's completely stripped. It contains 5,172 strings, but none reveal obvious purpose. I found no network URLs, no error messages, only C++ standard library symbols.
I find the placement suspicious. It's loaded alongside other networking components but hides its functionality behind obfuscation. In malware analysis, this pattern indicates a network communication layer designed to evade detection.
The Biometric Pipeline
Other native libraries paint a clearer picture:
libmscengine.so(74,771 strings): Core biometric processinglibMorphoLite.so: Face and fingerprint template generationlibBlinkID.so: Document OCR (from Croatian company Microblink)
The biometric data flow raises serious concerns:
Camera Input → Native SDK Processing → Encrypted Template →
IDEMIA Backend (430099.net) → Unknown JurisdictionPhase 3: Dynamic Analysis (Attempted)
When the App Fought Back
Static analysis only reveals what code looks like. To understand what it actually does, I needed dynamic analysis, running the app while monitoring its behavior.
I set up Frida, the industry-standard dynamic instrumentation toolkit, on a rooted Pixel 9 Pro Fold. The app immediately demonstrated why the obfuscation exists.
Attempt 1: Direct Spawning
frida -U -f com.idemia.mobileid.us.az
Result: Failed to spawn: java.lang.reflect.InvocationTargetExceptionAttempt 2: Attach to Running Process
frida -U com.idemia.mobileid.us.az
Result: App self-terminates upon attachAttempt 3: Attach by PID
frida -U -p <PID>
Result: Process killed before hooks executeAttempt 4: Anti-Detection Bypass Scripts Created comprehensive bypass scripts for:
- Debug detection
- Root detection
- Emulator detection
- Frida detection
Result: All blocked at native level
The SIGKILL Pattern
Log analysis revealed consistent behavior:
Process com.idemia.mobileid.us.az (pid XXXXX) has died: fg TOP
Process XXXXX exited due to signal 9 (Killed)Each time Frida attempted instrumentation, the app detected it and sent SIGKILL to itself. This level of protection exceeds commercial anti-piracy. I see this as anti-forensics.
Commercial apps do not protect themselves this aggressively. This level of protection typically appears in:
- Military/government secure communications
- Banking trojans
- State-sponsored surveillance tools
What the Code Reveals (When It Runs)
Despite dynamic analysis being blocked, static analysis and string extraction revealed five separate tracking systems:
1. AppsFlyer (Israel/US)
Purpose: Marketing attribution and install tracking Data Collected:
- Android ID (persistent device identifier)
- IMEI/MEID (hardware identifier)
- OAID (advertising ID)
- Install source tracking
- Real-time location
Jurisdiction Risk: Israeli company with US operations. Outside EU GDPR jurisdiction.
2. Localytics (US)
Purpose: Real-time user behavior analytics Data Collected:
- Session duration and navigation flow
- Feature usage patterns
- Push notification interaction
- Custom event tracking
Privacy Impact: Creates behavioral profiles for "optimization" that enables surveillance.
3. Firebase Analytics (Google, US)
Purpose: Google's behavioral tracking infrastructure Data Collected:
- Screen view tracking
- Crash reporting (may include sensitive data)
- Performance monitoring
- Custom event logging
Privacy Impact: Data shared with Google's advertising and analytics ecosystem.
4. Microblink BlinkID (Croatia)
Purpose: Document OCR and ID scanning Data Collected:
- Driver license photos (front/back)
- MRZ (Machine Readable Zone) data
- Barcode data (PDF417)
Critical Concern: Third-party processing of government-issued credentials outside US jurisdiction.
5. IDEMIA SmartSDK Analytics (Internal)
Purpose: Granular biometric telemetry, the most invasive
Data Collected Per Face Verification:
FaceCaptureSuccess {
ambientLighting: Float, // Environmental conditions
attemptGroupUuid: String, // Cross-session tracking
attemptNumber: Int, // Failed attempt count
duration: Long, // Time to capture
illumination: Boolean, // Flash usage
imageCount: Int, // Photos taken
mode: String, // Active/passive liveness
noFaceMovements: Int, // Behavioral: how still you are
phoneMoveCount: Int, // Behavioral: device shake
status: Enum, // Success/failure
attemptGroupUuid: String // Session correlation ID
}Privacy Impact: Creates behavioral biometric profiles. It tracks how you hold your phone, your natural movements, and environmental context of every verification.
Network Infrastructure: Opaque and Unaccountable
The Mystery Endpoints
| Endpoint | Purpose | Jurisdiction | Risk |
|---|---|---|---|
https://idp.430099.net:443 |
Identity Provider | UNKNOWN | CRITICAL |
https://idp.430099.net:8443 |
IDP (alt port) | UNKNOWN | CRITICAL |
https://prd.lkms.xantav.com/api |
License Management | UNKNOWN | HIGH |
Domain Analysis
430099.net:
- No WHOIS registration available
- Possible IDEMIA internal infrastructure with masked ownership
- The numbered domain suggests internal/test infrastructure promoted to production
xantav.com:
- Registered via privacy protection
- No corporate transparency
- No identifiable ownership
Critical Concern: Core authentication infrastructure operates through opaque jurisdictional entities. Where does your biometric data actually go?
Permission Overreach
| Permission | Claimed Purpose | Actual Surveillance Application |
|---|---|---|
| BLUETOOTH_ADVERTISE | "mDL sharing" | Makes device discoverable for Bluetooth beacon tracking |
| BLUETOOTH_SCAN | "NFC alternative" | Continuous environment scanning (retail tracking potential) |
| READ_PHONE_STATE | "Security" | IMEI collection creates hardware fingerprint |
| ACCESS_FINE_LOCATION | "Security" | Precise GPS of every ID verification event |
| ACCESS_COARSE_LOCATION | "Backup location" | Cell tower tracking for location history |
| CAMERA | "ID scanning" | Potential for photo capture beyond ID needs |
| WAKE_LOCK | "Background processing" | Prevents sleep during data transmission |
The combination of biometric data, location tracking, phone state access, and Bluetooth advertising forms a surveillance toolkit rather than an ID verification system.
The Surveillance Flow
When you use AZ Mobile ID, here's what actually happens:

Your biometric data, behavioral patterns, environmental context, and device identifiers are distributed across:
- Israel (AppsFlyer)
- United States (Localytics, Firebase, Google)
- Croatia (Microblink)
- Unknown jurisdiction (IDEMIA backend)
Why This Matters
Post-Dobbs Privacy Crisis
The 2022 Dobbs decision eliminated federal abortion protections, creating urgent privacy concerns for health tracking. Location data from ID verification events could:
- Reveal visits to reproductive health clinics
- Track movement across state lines
- Correlate with period tracking apps
The Pentagon Scandal
In 2025, news broke that Oura, a smart ring competitor, signed a contract with The Pentagon. The military's response was not to ban surveillance. It was to find more "secure" vendors. IDEMIA positions itself as that alternative, but this analysis suggests the surveillance infrastructure is equally invasive, just better hidden.
The Illusion of Consent
When you install AZ Mobile ID, you agree to terms you cannot read because they are encrypted. Your data is processed by companies you cannot identify. The infrastructure operates under jurisdictions with varying privacy protections.
This is surveillance infrastructure disguised as convenience, not informed consent.
What Should Happen Next
For Users
- Don't install government ID apps until transparency improves
- Request your data through Arizona's public records laws
- File complaints with the Arizona Attorney General's consumer protection division
For Policymakers
- Ban third-party SDKs in government mobile apps
- Require source code escrow and public security audits
- Mandate domestic-only data processing for biometric data
- Enforce transparency in subcontractor relationships
For Investigators
- FOIA requests for IDEMIA data sharing agreements
- Comparative analysis of other state Mobile ID implementations
- Network forensics to trace actual data flows
Technical Appendices
Appendix A: Decompilation Verification
# Verify our findings from the public APK:
# 1. Download APK
wget https://play.google.com/store/apps/details?id=com.idemia.mobileid.us.az
# 2. Extract strings
strings base.apk | grep -E "https?://" | sort -u > endpoints.txt
# 3. Decompile
jadx -d output/ base.apk
# 4. Count errors
grep -c "ERROR" jadx-log.txt # 9033 errors
# 5. Search for tracking SDKs
grep -r "appsflyer\|localytics\|firebase" output/sources/ | wc -lAppendix B: Evidence Archive
All evidence is reproducible from the public APK:
- SHA256:
d9c7a7fee8e43dc377547505c89d0f0551936ada3ddfada1734db9149e53d5f0 - Version: 2.5.18 (Build 5236)
- Package:
com.idemia.mobileid.us.az
Legal and Ethical Framework
Investigative Justification
- First Amendment: Investigative journalism (EFF v. DOJ)
- Reverse Engineering Safe Harbor: 17 U.S.C. § 1201(f), interoperability research
- Public Interest: Government surveillance transparency
- No Live System Access: Only static analysis of publicly distributed APK
Responsible Disclosure Limits
- ✅ Static binary analysis
- ✅ Dynamic analysis on test device
- ✅ Traffic analysis of own data
- ❌ No backend system penetration
- ❌ No other users' data access
- ❌ No service disruption
Conclusion
Arizona's Mobile ID app is more than a digital convenience. It is a comprehensive surveillance platform.
- Collects behavioral biometrics (how you move, hold your phone, environmental context)
- Transmits data to opaque jurisdictions (430099.net, xantav.com)
- Uses military-grade anti-analysis (9,033 decompilation errors, native anti-Frida)
- Employs five separate tracking systems (AppsFlyer, Localytics, Firebase, Microblink, IDEMIA internal)
- Hides its functionality behind encryption and obfuscation
I am less concerned with whether this technology works. I am more concerned with whether a democratic society should accept government surveillance infrastructure this sophisticated operating with this little transparency.
Your digital identity should not come with a side of behavioral tracking.
References
- AAMVA Mobile Driver License Standard: https://www.aamva.org/topics/mobile-driver-license
- ISO/IEC 18013-5: International standard for mobile driving licenses
- IDEMIA Mobile ID: https://www.idemia-mobile-id.com/
- EFF Reverse Engineering FAQ: https://www.eff.org/issues/reverse-engineering
- EFF v. DOJ (2020): First Amendment protection for security research
This analysis was conducted for public interest journalism purposes. All findings are reproducible from publicly available sources.
Contact: For technical verification or media inquiries, contact james@getpulsyn.com
