rt

編程中如何實現這一點


來瞎答一發。

說說這個AV(anti virus)怎樣成為hooker的…

首先要注意的是,Windows任務管理器沒有任何特殊性,不過是一個集成了一部分系統提供的進程函數的程序…

當你用taskmgr「殺死」一個任務時…它會使用Windows提供的函數TerminateProcess

而這個函數…在一些其它功能之外…真正執行「結束進程」,是通過調用內核中的NtTerminateProcess作為內核函數…NtTerminateProcess結束進程的方式可謂直接而又粗暴…當內核把一個進程標記為「死亡」,並把它「名下」的資源標記為「已釋放」的時候…這個進程就徹底的死亡了…

那麼殺毒軟體怎麼做呢?

我們也可以看到,只要流程進行到了NtTerminateProcess這一步…幾乎就沒有了迴旋的餘地…所以我們必須在消息到達NtTerminateProcess之前將其截獲…

但是另一方面的問題是,TerminateProcess並不具有任何特殊許可權…大概率地,如果TerminateProcess被大面積屏蔽,只要重新編寫一個功能類似的函數就好了…

所以說,追根溯源,要攔截NtTerminateProcess函數(有時會帶上這個函數所實際調用的ZwTerminateProcess,不過只是對抗用戶態下的結束進程的話意義不大…)

(此處更新:NtTerminateProcess與ZwTetminateProcess沒有調用關係…是我記錯了啦!非常抱歉!)

實際上,為了找到NtTerminateProcess,TerminateProcess查看了系統提供的SSDT,這裡面包含了系統提供的內核函數地址…

所以說,通過修改SSDT,把它指向自己的函數,就可以實現hook NtTerminateProcess的功能…

至於原來的NtTerminateProcess的位置…大概只有360自己記得了吧…

那麼它是怎麼得到修改SSDT許可權的呢?

回憶一下,殺毒安裝時是不是向你要來了TrustedInstaller許可權?在安裝過程中…它會向你的電腦安裝一個老driver…而Driver…作為和硬體打交道的傢伙…是有幾乎萬能的許可權的……(當然,和本機許可權無關的事上它不可能萬能…比如說它解決不了停機問題…)

聽起來很麻煩對吧…實際上…也確實是…

尤其是電腦性能不好的人不要隨便研究…不能開虛擬機的話…自己電腦藍瓶的鈣了就不好玩了……

然後,好消息是…微軟大概也覺得這玩法動不動就藍屏,太讓人頭疼…

於是在x64的系統中鎖死了SSDT不讓自己亂動…如果要做類似這種功能…微軟提供了介面ObRegisterCallbacks用來hook SSDT…

這樣就簡單多了…

雖說還是比平時在用戶態寫程序麻煩多了…

另外。友情提示。

除非你可以使得每一個用戶手動通過複雜的流程關閉「驅動程序強制籤名」…否則的話…你可能要準備為你的程序付出250美元接生費用,通過微軟的嚴苛的測試取得一個簽名來證明你的程序能夠在Windows平台下穩定運行不會引起崩潰…

以上。

——————————————————————

密封線內……反正我也已經答題了…——————————————————————11.12 03:59更新

初步判斷360在Win10 x64的保護機制應該不會有太多黑科技

剛剛試了一下(卸載邁克菲,安裝360…),通過直接調用內核函數ZwTerminateProcess可以關掉360sd.exe和360tray.exe(雖說載入驅動的時候360連續彈窗阻止就是了…)然後那個快過免費試用期限的Mcafee在卸載前也測試了一下mcshield.exe也是可以這麼殺死的,但是會瞬間被隔壁進程救起來…我也懶得找是誰救的了,只是看到PID瞬間變化…不過如果用監視進程創建與銷毀的函數PsSetCreateProcessNotifyRoutineEx不讓它重新啟動的話是可以成功的更加神奇的事情是mcafee不攔截註冊表裡IFEO項目的修改,所以說我們也可以用這種方法直接從用戶層而非內核層阻止它的復活…(IFEO是微軟提供的為進程提供特殊運行環境的功能,通過修改IFEO中的特定內容(多為debugger)可以為程序指定運行環境…自然也可以阻止程序的運行或者替代成其它程序…)

然後就是那個…在本地可以通過bcdedit.exe /set nointegritychecks on來禁用強制檢查的…如果失敗的話可能是主板里Secure Boot的鍋,暫時關一下就好…

再下一條…我要鄭重地向大家道歉…就是…額…WHQL的收費似乎是我弄錯了…感謝評論區的指正…剛剛參考了一下wiki的說法說是這筆收費早就取消了…

晚上寢室斷電了…明天上課時我會去試著申請一下的…

最後…差點忘了…

上述測試內容均在Windows10家庭中文版 版本1809 內部版本號17763.104下完成。(突然感覺自己最近給自己安排的鍋好多…我周末的考試不會要涼吧…但是有好玩的事不弄明白真的好難受啊…)————————————————————————來電了…需要有來自特定根的證書啊…好貴…買不起…告辭…

我怎麼覺得當我想用任務管理器結束某個程序的時候,少有成功的。


前面回答說得差不多了,下到驅動內核以後改改內核就好了。這裡面的步驟關鍵還是拿到內核許可權,有了內核許可權,你可以理解為你的許可權跟操作系統一個level,操作系統能做的事情你都能做。關進程這事情本來就是你調操作系統的介面,你把這介面改掉就好了。通常是下個hook,判斷如果要幹掉的進程是360,那就直接return這樣。

所以要怎麼幹掉360呢?拿刀的是干不過拿槍的,要干拿槍的,你得拿大炮,或者至少也得拿把槍吧?

所以你只要也下到內核,跟它一個許可權,它改哪你把它改回來就好了,或者直接不讓它載入啥的…


任務管理器關不掉很容易啊……hook掉kernel裡面的介面就好了

畢竟360是做3721發家的 會點病毒的技巧沒啥好大驚小怪的

最簡單的方法當然是在其載入之前幹掉他


高贊已經把和方法基本解釋了。通俗的來講,你可以把任務管理器看成一個整個進程任務管理系統的傳令兵,我們不如叫它監獄的看門大爺。

你跟大爺說,大爺我要槍斃了360。大爺說你等著,他就它通知給行刑隊,槍斃360。正常流程下360就嗝屁了。

但是萬萬沒想到360它上面還是後面有人,把傳達環節給買通了,通知不到了。所以360活得還好好的。


這個不只是360,基本上殺毒軟體都做到了任務管理器殺不掉。

國產的瑞星,毒霸就不說了,我在用卡巴斯基,也是一樣的殺不掉。



有正規途徑關閉為什麼用任務管理器?


cmd:

taskkill 360*


推薦閱讀:
查看原文 >>
相关文章