Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Rooted Android] 3.x 新版导出令牌的另一种思路 #2276

Open
MuelNova opened this issue Nov 19, 2022 · 26 comments
Open

[Rooted Android] 3.x 新版导出令牌的另一种思路 #2276

MuelNova opened this issue Nov 19, 2022 · 26 comments
Labels
documentation Improvements or additions to documentation

Comments

@MuelNova
Copy link

MuelNova commented Nov 19, 2022

详情可以查看 #2129 (comment)

因为 steam 3.x 是使用 React Native 写的,所以可以通过修改 bundle 的形式完成 Javascript 注入并获取我们想要的东西。

注意的是,这个方法需要修改 APK 签名,所以你可能需要先把 Android 对于降级/签名不一致检测的方法 Patch 掉,可以使用 CorePatch 这个 Xposed 模块做到。

注入 Javascript 获取令牌的简易方法:

  • 打开 steam.apk 下的 assests/index.android.bundle
  • 查找 key: "GetSteamGuardInfo",在 value 对应的 function 内,在 return 上方加入这样几行
                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;
              },
            },
  • 保存,打包签名(如果安装了 CorePatch 那么就不需要签名了)并安装到你的设备,这里推荐使用 adb install -r steam_patched.apk
  • 此时,使用 adb 连接到你的设备,并在命令行内输入 adb logcat *:S ReactNative:V ReactNativeJS:V\
  • 现在打开 APP,切换到令牌页,你应该能在命令行中看到 JSON 格式的令牌了。
    image

