日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

Windows 下的 7 种 DLL 劫持技术

發(fā)布時(shí)間:2025/4/16 windows 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Windows 下的 7 种 DLL 劫持技术 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
本文講的是Windows 下的 7 種 DLL 劫持技術(shù),在本文中,我將列出半打可以在Windows運(yùn)行用戶模式的進(jìn)程中使用DLL注入技術(shù)。也許可能會(huì)有更多類(lèi)似的技術(shù),但我正在和你分享的是我所擁有的第一手的技術(shù)。

AppInit_DLLs

人們以前往往依賴于AppInit_DLLs注冊(cè)表項(xiàng)。它是操作系統(tǒng)加載程序查詢此值并加載創(chuàng)建進(jìn)程時(shí)指定的DLL。我在很長(zhǎng)一段時(shí)間沒(méi)有使用這種技術(shù)(最后一次我使用它在Windows XP上),而且我聽(tīng)說(shuō)現(xiàn)在受到惡意軟件的廣泛使用,所以它也受到限制或被停止使用了。

SetWindowsHookEx API

使用API函數(shù)SetWindowsHookEx()可以把一個(gè)應(yīng)用程序定義的鉤子子程安裝到鉤子鏈表中。 SetWindowsHookEx函數(shù)總是在Hook鏈的開(kāi)頭安裝Hook子程。當(dāng)指定類(lèi)型的Hook監(jiān)視的事件發(fā)生時(shí),系統(tǒng)就調(diào)用與這個(gè)Hook關(guān)聯(lián)的 Hook鏈的開(kāi)頭的Hook子程。每一個(gè)Hook鏈中的Hook子程都決定是否把這個(gè)事件傳遞到下一個(gè)Hook子程。Hook子程傳遞事件到下一個(gè) Hook子程需要調(diào)用CallNextHookEx函數(shù)。它支持各種各樣的鉤鏈(CBT,Journal,Window消息,鍵盤(pán),鼠標(biāo)等)。

當(dāng)使用SetWindowsHookEx API時(shí),你就是在在指示操作系統(tǒng)將自定義HookDLL注入到其相關(guān)的其他進(jìn)程中。當(dāng)其他進(jìn)程從USER32.dll導(dǎo)入/使用功能時(shí),Windows?Hook就會(huì)工作。?

The Image File Execution Options (IFEO) key

該 IFEO注冊(cè)表項(xiàng)是非常方便的。它允許你指定OS加載程序在創(chuàng)建給定進(jìn)程、啟動(dòng)給定的AppVerifier插件、更改進(jìn)程堆選項(xiàng)等情況時(shí)調(diào)用調(diào)試程序。

現(xiàn)在讓我們回過(guò)頭來(lái)說(shuō),我已經(jīng)在IFEO鍵上做了一個(gè)小實(shí)驗(yàn),創(chuàng)建了一個(gè)AppVerifier插件,注入到我選擇的進(jìn)程中。

Remote threads

這種技術(shù)依賴于將遠(yuǎn)程線程創(chuàng)建到想要注入的所需進(jìn)程中。遠(yuǎn)程線程的代碼將會(huì)非常簡(jiǎn)單地在該目標(biāo)進(jìn)程的上下文中調(diào)用LoadLibrary。請(qǐng)注意,許多防病毒軟件都會(huì)將創(chuàng)建遠(yuǎn)程線程標(biāo)記為惡意活動(dòng)。

Implicitly tracking all processes

此方法往往會(huì)依賴于進(jìn)程創(chuàng)建API的Hook,例如:kernel32.CreateProcess [Internal]或較低的API。通過(guò)跟蹤其他進(jìn)程的創(chuàng)建,你就會(huì)有機(jī)會(huì)將DLL注入到新進(jìn)程中。

該技術(shù)背后的基本思路如下:

1、枚舉所有現(xiàn)有進(jìn)程

2、將你的DLLHook注入所有正在運(yùn)行的進(jìn)程。這很重要,并且也會(huì)使你的注射器可以在執(zhí)行注射器之前執(zhí)行的進(jìn)程達(dá)到最高速度。

