瀏覽器首頁被綁架

原文鏈接:https://www.zhihu.com/question/21883209/answer/19617109

作者:想了好久
鏈接:https://www.zhihu.com/question/21883209/answer/19617109
來源:知乎
著作權歸作者所有,轉載請聯繫作者獲得授權。

前幾天,突然發現默認瀏覽器的Chrome的主頁被篡改爲了hao123。每次第一次打開,都自動跳轉到http://www.hao123.com/?tn=29065018_59_hao_pg這個網址。自己到網上搜了一下,試了各種方法最終還是無果,本着屌絲懂技術,神都難不住的精神決定自己破掉它。(*^__^*) 嘻嘻……
<一> 縮小包圍圈

1、chrome設置?


對chrome中的啓動時、外觀屬性都進行了修改,仍然沒有解決問題。
&amp;lt;img src=&quot;https://pic4.zhimg.com/c4934bf010bea48b811258eaad0f3cbf_b.jpg&quot; data-rawwidth=&quot;837&quot; data-rawheight=&quot;458&quot; class=&quot;origin_image zh-lightbox-thumb&quot; width=&quot;837&quot; data-original=&quot;https://pic4.zhimg.com/c4934bf010bea48b811258eaad0f3cbf_r.jpg&quot;&amp;gt;

2、快捷方式中添加了參數?


發現不管是從桌面快捷方式還是直接點擊exe文件,chrome主頁都被篡改。這就排除了是在桌面快捷方式中的目標欄中添加了hao123網址的緣故。哎,查看一下桌面chrome快捷方式不就得了,整的這麼麻煩。囧。
&amp;lt;img src=&quot;https://pic1.zhimg.com/c08ba2010964ad2bd041eb343f1e7038_b.jpg&quot; data-rawwidth=&quot;366&quot; data-rawheight=&quot;461&quot; class=&quot;content_image&quot; width=&quot;366&quot;&amp;gt;

3、chrome.exe被篡改或者chrome配置文件被修改?

將chrome的配置文件和可執行文件一同拷貝到虛擬機中,擦,在虛擬機中就沒問題。說明問題不在chrome身上。

那會是什麼問題呢?山重水複疑無路,柳暗花明又一村。轉折來了,將chrome.exe重新命名後,再打開瀏覽器,主頁就是設置的www.google.com.hk,這樣就沒問題了。測試一下,將firxfox.exe重命名位chrome.exe後,主頁也被篡改位流氓導航頁。看來chrome.exe是個關鍵詞啊!一個解決方案就這樣誕生了,太easy了吧。但是這裏面到底隱藏着什麼奧祕呢?繼續整!

<二>我要看代碼

1. 先上第一個利刃,microsoft旗下的Process Explorer。


查看chrome.exe的主進程信息如下,亮點就在下圖中。
&amp;lt;img src=&quot;https://pic1.zhimg.com/1689f0289790459e26e24d0e87d90874_b.jpg&quot; data-rawwidth=&quot;903&quot; data-rawheight=&quot;329&quot; class=&quot;origin_image zh-lightbox-thumb&quot; width=&quot;903&quot; data-original=&quot;https://pic1.zhimg.com/1689f0289790459e26e24d0e87d90874_r.jpg&quot;&amp;gt;

小夥伴們一定看到了Command line下面的編輯框裏有我們久違的流氓url吧。這個Comandline是什麼東東?


Windows下常見的創建進程的api就是CreateProcess,這個函數申明如下。
&amp;lt;img src=&quot;https://pic4.zhimg.com/9a323005cc07f736f4fd12c4a165a1df_b.jpg&quot; data-rawwidth=&quot;746&quot; data-rawheight=&quot;324&quot; class=&quot;origin_image zh-lightbox-thumb&quot; width=&quot;746&quot; data-original=&quot;https://pic4.zhimg.com/9a323005cc07f736f4fd12c4a165a1df_r.jpg&quot;&amp;gt;

