添加Steam TOTP到keepassXC

直接参考

  1. https://github.com/BeyondDimension/SteamTools/issues/2276
  2. https://art.dogcraft.top/archives/254/

操作环境: macos

失败的尝试

  • 直接用miui的备份功能, 发现解压后没有对应的文件了
  • 退回版本2.x, 登录不了, 一直转圈
  • 用charles抓包, 过不了墙, 没法同时用clash (但是浏览器却可以)

需要安装的软件

adb apktool python

homebrew找不到keytool, 直接用安卓手机上的mt管理器进行签名

步骤

  1. 拆包: apktool d steam.apk --frame-path ./fm
  2. 注入js代码
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 打开steam/assets/index.android.bundle
# 搜索 "GetSteamGuardInfo"

# 添加
this.m_mapGuardInfo.forEach(function (t, n) {
    console.error(n);
    console.error(JSON.stringify(t))
    });

# 最终是这个样子
{
    key: "GetSteamGuardInfo",
    value: function (t) {
    this.m_mapGuardInfo.forEach(function (t, n) {
        console.error(n);
        console.error(JSON.stringify(t))
    });
    return this.m_mapGuardInfo.has(t)
        ? this.m_mapGuardInfo.get(t)
        : null;
    },
},
# 原代码是压缩的, 自行去掉换行
  1. 重新打包 apktool b steam --frame-path ./fm
  2. 签名用安卓上的mt管理器, 因为 homebrew 没搜到 keytool

后面又搜了下, 是openjdk自带的, 上面安装apktool已经作为依赖安装了, 但是没有加入环境变量 这里记录下, 免得以后用到

1
2
echo 'export PATH="/usr/local/opt/openjdk/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc

生成密钥 key.keystore

1
2
3
4
5
6
7
8
9
keytool -genkey -noprompt \
    -keyalg RSA \
    -keysize 2048 \
    -validity 10000 \
    -storepass [YOUR PASSWARD] \
    -keypass [YOUR PASSWARD] \
    -keystore key.keystore \
    -alias attemptone \
    -dname "CN=explame.com, OU=dont, O=use, L=this, S=in, C=production"
1
2
3
4
5
6
7
8
zipalign -v -f 4 steam/dist/steam.apk  steam/dist/steam-aligned.apk
mv steam/dist/steam-aligned.apk steam/dist/steam.apk
apksigner sign \
    --ks key.keystore \
    --ks-key-alias attemptone \
    --ks-pass pass:[YOUR PASSWARD] \
    --key-pass pass:[YOUR PASSWARD] \
    steam/dist/steam.apk
  1. 安装 先卸载 adb uninstall -k com.valvesoftware.android.steam.community 保留数据不知道有没有用 adb install steam/dist/steam.apk

我的手机系统是修改版, 下面d logcat获取不了数据, 所以装到mumu模拟器上了 在macos的上的端口是555 adb connect 127.0.0.1:5555 adb devices adb -s xxx

  1. 正常登录添加二步验证

  2. adb logcat ReactNative:V ReactNativeJS:V, 不知道是不是版本不一样, 我这里显示不支持*:S参数, 不过去掉不影响

获取到的数据是

1
{"shared_secret":"GhaOI7A**********2X0=","identity_secret":"aX+WA************xj+r4=","secret_1":"M**********h0NA=","serial_number":"2*************0","revocation_code":"*****","account_name":"*****","token_gid":"*********","phone_number_hint":"8888"}
  1. 解码

shared_secret

1
2
3
4
5
import base64

shared_secret = 'GhaOI7A**********2X0='

print("Secret:", base64.b32encode(base64.b64decode(shared_secret)).decode())
  1. 直接添加到keepassXC, 类型选择steam, 然后和安卓端的对比下, 一样就没问题了
Built with Hugo
Theme Stack designed by Jimmy