1. 程式人生 > >chrome 主頁被篡改為hao123?技術宅帶你層層深入破之

chrome 主頁被篡改為hao123?技術宅帶你層層深入破之

前幾天,突然發現預設瀏覽器的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程序的?弄清楚這個問題之前,先要搞清楚,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,目前在最新版本中該問題已經解決。