在苹果的 GameCenter 上获得高分
设置
在本教程中,我将向您展示使用mitmproxy创造性地干扰Apple Game Center流量的简单性。要进行设置,请安装mitmproxy根证书。然后在桌面上启动mitmproxy,并将iPhone配置为将其用作代理。
看看游戏中心的流量
让我们先来看一下游戏中心的流量。我将在本教程中使用的游戏是《超级巨型蠕虫》(Super Mega Worm),这是一款用于iPhone的出色的复古启示录侧滑游戏:
完成游戏(花点时间)之后,观察流过mitmproxy的流量:
我们看到了很多我们可能期望的事情-初始化,排行榜的恢复等等。然后,在结尾处,有一个诱人的URL到该POST:
https://service.gc.apple.com/WebObjects/GKGameStatsService.woa/wa/submitScore
提交的内容特别有趣:
<plist version="1.0">
<dict>
<key>scores</key>
<array>
<dict>
<key>category</key>
<string>SMW_Adv_USA1</string>
<key>context</key>
<integer>0</integer>
<key>score-value</key>
<integer>55</integer>
<key>timestamp</key>
<integer>1363515361321</integer>
</dict>
</array>
</dict>
</plist>
这是一个属性列表,其中包含游戏的标识符,得分(在这种情况下为55)和时间戳。看起来很简单。
修改和重播分数提交
让我们编辑分数提交。首先,在mitmproxy中选择它,然后按Enter键查看它。确保您查看的是请求,而不是响应-您可以使用 Tab键在两者之间滑动。现在按 e进行编辑。系统将提示您输入要更改的请求部分-按r 表示原始内容。现在将启动您首选的编辑器(从EDITOR环境变量中获取)。让分数提高一些野心吧:
<plist version="1.0">
<dict>
<key>scores</key>
<array>
<dict>
<key>category</key>
<string>SMW_Adv_USA1</string>
<key>context</key>
<integer>0</integer>
<key>score-value</key>
<integer>2200272667</integer>
<key>timestamp</key>
<integer>1363515361321</integer>
</dict>
</array>
</dict>
</plist>
保存文件并退出编辑器。
最后一步是重播此修改后的请求。只需按 r即可重播。
光荣的结果和一些阴谋
就是这样-根据记录,我是有史以来最伟大的超级超级蠕虫玩家。
这个故事有一个奇怪的附录。当我第一次编写本教程时,所有顶级竞争对手的分数都是相同的:2,147,483,647(现在不再是这种情况了,因为现在有太多使用本教程的作弊者)。如果您认为该数字看起来很熟悉,那是对的:它是2 ^ 31-1,您可以将其放入一个有符号的32位int中。现在,让我告诉您有关超级巨型蠕虫的另一件奇特的事情-在每局游戏结束时,它都会向游戏中心提交您之前的最高分,而不是您当前的分。这意味着它会将您的高分存储在某个地方,而我猜想它会将存储的分数读回到带符号的整数中。所以,如果你是要用相对行人的手段作弊以修改越狱手机上保存的分数,那么2 ^ 31-1可能就是您可以获得的最高分数。再说一次,如果游戏本身将分数存储在一个签名的32位整数中,那么您可以通过完美玩法获得相同的分数,从而有效地击败了游戏。那么,在这种情况下是哪个?我让你决定。