从Android设备恢复Google身份验证器密钥以进行备份 (github.com)
获取数据库并导出
装有 Google 身份验证器的设备必须具有 root。
计算机需要 Android 开发者工具和 SQLite 3。
以USB调试模式连接设备。
$ cd /tmp
$ adb root
$ adb pull /data/data/com.google.android.apps.authenticator2/databases/databases
$ sqlite3 ./databases “select * from accounts” > /Volumes/TRUECRYPT_ENCRYPTED_VOLUME/google_authenticator_backup.txt
- 如果查看该文件,您会看到一个以竖线分隔的文件,其条目如下所示。
1|Google:me@gmail.com|xxxxxxxxxxxxxxxxxxxxxxxxxxxx|0|0|0||
2|Google:me@domain.org|xxxxxxxxxxxxxxxxxxxxxxxxxxxx|0|0|0|谷歌|Google:me@domain.org
3|Dropbox:me@gmail.com|xxxxxxxxxxxxxxxxxxxxxxxxxxxx|0|0|0|Dropbox|Dropbox:me@gmail.com
- 要恢复密钥,您可以在 Google 身份验证器中手动输入它们:
- 菜单 -> 设置帐户 -> 输入提供的密钥。
- 输入与显示完全相同的密钥,区分大小写,然后选择“基于时间”。
需要解密的情况
解决方案基于Google Authenticator 5.10之前版本的数据库,该数据库不加密。不确定这个网址能不能实现解密,我的App版本比较老,不需要解密。
其他方法是,如果是同品牌的手机,App+App数据应该可以无缝迁移的。
GoogleAuthenticator.dev
生成二维码,更方便
python脚本解决的,genqrcodes.py:
导入 pyqrcode
导入 sqlite3 conn = sqlite3.connect('/home/user/databases') c =
conn.cursor()
对于 idx,(email, secret, issuer) in enumerate(c.execute(“SELECT email,secret,issuer FROM accounts”).fetchall()):
if issuer==None:
if len(email.split(" "))>0:
issuer=email.split(" ")[0]
else:
issuer=email
if len(issuer.split(":"))>0:
issuer=issuer.split(":")[0]
#print ("If the following issuer looks wrong, enter a new value. If it's OK, just press ENTER.")
#newIssuer=input(issuer)
#if len(newIssuer)>0:
# issuer=newIssuer
url = 'otpauth://totp/{}?secret={}&issuer={}'.format(email, secret, issuer)
im = pyqrcode.create(url)
#print (url)
#print(im.terminal(quiet_zone=1))
big_code = pyqrcode.create(url, error='L', version=27, mode='binary')
big_code.png(issuer+'.png', scale=6, module_color=[0, 0, 0, 128], background=[0xff, 0xff, 0xcc])
big_code.show()