1、现象描写
事情起因很简单,最近家里打开网页,老发现有点不正常,火狐打开页面鼠标在上面随意点击1下,立马弹出广告,起初认为多是阅读器问题或机器中招了,后来看了1下系统没问题,换了几个阅读器发现还是1样,具体描写就是,页面打开后,鼠标在页面上不管搁哪都是箭头,放超链接上也是箭头而不是小手图标,只要1点击,在弹出广告新页面,并且广告内容每次随机。
2、分析流程
之前1直没时间弄它,今天放假没事,打开电脑决定弄弄它,第1感觉是页面被人插入了甚么东西,抄起Firebug开干。
2.1、随手打开1个页面,http://tools.jb51.net/tools/Escape.asp,瞅瞅,鼠标搁在超链接上,箭头形状,好家伙又来了,果断右键“使用Firebug查看元素”:
好家伙,最少查了4个JS,还有个宽高100%的div,1个大遮罩啊,那怪搁哪都是箭头了
2.3、果断查看那4个JS,发现是1样的:
2.4、拿去http://js.clicki.cn/解压美化后,还不错嘿嘿:
2.6、接着在DOM看到:
如果没有猜错,点1下广告页面就是http://www.8ke.net/weibo.php?action=pc了,看这些iWebLink、jsSrc、sDefaultUrl是否是似成相识呢?没错就是上面那段JS脚本。
3、被强迫广告的流程
综合上视察结合那段JS,我推断出了以下被强迫广告的流程
3.1、首先页面加载时被插入了1个脚本(至于怎样被插入后面会有讲),也就是说你要求的http://tools.jb51.net/tools/Escape.asp被人动了手脚,最简单的情况就是在这个页面注入了这么1段:
<script type="text/javascript" src=" http://hm.baidu.com//h.js?b88cfc1ccab788f0903cac38c894caa3">
</script>
此时上面那个脚本就进来了,并且开始运行。
3.2、脚本先判断页面是不是为top.location,否则终止;接着判断是不是已loaded过,否则终止;然后判断是不是开启cookie,否则终止,等等,3个判断(不过貌似navigator.cookiesEnabled 写错了吧,看了这人水平也不怎地);
3.3、接着脚本通过navigator辨认装备是不是为IOS、Android、iPone、iPad系统,存于cBrowser,以便以后使用;
3.4、通过window.location.host获得主机头,例如tools.jb51.net;
3.5、接着构造远真个URL地址jsSrc(硬编码?),例如:http://61.147.96.220:65008/keywords/?type=2&kw=tools.jb51.net&r=0.0019117737800755652
3.6、以jsSrc为参数,调用loadJsFile(jsSrc)
3.7、loadJsFile(jsSrc)主要用于实现在head插入以下脚本
3.8、其中远端地址,例如:http://61.147.96.220:65008/keywords/?type=2&kw=tools.jb51.net&r=0.0019117737800755652 返回值为:
backCall({"ret":"0","data":"http://www.8ke.net/weibo.php?action=pc"})
3.9、实际上loadJsFile()主要用来获得并履行远端发过来的指令,例如这里的backCall()函数
3.10、backCall()函数先判断传进来的json参数ret的值,如果为0设置,则设置sDefaultUrl的值为data,如:http://www.8ke.net/weibo.php?action=pc,然后调用linkOpener()函数,如果ret是100则直接window.location.href = sDefaultUrl,最后使用oHead.removeChild(oScript)将之前oHead.appendChild(oScript) 移除,所以咱以后在head是看不见这个脚本的
3.11、linkOpener()函数主要用于在页面插入1个div并绑定onclick的事件处理
3.12、先是动态创建1个覆盖全部页面的透明的div
3.13、以后通过document.body.appendChild(tmpDiv)将这个div添加到body里面
3.14、然后对上面添加的id为newDiv_link的div便签绑定1个onclick事件处理函数,至此页面加载终了。
--------------------------------分割线-------------------------------------------------------------------------------------------------
3.15、当用户在页面上任何1个位置点击鼠标时,触发newDiv_link的onclick事件,调用事件处理函数
3.16、先把sDefaultUrl(取值如:http://www.8ke.net/weibo.php?action=pc)过滤1下,然后把tempDIv的div便签内容移除,以后判断装备是不是是IOS或Android或iPhone或iPad,如果是则构造类似这样的链接:
http://61.147.96.220:65008/keywords/visited.php?type=3&url=http://www.8ke.net/weibo.php?action=pc&r=0.9964436281985068
否则构造:
http://61.147.96.220:65008/keywords/visited.php?type=2&url=http://www.8ke.net/weibo.php?action=pc&r=0.9964436281985068
3.17、以后调用上面loadJsFile(setLink)函数再次向远端发送要求,另外如果不是移动装备,则用window.open(sDefaultUrl)打开广告页面,页面弹出了,有木有
3.18、loadJsFile(setLink)再次在头部oHead.removeChild(oScript)插入脚本
向远端发送要求例如:http://61.147.96.220:65008/keywords/visited.php?type=2&url=http://www.8ke.net/weibo.php?action=pc&r=0.9964436281985068
3.19、远端响应:
3.20、再次调用backCall()函数,但是由于ret为⑷故,直接oHead.removeChild(oScript)移除脚本,最后残留页面:
4、源头推断及处理
至此,被强插广告的流程基本被理清,1切都源于那段被插入的JS脚本,那个脚本又是如何来的呢?接触过流量劫持、JS脚本缓存投毒的童鞋1定很清楚,我这就不费口舌了,推荐看http://www.cnblogs.com/index-html/p/wifi_hijack_3.html
这里就不推断是运营商强插的也好或是他人攻击污染也好,我查看了1下路由的DNS,问题是大大地:
果断去修改DNS改成指定的最爱:114.114.114.114,从此广告不再
神马,不会改DNS?推荐
修改DNS:http://jingyan.baidu.com/article/fc07f98975ff0d12fee51954.html
好用的DNS:http://jingyan.baidu.com/article/7f766daf44889a4101e1d083.html
转载请注明:http://blog.csdn.net/wangqiuyun/article/details/45424307