Rei*_*ain 8 reverse-engineering xbox windows-live-id mitmproxy xbox-one
由于微软决定将Xbox Live用户的个人资料页面置于登录墙之后,出于某些愚蠢的原因,我不得不寻找其他方法来确定Xbox Live用户是否在线.
为此,我使用了mitmproxy来确定iOS版Xbox One Smartglass应用程序的请求.似乎对于任何需要身份验证的请求,应用程序使用"XBL3.0 x = {computed auth token}"填充"身份验证"标头字段.
我已想出的是,应用程序通过执行一个POST请求来获取接入令牌https://login.live.com/oauth20_token.srf并传递形式的编码数据,其中所述属性中的一个是用户的"refresh_token".您可以通过使用mitmproxy查看任何这些请求来获取此刷新令牌.
然后,应用程序继续向https://user.auth.xboxlive.com/user/authenticate发送POST请求,传递我无法确定其来源的各种信息.以下是此请求的示例JSON有效内容:
{
"Properties": {
"AuthMethod": "RPS",
"RpsHeader": "<data removed for safety>",
"RpsTicket": "<data removed for safety>",
"SiteName": "user.auth.xboxlive.com"
},
"RelyingParty": "http://auth.xboxlive.com",
"TokenType": "JWT"
}
Run Code Online (Sandbox Code Playgroud)
此请求的响应包含以下JSON:
{
"DisplayClaims": {
"xui": [
{
"uhs": "<data removed for safety>"
}
]
},
"IssueInstant": "2014-08-02T23:44:56.5868148Z",
"NotAfter": "2014-08-16T23:44:56.5868148Z",
"Token": "<data removed for safety>"
}
Run Code Online (Sandbox Code Playgroud)
连接在一起的"uhs"和"token"的内容似乎是"XBL3.0 x ="授权标头中缺少的身份验证令牌.
问题是我对微软的网络堆栈完全不熟悉,经过几个小时的搜索,我无法弄清楚"RpsHeader"和"RpsTicket"的价值来自哪里.
我相信 RPS 指的是使用真实/微软帐户的联合登录。因此,RpsHeader 和 RpsTicket 是从登录到 login.live.com 的帖子中收到的信息。然而,如何根据从 live.com 接收到的数据创建该数据可能更难弄清楚,但我猜它是从 love.com 响应中获取一些数据并对其进行 base64 编码或其他内容。