其中的第二個參數,就是Command line,在我們這裏就是chrome.exe應用程序的參數。該api的詳細介紹在http://msdn.microsoft.com/en-us/library/windows/desktop/ms682425(v=vs.85).aspx

現在的問題就是這個command line是誰傳遞給chrome.exe進程的?弄清楚這個問題之前,先要搞清楚,windows下,雙擊或者右鍵打開應用程序時,該應用程序進程是誰創建的?查閱資料發現,通過雙擊或者右鍵打開的應用程序進程都是由explorer.exe這個進程調用CreateProcess創建的。那麼,我們的流氓url Command line 就一定是explorer.exe傳遞給chrome.exe。看來explorer.exe有問題了。測試一下,通過任務管理器中的創建新任務的方式啓動chrome就沒有流氓導航了。但是通過和虛擬機中的explorer.exe文件對比,發現主機和虛擬機中的兩個文件完全相同。Exe運行時不光要加載自身的.exe程序文件,還要依賴一些動態庫dll。是不是dll有問題。利刃2上場。

2、ollydbg閃亮上場。


用od加載explorer.exe運行,查看所依賴的dll。
&amp;lt;img src=&quot;https://pic2.zhimg.com/94d0c04001c18cc6899916ba839c87fd_b.jpg&quot; data-rawwidth=&quot;910&quot; data-rawheight=&quot;329&quot; class=&quot;origin_image zh-lightbox-thumb&quot; width=&quot;910&quot; data-original=&quot;https://pic2.zhimg.com/94d0c04001c18cc6899916ba839c87fd_r.jpg&quot;&amp;gt;

看到有幾個可疑的非系統dll,QvodExtend.dll,QvodWebBase.dll,按理說explorer.exe是不會依賴非系統dll的。想起來,網上說的卸載Qvod可以解決問題。這個怎麼能說卸就卸呢?萬萬不可以的。

問題肯定是在調用CreateProcess之前出現的,在當前模塊中查找調用CreateProcess的地方,一共有四個點,全部設置斷點,然後調試explorer.exe進程?當然時調試失敗了。~~~~(>_<)~~~~

但是重新加載explorer.exe運行,然後查看kernel32.dll的CreateProcess的代碼發現了重要的問題。


下圖就是kernel32.dll中的CreateProcess代碼,尼瑪不是說好了的CreateProcess將調用CreateProcessInternalW嗎?這兒怎麼上來直接 jmp QvodWebB.10008B90?QvodWebB你要鬧啥啊!!!
&amp;lt;img src=&quot;https://pic4.zhimg.com/56ab58b4f88019ab9570214375c45003_b.jpg&quot; data-rawwidth=&quot;624&quot; data-rawheight=&quot;560&quot; class=&quot;origin_image zh-lightbox-thumb&quot; width=&quot;624&quot; data-original=&quot;https://pic4.zhimg.com/56ab58b4f88019ab9570214375c45003_r.jpg&quot;&amp;gt;
看看下面這個正版的CreateProcess吧。
&amp;lt;img src=&quot;https://pic4.zhimg.com/12bbf8cf2fe987f574e9cf96982874eb_b.jpg&quot; data-rawwidth=&quot;611&quot; data-rawheight=&quot;561&quot; class=&quot;origin_image zh-lightbox-thumb&quot; width=&quot;611&quot; data-original=&quot;https://pic4.zhimg.com/12bbf8cf2fe987f574e9cf96982874eb_r.jpg&quot;&amp;gt;
至此,整個流程大致出來了。QvodWebBase.dll將kernel32.dll的CreateProcessW代碼的前5個字節改爲了一條jmp指令,改變了CreateProcess的正常執行流程。實際上,CreateProcessA,CreateInternProcessW,CreateInternProcessA都被注入了相應的跳轉指令。

<三>深入巢穴

QvodWeb如何隨explorer.exe加載,QvodExtend.dll, QvodWebBase.dll到底都做了些什麼?先mark,後面接着整。

 

