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