最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

「Window平臺」異常掛鉤大法

2021-12-13 13:22 作者:rkvir逆向工程學院  | 我要投稿


作者?| 榴蓮

編輯?| Racel

Windows操作系統(tǒng)中存在多種異常處理,我們現(xiàn)在需要的是其中的VEH(VectoredExceptionHandler)異常處理,也就是向量化異常處理。我們之所以可以使用VEH異常來進行HOOK的主要原因,在于兩點。其一,VEH異常處理的優(yōu)先級是高于SEH異常處理的,也就是說可以先手拿到異常,確保不會被其他異常處理流程將異常截獲而導致HOOK失敗。其二就是在VEH異常處理的回調函數(shù)中,可以獲取及修改異常發(fā)生處的上下文環(huán)境,這就意味著我們可以操作的東西會非常多,例如通過上下文環(huán)境中的ESP(棧頂指針寄存器)就可以拿到HOOK位置觸發(fā)異常時的堆棧數(shù)據(jù)。而我們設置的HOOK位置通常位于函數(shù)內部的起始位置,這就意味著我們可以直接通過堆棧里的數(shù)據(jù)獲取到被HOOK函數(shù)的參數(shù),并且可以對其進行修改。

首先,我們既然需要HOOK,那么我們大概率需要一個將代碼寫到一個DLL(動態(tài)鏈接庫)中,然后通過注入的方式加載到目標進程的體內。我這里采用的操作系統(tǒng)是Windows 10 20H2(19042.1288),集成開發(fā)環(huán)境采用的是Visual Studio 2017。那么我們先來創(chuàng)建一個DLL項目。

01選擇新建項目

02選擇Windows桌面->動態(tài)鏈接庫(DLL),點擊確定


03注釋#include “pch.h”,添加#include <Windows.h>。刪除framework.h、pch.h以及pch.cpp文件。
04配置? 4.1 選擇屬性


4.2 修改運行庫以及Spectre緩解,選擇應用
4.3 修改預編譯頭,選擇應用

?05

在每一個case中添加break關鍵字,并且使用AddVectoredExceptionHandler函數(shù)添加一個VEH異常的回調。VEH的回調是一個鏈表,掛著很多的處理程序。AddVectoredExceptionHandler函數(shù)的第一個參數(shù)就是用來指定新增VEH處理函數(shù)位于鏈表的哪個位置。如果第一個參數(shù)的值是0,那么新增的VEH處理函數(shù)將處于整個鏈表的最后。如果第一個參數(shù)的值是一個非0值,那么新增的VEH處理函數(shù)就會位于鏈表的頭部。AddVectoredExceptionHandler函數(shù)的第二個參數(shù)就是指定新增的回調函數(shù)

5.1 函數(shù)的原型可以通過在AddVectoredExceptionHandler的函數(shù)上按F12,看到函數(shù)的原型。
5.2 在紅框的位置上,繼續(xù)F12,就可以看到這個參數(shù)的原型,實際上就是一個回調函數(shù)的函數(shù)指針原型。
5.3 然后復制出來,修改成如下樣式。去掉typedef,把指針修改成函數(shù)名,增加花括號的函數(shù)體,異常處理的部分就需要在函數(shù)體內實現(xiàn)。
5.4 最后,將其添加到DLL_PROCESS_ATTACH中。


06

手工在需要HOOK的位置制造異常,觸發(fā)VEH異常處理。我們這里采用軟件斷點的方式觸發(fā)異常。即是在需要HOOK的函數(shù)的第一個字節(jié)處,將其改成硬件嗎0xCC,這樣就會觸發(fā)一個int 3異常。按照異常的接管順序。此時異常將優(yōu)先被VEH異常處理攔截。那么我們此時就可以在VEH異常處理的回調函數(shù)中對其進行HOOK代碼的編寫。


6.1 ?聲明一個用來保存異常地址(HOOK地址)和被替換字節(jié)的結構體,并且聲明對象
6.2 編寫設置HOOK的函數(shù)
6.3 如果是自定義函數(shù),自行分析目標的函數(shù)地址,如果是系統(tǒng)API,可以采用如下方式獲取函數(shù)地址。
6.4 在DLL_PROCESS_ATTACH中,添加HOOK的調用。

?

07

選擇在VEH異常處理的回調函數(shù)中處理HOOK
在這部分代碼中,之所以需要將EIP + 2。是因為在x86的函數(shù)頭是如下樣式的。

也就是說,我們的斷點0xCC實際上就是改在了紅框的位置上,替換了8B,而原本的函數(shù)中,8BFF的硬編碼組成了mov edi,edi,這里實際上別沒有什么用,所以我們如果直接跳過這兩個硬編碼也并不會影響程序的正常執(zhí)行。

?


08生產DLL文件
8.1 生成文件
8.2 取出文件到桌面或其他位置
09測試我們HOOK的效果

9.1 首先寫一個目標程序,代碼如下

9.2 使用注入器(自行編寫或網(wǎng)上下載,這里我用的是自己寫的)將我們生成的模塊注入到目標進程中。

正常情況下:
HOOK后:
10如果我們需要卸載HOOK,那么需要如下操作? ?10.1 添加如下代碼
10.2 在需要退出的位置調用即可,例如DLL_PROCESS_DETACH中。

到了這里,VEH HOOK就已經完成了

「Window平臺」異常掛鉤大法的評論 (共 條)

分享到微博請遵守國家法律
潞城市| 高安市| 临桂县| 抚顺县| 绥滨县| 周口市| 鄱阳县| 嘉兴市| 河曲县| 河南省| 阿尔山市| 博客| 洱源县| 翁源县| 塔河县| 奎屯市| 丰宁| 同德县| 合水县| 乐都县| 酒泉市| 内丘县| 遂溪县| 襄汾县| 石门县| 涿州市| 曲阜市| 清苑县| 项城市| 邹平县| 汝南县| 惠安县| 若尔盖县| 肇州县| 沅陵县| 大荔县| 土默特右旗| 香港 | 项城市| 泽库县| 大理市|