1.先看看QvodExtend.dll, QvodWebBase.dll都導出了些什麼函數。

&amp;lt;img src=&quot;https://pic3.zhimg.com/f001721d7591449edfc92ce397f2081a_b.jpg&quot; data-rawwidth=&quot;833&quot; data-rawheight=&quot;296&quot; class=&quot;origin_image zh-lightbox-thumb&quot; width=&quot;833&quot; data-original=&quot;https://pic3.zhimg.com/f001721d7591449edfc92ce397f2081a_r.jpg&quot;&amp;gt;下面是QvodWebBase.dll導出的函數。可以看到有InstallWindowsHook鉤子函數。下面是QvodWebBase.dll導出的函數。可以看到有InstallWindowsHook鉤子函數。

&amp;lt;img src=&quot;https://pic4.zhimg.com/8a794913984d780f7ef326ca24570573_b.jpg&quot; data-rawwidth=&quot;829&quot; data-rawheight=&quot;295&quot; class=&quot;origin_image zh-lightbox-thumb&quot; width=&quot;829&quot; data-original=&quot;https://pic4.zhimg.com/8a794913984d780f7ef326ca24570573_r.jpg&quot;&amp;gt;同時,用IceSword掃描時發現,QvodExtend.dll還是個BHO。同時,用IceSword掃描時發現,QvodExtend.dll還是個BHO。

&amp;lt;img src=&quot;https://pic3.zhimg.com/a985644ee77a0cb8cb5bcd67a16a0d3e_b.jpg&quot; data-rawwidth=&quot;1236&quot; data-rawheight=&quot;300&quot; class=&quot;origin_image zh-lightbox-thumb&quot; width=&quot;1236&quot; data-original=&quot;https://pic3.zhimg.com/a985644ee77a0cb8cb5bcd67a16a0d3e_r.jpg&quot;&amp;gt;

同時,測試發現如果將QvodExtend.dll重命名後,就不會出現主頁被篡改,同時explorer.exe也不會有QvodExtend.dll和QvodWebBase.dll模塊。由此可以推斷,QvodExtend.dll隨explorer.exe或者ieplorer.exe啓動時,會向系統註冊QvodWebBase.dll中的鉤子函數,接着再是加載QvodWebBase.dll時,該dll的DLLMain入口函數會向當前進程注入Jmp指令。

反彙編QvodExtend.dll代碼可以發現,註冊QvodWebBase.dll中的鉤子函數的代碼

&amp;lt;img src=&quot;https://pic1.zhimg.com/dcf520216d63419ab3908197d0116e04_b.jpg&quot; data-rawwidth=&quot;1011&quot; data-rawheight=&quot;579&quot; class=&quot;origin_image zh-lightbox-thumb&quot; width=&quot;1011&quot; data-original=&quot;https://pic1.zhimg.com/dcf520216d63419ab3908197d0116e04_r.jpg&quot;&amp;gt;至此,整個過程告一段落。至此,整個過程告一段落。
解決辦法就是刪除或者重命名QvodExtend.dll和QvodWebBase.dll。不知道會不會影響qvod,目前不得而知。
----------------------------------------------分割線------------------------------------------------------------------------------
QvodExtend.dll在其dll_main函數中,判斷當前的模塊是explorer.exe或者iexplore.exe,若兩者都不是則退出;否則讀取qvod安裝目錄下的QvodCfg.ini文件獲取QvodWebBase的版本號,找到 QvodWebBase.dll後調用LoadLibrary加載該模塊(加載過程中會向CreteProcessA/W中注入代碼,這個代碼就是在CreateProcessInteralA調用之前修改comand line參數),接着調用GetProcAddress獲得 QvodWebBase安裝鉤子的導出函數installwindowshook,並執行該函數,該鉤子的類型是WM_CBT。整體流程就是這樣。
----------------------------------------------分割線------------------------------------------------------------------------------
該實驗的軟件版本是QvodPlayer5.17.152.0,目前在最新版本中該問題已經解決。

 

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