语境
我正在尝试通过研究各种 iOS 原生应用程序如何在后台工作来了解有关网络安全的更多信息。我一直在使用 Burp Suite 作为 MITM 工具来检测从应用程序发送和接收的网络流量,并且在 iPhone 上我安装了 SSL Kill Switch 2 以绕过任何证书锁定。对于像我这样的初学者来说,看看引擎盖下的一切是如何运作的,这非常有趣和令人惊奇。
大多数应用程序我都没有遇到任何问题,这包括一些应该具有高安全性的应用程序,例如几个移动银行应用程序 - 一旦解除 SSL,一切都以纯文本形式可见。有趣的是,一些手机游戏让我很难过。
挑战
截获的流量似乎是加密的 JSON 文件。例如,
{
"F4q6i9xe":{"aV6cLn3v":"542668","Hhgi79M1":"ynB7X5P9"},
"a3vSYuq2: {"Kn51uR4Y":
"f3SQ5sySeaoDupGhGmCD9MKt0V4naBjXXR+jDEjqU1gmL32FgS8v1/6vy61RFO/rwmXwFYZHfTRgV2XujI6U7fESlcSZjMjdeiULExVg0uFmnSgiYA5040hBtuxfFqn+lP1ZCsvnua2IQHoYZDBagkr8I9VZVxQbzivc7rv5d17qscgnD2Jd4BBImn+ohuTpxPEC2H2sLBpAldLe/5EAbXUIkF8griS73lvjyWhmHubZguNUa9EzOCH8o0UPwo5BLB8Fz7xok1GE85/wwSzrlyapQw76/U/RJBF+/0YQ75BACuE4/SfIknim9XZk2EspKrCOu/Gi2K+7pHS+jytfXHR6zTjmeMyV2o967MUVXag="}
}
我做了什么
如果我理解正确,我现在处于解密领域。使用我从谷歌搜索中找到的一些分析方法,以下是我的一些发现(对于有经验的人来说,有些可能看起来非常明显和微不足道):
从应用程序发送的所有请求都采用这种精确的格式/结构。加密的密钥名称始终相同,只是值不同。
键的值
aV6cLn3v
似乎对应于某种时间戳,因为它在不断增加。我之前怀疑键对应的值
Hhgi79M1
会是一些基于时间戳的校验位,但事实并非如此。在游戏中执行相同的动作将导致相同的值,尽管时间戳不同。但是,不同的动作会产生不同的值。键的值
Kn51uR4Y
是实际有效负载所在的位置。我相信它是加密下的 JSON,但我不确定。有效载荷中的
/
符号似乎是数据段的分隔符。第二段/6vy61RFO/
似乎是基于时间戳的校验位。因为在游戏中执行两个相同的操作会产生两个几乎相同的 JSON,除了时间戳和负载中的这个特定部分。有效载荷的加密与 Base64 或 AES 有关,因为签名尾随 =('s),并且不同有效载荷的长度总是 4 的倍数。我不确定后者是否意味着什么。
使用的加密密钥似乎是恒定的。它不会因不同的会话和不同的设备而改变。
问题
到目前为止,我的分析是否正确?我应该从这里去哪里?由于我在这些领域的知识几乎为零,我不确定下一步该采取什么措施。我想我可能需要反编译应用程序并查看二进制文件以尝试查看是否可以找到解密密钥/功能。但我不确定。
我知道前面会有很多学习,但我不介意,因为我非常喜欢它,我非常感谢一些帮助,即使它只是我应该查看的主题和 URL 的快速列表进入。
更新 2015/11/23
我转储了应用程序的解密二进制文件并在它们上运行了一个字符串命令,然后我制作了一个 Python 脚本来成功挑选出加密密钥。感谢所有帮助过的人!