事先说明,我对安卓开发了解尚浅,有些描述可能有误,请大佬们轻喷
Steam 3.x 使用加密存储 SteamGuardInfo,那我就直接利用Xposed模块拿他解密后的数据不就行了。在这之前没有了解过 React Native,所以我的想法很直接:
- 大概找到了其存储位置在
/data/data/com.valvesoftware.android.steam.community/shared_prefs/SecureStore.xml
- 在 Steam 的 dex 中搜索哪个方法读取了此 SharedPreferences,顺藤摸瓜找到了几个加解密实现
expo.modules.securestore.SecureStoreModule$HybridAESEncrypter expo.modules.securestore.SecureStoreModule$AESEncrypter expo.modules.securestore.SecureStoreModule$LegacySDK20Encrypter
- 对其中所有的
decryptItem方法进行hook,在被调用完毕后分析其调用栈进行筛选,并将所获取到的已解密数据写入到剪切板中并通过Toast进行提示
非常流畅的就获取到了我们所需的 SteamGuardInfo。


我已将此Xposed模块开源至 YifePlayte/SteamGuardDump ,以供使用、参考。
测试环境:LSPosed 1.8.6(6712),MIUI 14 (Android 13),Steam 3.5
补充:Steam 3.7.0 修改了获取解密数据的方式,通过回调函数。模块已更新以适应此变化。
测试环境:LSPosed 1.9.1(6990),MIUI 14 (Android 13),Steam 3.7.0
补充:Steam 3.9.0 使用的 Expo SecureStore 又一次更改了调用方式,模块已更新适配,并通过模块向导出内容中自动补充了uri信息,方便各位使用。
测试环境:LSPosed 1.9.2(7058),HyperOS (Android 14),Steam 3.9.0
补充:从模块的1.2.0版本开始,模块会对获取到的令牌信息做些许修改(完全本地处理),在1.3.2版本及以后,模块将会对令牌信息做如下处理:
- 若令牌信息缺失uri,则给令牌信息生成一份uri(生成的uri格式未经测试,需要反馈)
- 向导出的令牌信息中添加uuidKey信息(就不需要去手动找文件了)
事先说明,我对安卓开发了解尚浅,有些描述可能有误,请大佬们轻喷
Steam 3.x 使用加密存储 SteamGuardInfo,那我就直接利用Xposed模块拿他解密后的数据不就行了。在这之前没有了解过 React Native,所以我的想法很直接:
/data/data/com.valvesoftware.android.steam.community/shared_prefs/SecureStore.xmlexpo.modules.securestore.SecureStoreModule$HybridAESEncrypterexpo.modules.securestore.SecureStoreModule$AESEncrypterexpo.modules.securestore.SecureStoreModule$LegacySDK20EncrypterdecryptItem方法进行hook,在被调用完毕后分析其调用栈进行筛选,并将所获取到的已解密数据写入到剪切板中并通过Toast进行提示非常流畅的就获取到了我们所需的 SteamGuardInfo。


我已将此Xposed模块开源至 YifePlayte/SteamGuardDump ,以供使用、参考。
测试环境:LSPosed 1.8.6(6712),MIUI 14 (Android 13),Steam 3.5
补充:Steam 3.7.0 修改了获取解密数据的方式,通过回调函数。模块已更新以适应此变化。
测试环境:LSPosed 1.9.1(6990),MIUI 14 (Android 13),Steam 3.7.0
补充:Steam 3.9.0 使用的 Expo SecureStore 又一次更改了调用方式,模块已更新适配,并通过模块向导出内容中自动补充了uri信息,方便各位使用。
测试环境:LSPosed 1.9.2(7058),HyperOS (Android 14),Steam 3.9.0
补充:从模块的1.2.0版本开始,模块会对获取到的令牌信息做些许修改(完全本地处理),在1.3.2版本及以后,模块将会对令牌信息做如下处理: