如何使用iOS应用反向工程创建自己的Snapchat API客户端

抽象

动机

去年,我不得不在Snapchat的移动应用程序上使流程自动化,以便与脚本中的其他帐户进行交互。 由于Snapchat不提供任何公共API,因此我决定创建自己的客户端。 这个想法是创建一个非常可扩展的客户端以直接与其API进行交互,而不仅仅是半自动化地使用该应用程序。

为什么这么复杂?

在我之前,许多优秀的程序员为Snapchat创建了开源客户端(可以在Github上轻松找到源代码)。 问题在于Snapchat安全团队做得很好。 该API使用许多非常复杂的令牌来检查客户端请求的完整性,没有人找到一种方法来重现这些令牌后面的算法以模拟真实应用。

诀窍是什么?

对我们来说幸运的是,Snapchat是一个移动应用程序,并且由于您拥有客户端,因此您可以使用逆向工程技术来了解该应用程序的工作原理,并找到一种可以利用它的方法,从而发挥自己的优势。

经过数天的研究以了解该应用程序,我能够编写一个调整并将iOS设备用作身份验证服务。 以下是其工作方式的简化方案。

最终结果

使用这项技术和一些优化措施,我每天每台设备能够向Snapchat的API发送超过1000万个请求。 由于最终的架构是多设备支持就绪,因此规模几乎是无限的。

直接使用Snapchat应用作为身份验证提供程序的好处在于,几乎所有更新(甚至是主要版本)都不会破坏您的客户端,而且比尝试解密高安全性令牌要简单得多。 实际上,该客户在没有任何维护的情况下工作了一年很好,并且现在仍在工作。