前情提要

现在导出steam令牌数据是真的麻烦
https://keylol.com/t900854-1-1
(出处: 其乐 Keylol)

论坛之前一些大佬已经发过了许多方式的教程,比如

[ROOT ANDROID] STEAM 3.0 导出令牌的思路
https://keylol.com/t854675-1-1
(出处: 其乐 Keylol)

【Android】从3.0以上版本的steam app中获取令牌文件经验小结
https://keylol.com/t901003-1-1
(出处: 其乐 Keylol)

本文就安卓模拟器+frida python调试的令牌导出提供一个比较详细的教程

优点:不需要一台root的手机只需要电脑即可实现导出,且相比一些别的方法相对安全。
缺点:繁琐,且要将令牌转移到模拟器上,吃2天cd

准备知识

本教程使用安卓模拟器 + adb frida 调试 + python脚本导出令牌数据。

操作前须知:

  1. 转移提取后令牌将存在于模拟器上,**原有的手机上的令牌将失效,**不能使用官方客户端扫码登录、确认交易等功能
  2. 转移后有两天左右的市场CD

需要的工具

  1. python 以及frida库
  2. adb调试工具
  3. 安卓模拟器(教程使用雷电模拟器)
  4. frida-server

工具安装

安卓模拟器

模拟器安装后请自行下载并安装steam客户端备用。

安装steam客户端只需将下载的apk文件拖入即可。

python安装及配置

如果已经安装过并配置了环境变量,可以跳转到安装frida依赖部分。

安装frida依赖:

pip install frida frida-tools

adb调试工具安装

本教程使用一键安装脚本进行安装,GitHub

安装时如果提示要安装.NET,点击安装即可。
等待安装结束,打开命令提示符,输入以下代码

adb --version

如果出现类似输出,则说明已经安装完成。

Android Debug Bridge version 1.0.41
Version 34.0.4-10411341
Installed as C:\Program Files\platform-tools\adb.exe
Running on Windows 10.0.19045

开始调试

安卓模拟器打开设置,打开root权限

打开后记得按提示重启模拟器

重启后打开模拟器里内置的设置应用程序,找到关于平板电脑>版本号,连续点击7次打开开发者模式

返回,进入"系统",展开“高级”,进入开发者选项,找到并开启USB调试

打开后在命令提示符里输入以下代码:

adb devices

如果出现类似输出,说明可以正常检查到模拟器

以使用雷电模拟器为例,在命令提示符输入以下代码:

adb connect 127.0.0.1:5555
出现 `connected to 127.0.0.1:5555`,说明连接成功

[!info]+
一些其他模拟器的连接端口:
夜神模拟器:adb connect 127.0.0.1:62001
逍遥安卓模拟器: adb connect 127.0.0.1:21503
天天模拟器:adb connect 127.0.0.1:6555
海马玩模拟器 :adb connect 127.0.0.1:53001
网易MUMU模拟器:adb connect 127.0.0.1:7555

命令提示符输入:

adb root

现在来到你下载并解压(如果在GitHub上下载的是压缩包)frida-server-16.1.3-android-x86_64后的文件目录

[!note]
雷电模拟器使用的是x86_64架构,别的模拟器不一定是,要依据架构选择所需的frida-server,可在GitHub上下载

在导航栏输入cmd回车,在该目录打开命令提示符,分别输入回车以下三行代码

adb push frida-server-16.1.3-android-x86_64 /data/local/tmp/
adb shell "chmod 755 /data/local/tmp/frida-server-16.1.3-android-x86_64"
adb shell "/data/local/tmp/frida-server-16.1.3-android-x86_64 &"

输入后,打开新的命令提示符窗口,输入

frida-ps -U

如果出现类似输出,说明连接成功。
image.png

打开steam移动端应用,登录要提取令牌的账号,然后点底部导航栏中间添加令牌,点击恢复令牌(如果你是已有令牌)
接受短信验证码,如果出现让你记录恢复码,那么说明令牌就转移到模拟器里了。
接着运行steamguard.py文件

import json
import frida
import sys

package = "com.valvesoftware.android.steam.community"
cmd = """
'use strict;'

if (Java.available) {
  Java.perform(function() {

    //Cipher stuff
    const Cipher = Java.use('javax.crypto.Cipher');

    Cipher.doFinal.overload('[B').implementation = function (input) {
        var result = this.doFinal.overload('[B').call(this, input);
        send(result);
    }

  }
)}
"""


def parse_hook(cmd_):
    print('[*] Parsing hook...')
    script = session.create_script(cmd_)
    script.on('message', on_message)
    script.load()


def on_message(message, _):
    try:
        if message:
            if message['type'] == 'send':
                result = "".join(chr(i) for i in message['payload'])
                print(json.dumps(json.loads(result), indent=2, ensure_ascii=False))
    except Exception as e:
        print(e)


if __name__ == '__main__':
    try:
        print('[*] Spawning ' + package)
        pid = frida.get_usb_device().spawn(package)
        session = frida.get_usb_device().attach(pid)
        parse_hook(cmd)
        frida.get_usb_device().resume(pid)
        print('')
        sys.stdin.read()

    except KeyboardInterrupt:
        sys.exit(0)
    except Exception as e:
        print(e)

现在在你的保存了steamguard.py的目录,像之前一样在导航栏输入cmd打开命令提示符,并输入以下代码

python steamguard.py

如果你成功输出了类似结果
image.png
则说明提取成功。
将黄色标记部分之间的大括号部分复制来,新建一个txt文件,粘贴进去保存,.txt后缀改为.mafile,你就获得一个可以导入其他第三方软件的令牌了。
如果想用Steam网页的一键确认脚本,直接将复制的内容导入即可。

本文原发布在其乐论坛,Steam 安卓模拟器+frida python调试的令牌导出教程 - 平台工具 - 其乐 Keylol


标题:改版后Steam令牌导出教程
作者:shiquda
地址:https://shiquda.link/articles/2023/11/29/1701219538802.html
除非特别说明,本博客上的所有内容均在CC BY-SA 4.0许可下提供。 如需转载请注明作者与来源,谢谢!