chrome 主頁被篡改爲hao123?技術宅帶你層層深入破之 -轉自知乎

作者爲:http://www.zhihu.com/people/xiang-liao-hao-jiu

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

1、chrome設置?


對chrome中的啓動時、外觀屬性都進行了修改,仍然沒有解決問題。

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


發現不管是從桌面快捷方式還是直接點擊exe文件,chrome主頁都被篡改。這就排除了是在桌面快捷方式中的目標欄中添加了hao123網址的緣故。哎,查看一下桌面chrome快捷方式不就得了,整的這麼麻煩。囧。

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的主進程信息如下,亮點就在下圖中。


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


Windows下常見的創建進程的api就是CreateProcess,這個函數申明如下。

其中的第二個參數,就是Command line,在我們這裏就是chrome.exe應用程序的參數。該api的詳細介紹在msdn.microsoft.com/en-u

現在的問題就是這個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。

看到有幾個可疑的非系統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你要鬧啥啊!!!

看看下面這個正版的CreateProcess吧。

至此,整個流程大致出來了。QvodWebBase.dll將kernel32.dll的CreateProcessW代碼的前5個字節改爲了一條jmp指令,改變了CreateProcess的正常執行流程。實際上,CreateProcessA,CreateInternProcessW,CreateInternProcessA都被注入了相應的跳轉指令。

<三>深入巢穴

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


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

下面是QvodWebBase.dll導出的函數。可以看到有InstallWindowsHook鉤子函數。

同時,用IceSword掃描時發現,QvodExtend.dll還是個BHO。


同時,測試發現如果將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中的鉤子函數的代碼

至此,整個過程告一段落。
解決辦法就是刪除或者重命名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,目前在最新版本中該問題已經解決。
發佈了37 篇原創文章 · 獲贊 17 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章