说说下载劫持那些事儿
今年的双十一,想必广大千手观音们又狠狠的剁了几只手。然而,剁手换来的宝贝在漫漫快递路上也是命途多舛,轻者磕磕碰碰包装损毁,重者与快递货车一起被付之一炬。这些“不可抗力”造成的问题屡见不鲜,碰到了也只能自认倒霉。不过,有的网友看着苹果6代的订单,却啃着寄过来的6袋苹果,个中滋味大家就自行脑补吧…。其实,在安卓应用分发领域,这种“苹果6代”变“6袋苹果”的情况也屡见不鲜:
为什么会出现这种情况呢?其实一次网络下载的过程,就像一次“网购”,当我们点击下载按钮时,就跟下载服务器下了一份“订单”,“订购”了一个文件(当然大部分是免费的),服务器确认“订单”后,就会将文件在网络中“快递”(传输)到用户的终端(手机、PC等)。下载劫持一般出现在“下订单”的过程中。
举个栗子,假设我们通过微信官网的链接http://dldir1.qq.com/weixin/android/weixin637android660.apk下载微信安卓版本的客户端,整个流程大概是这个样子:
当点击了下载按钮后,客户端会通过url中的“域名”“dldir1.qq.com”来向DNS服务器获取确认“订单(下载)服务器”的IP地址,IP地址在互联网中相当于日常生活中“电话号码”,有了它,就可以连接到这台“订单(下载)服务器”,而DNS服务器就像一个存贮着大量“姓名”(域名)和“电话号码”(IP地址)的黄页。
当客户端获得了“订单(下载)服务器”的“电话号码”(ip地址)后,就会连接“订单(下载)服务器”,并告知“订单(下载)服务器”客户端需要获取服务器上的“微信安卓版”apk文件,一般情况下,服务器在这个阶段确认了“订单”后,就会向客户端“快递”(传输)对应的apk文件,当客户端将文件下载完毕后,这次“网购”也就完成了。
下面,我们引入运营商(电信、联通等)网关的概念。运营商网关可以类比成日常生活中的“总机”,接入运营商的互联网设备想要能够“上网”,都需要经过“总机”(运营商网关)的转接。也就是说,在上图中的第二步,我们并不能直接通过“订单(下载)服务器”的“电话号码”(IP地址)联系到“订单(下载)服务器”,而是需要先连接到“总机”(网关),并且告诉它,我们要向某某某服务器下“订单”,经过“总机”的转接,我们才能真正连接到“订单(下载)服务器”。整个过程如下图:
可以发现,DNS服务器和网关的决策,确定了客户端“订单”(下载请求)的走向。而“下载劫持”也就发生在这两个关键节点上。
假设客户端获取下载服务器“电话号码”的DNS服务器被篡改,那么客户端可能会通过“dldir1.qq.com”查询到一个“骗子服务器”的“电话号码”(IP地址),当我们联系到这个“骗子服务器”时,我们的“订单”(下载请求)可能会换来一些奇奇怪怪的“商品”。
当我们遇到这种情况时,可以手动修改DNS服务器IP(具体方法请问度娘)来解决。然而当运营商的“总机”(网关)“出了问题”(这些“问题”一般是运营商主动造成的)时,就没那么容易解决了。
假设当客户端拿着“订单(下载)服务器”的电话号码要求“总机”(网关)转接到我们指定的“订单(下载)服务器”时,“总机”(网关)对客户端说“哎呀,不要去A家下载微信了,你去我给你介绍的B家下载“XX助手”吧,比微信好用”(这个过程在技术上是被一个叫做302跳转的机制完成的,如果你不知道什么是302,出门左转,查询我们星期一的文章)。客户端是个实在人,就这样被“引诱”到B家的服务器上下载了。
“总机”(网关)和服务器B就这样沆瀣一气,来骗客户端的下载量。
刚刚给大家从技术层面简单介绍了下“下载劫持”的“饭醉手段”,至于为什么有人要做“下载劫持”,想必产品同学们应该比我更能知晓其中的奥妙,我就不班门弄斧了。就写到这里吧,我去洗水果了,双十一寄来的六袋苹果,再不吃就烂了….
(文中“XX助手”和服务器IP地址均属臆造,如有雷同,我也不知道是咋回事儿)
建议继续学习:
- 什么是DNS劫持和DNS污染? (阅读:4962)
- php实现百度音乐采集下载 (阅读:4338)
- curl测试下载速度 (阅读:4202)
- 让PHP更快的提供文件下载 (阅读:4289)
- pptx,docx,xlsx 文件下载问题 (阅读:3447)
- [Mac OS X]快速下载 URL (阅读:2829)
- 深入解析DLL劫持漏洞 (阅读:2819)
- PHP读取服务器端文件提供弹出下载窗口 (阅读:2726)
- 如何在PHP下载文件名中解决乱码 (阅读:2589)
- 下载软件的专用地址生成方法 (阅读:2359)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:kent.zhu 来源: 幻风阁|kent.zhu'sBlog
- 标签: 下载 劫持
- 发布时间:2016-02-07 14:05:27
- [54] IOS安全–浅谈关于IOS加固的几种方法
- [52] android 开发入门
- [52] 如何拿下简短的域名
- [51] 图书馆的世界纪录
- [49] Go Reflect 性能
- [49] Oracle MTS模式下 进程地址与会话信
- [47] 【社会化设计】自我(self)部分――欢迎区
- [46] 读书笔记-壹百度:百度十年千倍的29条法则
- [36] 程序员技术练级攻略
- [29] 视觉调整-设计师 vs. 逻辑