对 Xbox One Smartglass 应用的 API 授权标头进行逆向工程
Posted
技术标签:
【中文标题】对 Xbox One Smartglass 应用的 API 授权标头进行逆向工程【英文标题】:Reverse engineering the Xbox One Smartglass app's API authorization header 【发布时间】:2014-09-25 20:21:44 【问题描述】:自从 Microsoft 出于某种愚蠢的原因决定将 Xbox Live 用户的个人资料页面置于登录墙后,我不得不寻找其他方法来确定 Xbox Live 用户是否在线。
为此,我使用了 mitmproxy 来确定 ios 版 Xbox One Smartglass 应用程序发出的请求。看来,对于任何需要身份验证的请求,应用都会使用“XBL3.0 x=computed auth token”填充“身份验证”标头字段。
我发现应用程序通过向https://login.live.com/oauth20_token.srf 发出 POST 请求来获取访问令牌,并传入表单编码数据,其中一个属性是用户的“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"
此请求的响应包含以下 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>"
连接在一起的“uhs”和“token”的内容似乎是“XBL3.0 x=”授权标头中缺少的身份验证令牌。
问题是我完全不熟悉微软的网络堆栈,经过数小时的搜索,我无法弄清楚“RpsHeader”和“RpsTicket”的值来自哪里。
【问题讨论】:
由于您可以向随机用户隐藏您的存在和信息,但仍向朋友展示,因此将个人资料信息“隐藏”在“登录墙”后面是很有意义的。 【参考方案1】:我相信 RPS 是指使用 live/microsoft 帐户的联合登录。所以 RpsHeader 和 RpsTicket 是从登录到 login.live.com 的帖子中收到的信息。然而,如何从 live.com 接收的数据创建数据可能更难弄清楚,但我猜它是从 love.com 响应中获取一些数据,然后对其进行 base64 编码。
【讨论】:
【参考方案2】:您实际上是在向https://login.live.com/oauth20_authorize.srf 发送一个 GET 请求,然后立即向https://login.live.com/ppsecure/post.srf 发送一个 POST 请求。如果您查看对该 POST 请求的响应,您会在 Location 字段中看到一个名为 access_token 的子字符串,这就是您的 RpsTicket。
我的任何请求中都没有看到 RpsHeader,所以我对此一无所知。
【讨论】:
以上是关于对 Xbox One Smartglass 应用的 API 授权标头进行逆向工程的主要内容,如果未能解决你的问题,请参考以下文章
Win10 Xbox One预览版再更新:修复背景音乐等三项内
如何在 Windows 10 和 XBOX One UWP 应用之间使用漫游设置