3、Hook k32!CreateProcessInternalW在每個(gè)進(jìn)程中。如果你能hook到更好的那些就最好了。例如在ntdll!NtCreateProcess *

4、你注入的DLL必須明確的Hook進(jìn)程create API,并在調(diào)用時(shí)執(zhí)行以下操作:

1.暫停創(chuàng)建子進(jìn)程 2.注入你的Hook,這本質(zhì)上是“跟蹤” 3.恢復(fù)流程。現(xiàn)在這個(gè)子進(jìn)程現(xiàn)在也將Hook任何新的進(jìn)程

這種技術(shù)會(huì)給你一種你正在跟蹤所有流程的錯(cuò)覺(jué)。不過(guò)它是有效的,我已經(jīng)看到它被用于很多安全產(chǎn)品中了。通過(guò)hook Explorer.exe(shell),你可以跟蹤從“開(kāi)始菜單”啟動(dòng)的所有進(jìn)程。

當(dāng)然,這種技術(shù)是有限的,它是可以被躲避的,不過(guò)當(dāng)你在只有用戶模式訪問(wèn)時(shí)它很有用。

AppCompat shimming layer

其實(shí),很長(zhǎng)時(shí)間里我都不知道這種注入方式,直到我在微軟工作時(shí)接觸到了EMET項(xiàng)目。

該程序的兼容性機(jī)制其實(shí)并不會(huì)真的記錄了第三方開(kāi)發(fā)者,但當(dāng)我在EMET項(xiàng)目中使用它時(shí)這一情況翻轉(zhuǎn)了。

其實(shí)質(zhì)是有一個(gè)名為AppPatch.dll的系統(tǒng)DLL ,它讀取一個(gè)勻場(chǎng)數(shù)據(jù)庫(kù)(又稱SDB)。該數(shù)據(jù)庫(kù)是自定義格式,它可以描述各種應(yīng)用程序兼容性調(diào)整/修補(bǔ)功能:

1、內(nèi)存搜索/替換 – >補(bǔ)丁代碼在一個(gè)給定的模塊中,當(dāng)該模塊加載

2、加載/注入一個(gè)給定進(jìn)程的DLL。可以使用通配符等。

3、假API返回等。

EMET項(xiàng)目中我是使用方法第二種來(lái)注入DLL到所需的進(jìn)程中。每個(gè)EMET重新配置時(shí),基本思想就是在Fly中生成SDB。EMET嵌入了懂得如何生成SDB的代碼,然后在系統(tǒng)中注冊(cè)該SDB。

請(qǐng)注意,AppPatch機(jī)制被烘焙到操作系統(tǒng)的進(jìn)程加載程序(在ntdll.dll內(nèi))。因此,它不是真正的“注入”,它更像是加載進(jìn)程的一部分。

Kernel drivers

最后的這一種但并非是不重要的,只是它不是一種純粹的用戶模式下的方法,使用內(nèi)核驅(qū)動(dòng)程序是將代碼注入所有正在運(yùn)行的進(jìn)程的一種可靠方法。據(jù)我所知,現(xiàn)在有名氣的A / V軟件都使用了它。他們會(huì)在注冊(cè)圖像時(shí)創(chuàng)建通知,然后將在用戶模式下需要執(zhí)行并注入的一些APC進(jìn)行排隊(duì)。

結(jié)論

總而言之,DLL注入是一個(gè)非常引人入勝的主題,它具有各種注入技術(shù)可供選擇,對(duì)系統(tǒng)開(kāi)發(fā)人員來(lái)說(shuō)真的非常有幫助。而根據(jù)你的不同選擇,注入會(huì)有不同的彈性、安全性(不被殺毒軟件所捕獲)以及持續(xù)性。




原文發(fā)布時(shí)間為:2017年5月24日 本文作者:Change 本文來(lái)自云棲社區(qū)合作伙伴嘶吼,了解相關(guān)信息可以關(guān)注嘶吼網(wǎng)站。 原文鏈接

總結(jié)

以上是生活随笔為你收集整理的Windows 下的 7 种 DLL 劫持技术的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。