軟件內嵌頁面被運營商插入廣告的處理方法

本文僅討論內嵌頁面被插入廣告的處理(可控制的IWebBrowser2)


一些內嵌頁面的軟件往往被無恥的電信運營商加入廣告彈窗,嚴重影響用戶體驗和口碑,我將在這裏討論幾個現象和方法,希望可以給大家一些啓發。


一、直接彈窗類

這個我定義爲只要是打開你的頁面,隨之就會彈出一個或數個另外的IE或其他瀏覽器窗口,顯示廣告或其他推廣內容。(比如廣州電信的催費通知)


1.解決方法1

不管你使用的什麼語言,都可以對使用的Web控件的方法做掛接,就是所謂的NewWindow3,我們可以拿到bstrUrl,也就是準備打開的新窗口的Url連接,然後可以對Cancel賦值來取消這個動作。

那就很好辦了,做一個黑名單或者白名單,來過濾彈出的域名即可達到目的。


(如果處理BeforeNavigate2的話,也可以起到一定效果,如一些內嵌iframe的跳轉是會跳到這裏的,這樣就可以阻止其顯示)



2.解決方法2

你可能實驗了第一種方法,然後有疑問,爲什麼我這樣做還是會有用戶被彈窗,這個問題很明顯,彈出的一定不是IE的窗口,可能是360安全瀏覽器什麼的,原因就是其對註冊表修改或者使用BHO技術(OCX調用的時候其Dll也會被加載到你的程序裏),直接或間接的修改了IE的NewWindow3,使你的程序說了不算,你即使取消了動作,他依然會把這個操作劫持到他的瀏覽器來打開。

那麼這種問題怎麼辦!

內嵌頁面跳出新窗口的瀏覽器,一定是由當前進程創建的,所以我們只需要Hook下自身的CreateProcessA、CreateProcessW函數並修改,從lpCommandLine可以得到啓動命令行,命令行中包含網址信息,對其過濾即可,大概的格式會是這樣:

C:\360\360se.exe "http://www.baidu.com"


(此方法有風險,不同瀏覽器的BHO等兼容性難以測試,請慎用)



二、內嵌iframe


看到右下角那個彈窗了沒有,就是它沒錯。

它的原理是替換了百度統計的h.js文件,所有使用了百度統計的頁面都會被強X。


這個是個頭疼的問題,可以通過取得IWebBrowser2的Document,枚舉iframe及div對象,然後填充爲空的代碼來實現,後續擴展可以做成黑名單,如滿足DispHTMLDivElement增加id=***、src="***"的條件,符合就進行填充。


該方法親測有效,但還沒有實際應用。

我目前正在寫代碼測試iframe這部分...


三、通用處理

對軟件自身從WinInet層面或者Socket做Hook,使用類似廣告過濾插件的原理,阻斷對應域名、IP的連接。

需收集非法的廣告插入地址及域名,可能成本比較高,除非有通用的域名規則(或白名單)。


----------------------------------------------------------------------------------------------------------------------

看到這裏,肯定有人說,你怎麼不提供代碼。

你如果會在意到內嵌頁面被插入廣告這種程度的問題,你肯定負責的不會是個小項目,相信這些代碼對於你來說並不是什麼難事,你可以在Git上搜一搜作爲參考。

----------------------------------------------------------------------------------------------------------------------

關於運營商是如何推送這些東西的,可以搜索一下DNS劫持、Ipush(學名叫做電信什麼什麼增值系統)等等,說白了就是:


你>請求>運營商節點>各種路由>所請求的服務器

所請求的服務器>返回>各種路由>運營商節點(修改一下)>返回給你


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章