Total Pageviews

Saturday 25 August 2012

「上网快鸟」iOS 客户端实现原理分析

一个 iOS/Android app 「上网快鸟」, 据称能实现增大 40% 的上网流量. Android 权限控制乱七八糟, app 什么事情都能做的出来, 节省流量什么的不奇怪; 但 iOS 平台上 app 权限控制非常严格, 这个 app 还是通过官方的 App Store 发行的, 所以很好奇它是如何实现节省流量的.
一开始我以为这个 app 是类似 opera mobile 或者 ucweb 那样提供一个内置浏览器, 将网络访问都通过服务器中转来实现压缩传输, 但这样理论上传输压缩只对内置浏览器生效, 对其他 app 是无效的, 而软件介绍中声称流量压缩功能对为微博 / 微信等其他 app 也有效, 这就更值得好好研究一下实现原理了.
安装好这个 app, 第一次运行会提示有可优化项目。
点击「一键优化」以后会跳转到 safari, 打开一个 url, 提示要安装一个设备描述文件, 内容是 APN. 安装后会出现在「设置 – 通用 – 描述文件」中.
猜测这个 APN 里面可能包含了一个全局代理, 所以才实现了所有 app 都有效的流量压缩. 不过在我的 iPhone 4S + iOS6 beta 4 + 北京联通 上面, 设置里不知道为什么看不到接入点的选项.
为了验证猜测, 在 mac 上找到了跳转的 url: 'http://rpc.doodoobird.com/rpc-ios/config/install/31576?mcc=460&mnc=01&ip=113.31.80.218' (Mountain Lion 和 iOS6 的 iCloud 标签页帮了大忙, 省得输入一长串地址了). 将这个 url 的内容 curl 下来, 可以看到中间有一大段 Content-Type 是 application/x-apple-aspen-config 的 base64 编码的内容, 应该就是描述文件.
将 base64 编码的内容解开, 果真看到了描述文件的内容, 其中包含了一个名为 3gnet 的接入点, 代理设置为 p12.doodoobird.com:36255, 真相大白. 一旦启用这个接入点, 所有网络通信都将通过这个服务器中转. 猜测服务器端应该对传输内容做了 gzip 压缩之类的手段来实现的流量压缩, 这就不继续验证了.
用这种方法来实现流量压缩倒挺有新意, 不过就是风险极大. 所有流量通过第三方的服务器中转, 这就意味着各种帐号 / 密码 / 照片 / 地理位置 等隐私都有可能被这个第三方截获. 流量超额事小, 隐私泄漏问题可就严重了. 所以建议大家不要使用类似的软件. 如果已经安装了, 可以先在「设置 – 通用 – 描述文件」中删掉上网快鸟相关的描述文件, 再到「设置 – 通用 – 还原 – 还原网络设置」中彻底清理网络设置.

和所有透明代理一样,用户的http内容可能被嗅探,但https的内容就仍是安全的。

上网快鸟官网:
http://www.doodoobird.com/