(此帖子最初是使用WordPress在ryanmarkel.com上发布的,可以在http://ift.tt/29ripz0上找到。)
今天在r / kappa上有一个有趣的帖子(警告:subreddit并不完全是SFW),它讨论了在Street Fighter V中解锁字符的颜色而不必真正磨碎Survival模式的情况,这使我感兴趣,因为这很烦人。字符和服装。
(我将把其余的内容隐藏在跳转后面,因为它将变得很长,并且其中将包含一堆API请求转储。如果那不是您来到这里的话,您可能不想阅读它们。对于。)
顺便说一句,在我写完这篇文章之后,在我发表之前,完整的代码列表也被发布在r / kappa上的一个线程中,所以现在我将它推到那里。 为了公开起见,我一直坚持使用它,但是现在它是公开的,没有理由我不公开它。
提示
这是您的线索:
为SF5 / contents /(无论您的数字字符串是什么)/ serviceid设置一个断点。 祝贺屏幕后,按X键进入生存状态并清除一次(最好是最简单的操作,因为这很容易),然后转到计算机。 您应该很快看到“ serviceid”断点弹出。 将其保留在请求中,然后单击下面的“文本”选项卡。 请确保注意请求的“ SVLnnnnnn”(对于您的虚拟变量,n是可变数字)部分,其余字符串无关紧要。 您会注意到SVL部分附带有HEX,这非常好,因为我们现在只需要处理16个处于可预测模式的变量即可。
我不知道他们在使用什么,所以我做了一些谷歌搜索,发现可以使用Charles来设置连接断点,这在任何情况下都可以用来监视网络流量,这似乎是一个不错的工具,如果您需要查看什么的话是做。 我拿起副本,开始看看。
(如果您做任何涉及网络连接的事情,仅根据我最初的尝试,就应该获取该应用程序的副本,因为它立即会变得非常有用。而且-要实现这一目的,您可以将其设置为内部网络上的代理服务器,并通过它运行其他操作。)
入门
我设置了Charles并通过它运行了PS4,这至少使我很好地了解了网络流量的状况。 (无论如何都可以看到PSN的东西,这很有趣。)
在基本级别上,您至少可以看到API请求是通过以下方式发送的:
api.prod.capcomfighters.net
如果您尝试通过纯HTTP访问它,则不会收到响应,因此让我们尝试在Web浏览器中通过HTTPS访问它而无需请求。
呃…
嘿,所以这很有趣,因为任何值得其加盐的客户都会立即拒绝此权利。 (任何网络浏览器都会告诉您立即停止查看您正在查看的内容。)因为:
- 证书已过期(!!!)
- 该证书显然是由Capcom颁发的,如果他们甚至拥有根证书,我也会感到惊讶
继续,这变得更加有趣,因为这意味着SFV客户端是专门为忽略证书警告而设计的 。 如果绕过安全警告,则会看到以下默认Apache欢迎屏幕:
通过测试该证书警告事件并尝试通过使用代理服务器上的自签名证书来窥视应用程序的HTTPS流量,我们可以看到更多有趣的内容。 瞧,这可以正常工作,并且SFV非常愿意接受任何自签名证书作为连接的一部分,因此我们现在可以有意识地在我们自己的SFV服务器通信中间人并对其进行研究。
为此,只需将Charles设置为仅用于对CFN API的内容请求的SSL代理。
顺便说一句,嗅探这些流量并进行逆向工程似乎是V-League及其在Fightgame.community之前能够将排名联盟的信息从API中提取出来并对其进行整洁的事情,例如我在V-联盟。
看到这些应用程序并意识到它们使用的是完全没有证件且(可能是无意的)不安全的API来获取统计信息,这真是太有趣了,如果所有格斗游戏都具有这样的玩家API来从中获取信息,那将是非常令人惊讶的 。做整洁的事情。
我将在此处跳过介绍性材料,并深入了解我想向您展示的内容,这是在Easy with Ibuki上通过Survival模式运行时,从我的SFV客户端向CFN服务器发出的一系列API请求,查看服务如何通信。
Ibuki Survival在API请求中解锁
如果您开始嗅探流量以进行查看,然后开始一轮生存,您会注意到的第一件事就是游戏客户端向服务器发送了常规的“心跳”请求/响应(我不会不要在这里打印出来;这很常规,很容易看到)。
打破这些令人震惊的东西将是您与服务“断开连接”的原因,因此很容易想到,无论是立即玩游戏的人数,还是最大的HTTPS连接数或负载均衡器过载。 它大约每分钟发送一次此心跳(请求之间有大约一秒钟的漂移)。
当您完成一整套生存后,在按祝贺屏幕上的一个按钮之前,什么也不会发生。 执行此操作时,系统将发送带有以下CSV负载的API请求(在此示例中,对于“战斗服装”为“易”的Ibuki):
是的,我知道那很丑。
响应是这样的(为了以防万一,我删除了帐户的某些标识符):
收到此消息后,我的客户将API请求发送到:
GET / bentov2 / sf5 / contents / 2791787330 / entitlements HTTP / 1.1
并得到以下响应,这似乎是我的帐户已解锁的内容的清单(并且我还假设其中还包括DLC权利):
此响应大于我之前收到的权利响应,表明我已向帐户添加解锁。 通过差异工具检查它,发现添加了一项权利:
oyIKO6VQ
收到此消息后,我的客户立即向服务商列表发送了带有服务ID列表的*另一个*请求:
同样也收到了另一个答复:
在这两者之间运行差异会显示以下更改:
- 生存模式请求未重复。
- 这些条目已添加:
- PLLV00000300
- CHLV18000010
- CHLV18001010
此后,另一个权利请求被发送,并收到以下响应:
添加了三个附加权利:
- dxRuwGB3(“类型4”)
- fsGNNJdl(“类型7”)
- 1eZ1K105(“类型7”)
如果将此与系统消息日志进行比较,则有以下几组附加功能:
- Ibuki Battle Outfit颜色3已解锁(第一个请求的权利)
- 我获得了战斗金钱XP和更多战斗金钱,以提高等级并在Easy上击败Survival。
- Ibuki已解锁一个头衔(我相信会通过10级)。
- 商店中解锁了两个标题。
- Ibuki的Color 13在商店中已解锁。 (通过10级。)
看看权利的各种“类型”是什么会很有趣。 它们清楚地存储在服务器端,但是不清楚如何将它们连接到您的帐户。 它们是连接到您的PSN帐户,还是仅连接到您的CFN帐户? 在这种情况下,如果由于任何原因失去对CFN帐户的访问权限怎么办? 您的权利会跟随您进入新帐户吗?
猜想解锁
这似乎与解锁有关:
- 所有解锁实际上都是在客户端。 这就是为什么培训师使用PC版本的原因。 在生存运行或其他解锁先决条件期间,不会做任何检查游戏状态的操作(除了可能进行每个级别的试验;我没有检查过)。 模式完成后,将向服务器发送一个请求,说明“我的帐户已执行此操作。”服务器上回复“是的,我们同意,您的帐户已执行此操作。”
- 这似乎是不必要的,但有可能这是允许您解锁并在您使用与CFN帐户绑定的PSN帐户登录时将您从PS4“跟随”到PS4的原因。
- 如果一件事情的解锁演变为另一种状态变化,例如清除向帐户添加XP的模式,这会使您超出阈值,则客户端将获取服务器响应,一边进行数学运算,然后发送回“ OK ; 我现在做了其他事情”,服务器说“是的,您做到了; 执行此操作,直到API报告没有新的解锁信息为止。
- 生存解锁的值似乎遵循一种可预测的模式,即游戏模式,角色值,服装值。 我不确定是否还有其他价值。 如果您知道要发送的值,则可以告诉服务人员您已通过任何角色和任何服装清除了任何生存等级,并且别无选择,只能信任该信息。
- 这可能并不完全适用于故事解锁(角色或电影),审判或演示,尽管我假设这些故事也非常系统化,并且除了简单的价值检查外没有其他任何东西。
- 因此,如果您拥有帐户信息并且具有有效的身份验证Cookie(这是它们“保护” API服务的方式”),则可以将模式完成内容欺骗到服务器,并且无法知道您是否确实做了你在说什么 它只会相信您的请求并为您提供解锁,XP和Fight Money。
我不完全确定XP的总值存储在哪里。 来自客户端的请求具有告诉服务器您的角色和玩家等级是什么的值,但是由于服务器端的XP与客户端的玩家等级不匹配,因此很容易分辨出它们是否是假的。 (更新:XP存储在服务器端。)
无论如何,这已经有很多麻烦了,而且已经很晚了,所以我将仅提供这些信息。 如果这将您引向某个地方,那就太好了! 在Twitter上对我执行ping操作以发表评论。 我还为示例数据建立了GitHub存储库,并希望社区可以汇总一些文档。 如果您有更多数据或希望对此做出贡献,请提出拉取请求。