Workplaces may enforce TOTP 2FA to be enabled Office 365 accounts, which require the Microsoft Authenticator app to be installed.
Regular TOTP applications (such as Aegis, Authy, or LastPass) cannot be used as Microsoft uses a proprietary scheme called phonefactor
. Furthermore, the application requires Google Services Framework (GSF) to be installed (likely to provide device notifications), and will refuse to work when it is not present on the device.
Forunately, after the registration is complete, the underlying mechanism the app uses to generate TOTP codes is regular otpauth
, and its secrets can be exported with a little bit of effort.
-
To extract the keys, a complete registration must first be done with a rooted Android device. I used a virtual Android device created with Android Studio's Device Manager.
-
Once complete, an SQLite database storing the keys can be found on the device at:
/data/data/com.azure.authenticator/databases/PhoneFactor
(accessing the
/data
partition is what requires root) -
ADB can then be used to connect to the device/emulator, using its bundled
sqlite3
tool to view the database:$ adb root # Ensure we run as the root user $ adb shell # Launch a shell as the root user emu64xa:/ # whoami root emu64xa:/ # sqlite3 /data/data/com.azure.authenticator/databases/PhoneFactor # Connect to the database file sqlite> SELECT name, username, oath_secret_key from accounts; GitHub|[email protected]|w0swofa8wl02vqml0pkbzphvp54zyx5x
The 32-length string in the
oath_secret_key
column can then be imported into any TOTP application.
Thanks for this guide; this still works in 2025! Just wanted to say that and add some extra steps that I took:
InstallKernelModules
option), as in one of the above comments.adb shell
to copy the MS Auth's app's folder in/data/data
to/sdcard
, then usedadb pull
to copy it to my computer.This reads the CSV and writes a plain text file with a list of
otpauth://
URIs. This can be imported into other authenticator apps (sometimes indirectly, e.g. plain text β import to Aegis β export as Aegis β import into Bitwarden Authenticator)This reads the list of
otpauth://
URIs and shows the QR codes in the terminal one-by-one for apps that I wasn't able to import into (e.g. Google Authenticator)