说实在的,这个方法实在是没有降级导出再升级 / 抓包的方法容易,但是如果可以作为为后来人逆向(关于这部分的讨论也可以看 #2129 (comment) )的参考,那也是有意义的。

@MuelNova
Copy link
Author

更新了一种 frida 注入的思路:
See: Blog

@rmbadmin
Copy link
Member

感谢提供得思路和帮助!

@Restore000
Copy link

成功了,谢谢。

@Restore000
Copy link

大佬牛逼。

@66Leo66
Copy link

66Leo66 commented Dec 4, 2022

请问获取了json格式令牌后如何构造成totp密钥(供Bitwarden使用,要求的格式是steam://[secret]),谢谢

@MuelNova
Copy link
Author

MuelNova commented Dec 4, 2022

请问获取了json格式令牌后如何构造成totp密钥(供Bitwarden使用,要求的格式是steam://[secret]),谢谢

在 json 里有一个 uri 字段,以 otpauth开头的。 secret 就在那

@66Leo66
Copy link

66Leo66 commented Dec 4, 2022

请问获取了json格式令牌后如何构造成totp密钥(供Bitwarden使用,要求的格式是steam://[secret]),谢谢

在 json 里有一个 uri 字段,以 otpauth开头的。 secret 就在那

通过修改apk得到的json如您在上方的截图,没有看见uri,只有shared_secret, identity_secret, secret_1等,如何获取有uri字段的json?

@MuelNova
Copy link
Author

MuelNova commented Dec 4, 2022

请问获取了json格式令牌后如何构造成totp密钥(供Bitwarden使用,要求的格式是steam://[secret]),谢谢

在 json 里有一个 uri 字段,以 otpauth开头的。 secret 就在那

通过修改apk得到的json如您在上方的截图,没有看见uri,只有shared_secret, identity_secret, secret_1等,如何获取有uri字段的json?

使用 Python 或其他的脚本将 shared_secret 转换为 Base32 即为 otp 中使用的 secret
附带一个 Python 脚本,自行修改 shared_secret 即可

import base64

shared_secret = 'YOUR_SHARED_SECRET'

print("Secret:", base64.b32encode(base64.b64decode(shared_secret)).decode())

@qaq112233
Copy link

我在控制台里没有获得想要的输出,MIUI13(Android12)、Steam3.4,正在找哪里出了问题

@qaq112233
Copy link

我在控制台里没有获得想要的输出,MIUI13(Android12)、Steam3.4,正在找哪里出了问题

Steam3.0 也没有用 还在找哪里出问题了QAQ

@MuelNova
Copy link
Author

MuelNova commented Jan 26, 2023

我在控制台里没有获得想要的输出,MIUI13(Android12)、Steam3.4,正在找哪里出了问题

测试环境:

  • realme UI 4.0 ( Android 13 )
  • Steam 3.4
  • 使用 LuckyTool 设置了以下参数
    • Allow downgrade apps
    • Disable package manager signature validation
    • Disable APK Signature validation

仍然使用 issue 提到的修改方式
image
image
此时确实无法获得输出。
晚上我测试一下其他方法。

Update

Frida 注入方法也无法在这种情况下使用。
Frida 仍然可用,但是不清楚是我 frida 版本的问题还是什么问题,极其容易报错。等我再调一哈。

@dianliao
Copy link

老哥 有了这个json令牌之后该怎么导入到steam++里面QWQ,是要进行解密还是重新排序?

@MuelNova
Copy link
Author

老哥 有了这个json令牌之后该怎么导入到steam++里面QWQ,是要进行解密还是重新排序?

image

json 对应 SteamGuard-NNNNNNN 文件,导入即可。

uuid 可以随便生成一个,不影响

@dianliao
Copy link

老哥 有了这个json令牌之后该怎么导入到steam++里面QWQ,是要进行解密还是重新排序?

image

json 对应 SteamGuard-NNNNNNN 文件,导入即可。

uuid 可以随便生成一个,不影响
EZY34DQC7@0{K5CRH2KDA99

老哥 我导入之后是这样子,是因为我的格式不对吗?

@dianliao
Copy link

老哥 有了这个json令牌之后该怎么导入到steam++里面QWQ,是要进行解密还是重新排序?

image
json 对应 SteamGuard-NNNNNNN 文件,导入即可。
uuid 可以随便生成一个,不影响
EZY34DQC7@0{K5CRH2KDA99

老哥 我导入之后是这样子,是因为我的格式不对吗?
}%POC`PO5$@3IWV{GTVKZU4

@MuelNova
Copy link
Author

老哥 有了这个json令牌之后该怎么导入到steam++里面QWQ,是要进行解密还是重新排序?

image
json 对应 SteamGuard-NNNNNNN 文件,导入即可。
uuid 可以随便生成一个,不影响
EZY34DQC7@0{K5CRH2KDA99

老哥 我导入之后是这样子,是因为我的格式不对吗?
}%POC`PO5$@3IWV{GTVKZU4

多嵌套了一层,导入的应该是类似这样的

{
    "shared_secret": "xxx",
    "identity_secret": "xxx"
}
```
这个格式

@dianliao
Copy link

老哥 有了这个json令牌之后该怎么导入到steam++里面QWQ,是要进行解密还是重新排序?

image
json 对应 SteamGuard-NNNNNNN 文件,导入即可。
uuid 可以随便生成一个,不影响
EZY34DQC7@0{K5CRH2KDA99

老哥 我导入之后是这样子,是因为我的格式不对吗?
}%POC`PO5$@3IWV{GTVKZU4

多嵌套了一层,导入的应该是类似这样的

{
    "shared_secret": "xxx",
    "identity_secret": "xxx"
}

这个格式

nice老哥 导入进去了 谢谢你了

@rmbadmin rmbadmin pinned this issue Mar 29, 2023
@rmbadmin rmbadmin added the documentation Improvements or additions to documentation label Mar 29, 2023
@Vstory
Copy link

Vstory commented Jun 19, 2023

我在控制台里没有获得想要的输出,MIUI13(Android12)、Steam3.4,正在找哪里出了问题

测试环境:

  • realme UI 4.0 ( Android 13 )
  • Steam 3.4
  • 使用 LuckyTool 设置了以下参数
    • Allow downgrade apps
    • Disable package manager signature validation
    • Disable APK Signature validation

仍然使用 issue 提到的修改方式 image image 此时确实无法获得输出。 晚上我测试一下其他方法。

Update

Frida 注入方法也无法在这种情况下使用。 Frida 仍然可用,但是不清楚是我 frida 版本的问题还是什么问题,极其容易报错。等我再调一哈。

得出的密钥导入到steam++正常,导入bitwarden不行。是换了加密方案吗?

@TinkMingKing
Copy link

我在控制台里没有获得想要的输出,MIUI13(Android12)、Steam3.4,正在找哪里出了问题

测试环境:

  • realme UI 4.0 ( Android 13 )
  • Steam 3.4
  • 使用 LuckyTool 设置了以下参数
    • Allow downgrade apps
    • Disable package manager signature validation
    • Disable APK Signature validation

仍然使用 issue 提到的修改方式 image image 此时确实无法获得输出。 晚上我测试一下其他方法。

Update

Frida 注入方法也无法在这种情况下使用。 Frida 仍然可用,但是不清楚是我 frida 版本的问题还是什么问题,极其容易报错。等我再调一哈。

得出的密钥导入到steam++正常,导入bitwarden不行。是换了加密方案吗?

不是标准协议,当然不行,手机可以用aegis

@Vstory
Copy link

Vstory commented Jun 21, 2023

不是标准协议,当然不行,手机可以用aegis

Bitwarden 支持 Steam TOTP,突然不行了,不清楚是不是 Steam 改了加密方案。
用 Bitwarden 就是为了跨平台使用的

@Vstory
Copy link

Vstory commented Jun 29, 2023

Bitwarden 支持 Steam TOTP,突然不行了,不清楚是不是 Steam 改了加密方案。 用 Bitwarden 就是为了跨平台使用的

已使用 SteamDesktopAuthenticator v1.0.12 解决。

@qaq112233
Copy link

Bitwarden 支持 Steam TOTP,突然不行了,不清楚是不是 Steam 改了加密方案。 用 Bitwarden 就是为了跨平台使用的

已使用 SteamDesktopAuthenticator v1.0.12 解决。

请问下你得到的密钥是用本issue的方法吗?不知道为啥我这没有输出?
或者有啥能用的方法吗

@Vstory
Copy link

Vstory commented Jul 1, 2023

请问下你得到的密钥是用本issue的方法吗?

不是。本项目的方案,我修改的文件,但是获取的密钥生成的验证码和 Steam 对不上。

或者有啥能用的方法吗

使用 SteamDesktopAuthenticator 这个项目的应用。添加验证器,就可以获取到密钥,密钥在应用创建的 maFiles 文件夹里的一个文件里。文件内容有 url 开头的,后面跟的就是密钥。添加手机验证器时,会提示是否加密,我选择未加密。这里不清楚加密后,创建的包含密钥的文件是否会被加密,为了省事,选择不加密。
如何使用 SteamDesktopAuthenticator 我就不说了,项目有 readme。按流程操作就好了。
添加账户遇到的问题请查看 SteamDesktopAuthenticator 的 issuse。

@R1Yue
Copy link

R1Yue commented Sep 15, 2023

真的厉害!!一次成功!!

@zuluion
Copy link

zuluion commented Sep 26, 2023

请问下你得到的密钥是用本issue的方法吗?

不是。本项目的方案,我修改的文件,但是获取的密钥生成的验证码和 Steam 对不上。

或者有啥能用的方法吗

使用 SteamDesktopAuthenticator 这个项目的应用。添加验证器,就可以获取到密钥,密钥在应用创建的 maFiles 文件夹里的一个文件里。文件内容有 url 开头的,后面跟的就是密钥。添加手机验证器时,会提示是否加密,我选择未加密。这里不清楚加密后,创建的包含密钥的文件是否会被加密,为了省事,选择不加密。 如何使用 SteamDesktopAuthenticator 我就不说了,项目有 readme。按流程操作就好了。 添加账户遇到的问题请查看 SteamDesktopAuthenticator 的 issuse。

实测 选择加密后 密钥文件会被加密,同时 v1.0.14 pre 加密提示选择 cancel 后没有后续提示出现,疑似bug,最终在 v1.0.12 提取到了 secret

@jqtmviyu
Copy link

jqtmviyu commented Oct 31, 2023

感谢, 已成功

我是参考 https://art.dogcraft.top/archives/254/

  1. 把应用解包, 修改对应代码, 重新打包
  2. 因为homebrew没搜到签名工具, 用安卓上的mt管理器签名的
  3. miui精简系统抓不到log, 所以装到mumu模拟器里
  4. *:S 提示不存在, 把它去掉了, 不影响
  5. 我是直接加到keepassXC, 类型选择steam就ok了

最后问下, root的方法是什么, 网上都是2.x版本的, 但是退回旧版本登录后一直转圈进不去

尝试过抓包, 但macos 上的stem++ host加速模式不知道怎么设置生效, 走charles就走不了clash了(Enhanced Mode也不行)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation
Projects
None yet
Development

No branches or pull requests