記憶體修改 Ring3

2021-10-04 20:29:39 字數 443 閱讀 8598

ring3對目標程序的記憶體進行修改,說一下實現思路:

(1)呼叫getsysteminfo函式得到系統資訊,將應用層程式最大位址和頁面大小儲存到全域性變數中

(2)通過目標程序的程序名得到目標程序id

(3)提權,根據目標程序id開啟程序,得到程序id。

(4)掛起目標執行緒(實際上是掛起目標程序的所有執行緒)

(5)啟動工作執行緒,遍歷程序位址空間得起始位址,越過null指標賦值區,到應用層最大程式位址截止。在這些位址中找字串匹配,儲存位址。

(6)對目標程序得位址進行寫操作,修改記憶體內容。

(7)喚醒程序中的所有執行緒,完成修改。

下面給出關鍵部分實現**:

template

<

typename t>

bool ktsearchmemoryfirst

ring0和ring3的區別

現在 核心程式和應用程式之間的本質區別。除了能用wdk編寫核心程式和閱讀一部分windows的核心 之外,我們還需要了解它們的本質是什麼,它們和我們熟悉的應用程式有什麼區別。intel的x86處理器是通過ring級別來進行訪問控制的,級別共分4層,從ring0到ring3 後面簡稱r0 r1 r2 ...

Ring0建立事件Ring3設定事件

同步事件 synchronizationevent 當事件物件為激發時,如遇到kewaitforxx等核心函式,事件物件則自動變回未激發態 通知事件 notificationevent 當事件物件為激發時,如遇到kewaitforxx等核心函式,事件物件則不會自動變回未激發態 ring0 建立事件 ...

Ring0和Ring3如何進行通訊

可以用這個底層函式建立乙個與ring3進行通訊的控制裝置物件。使用這個函式需要注意,它生成的裝置物件具有預設的安全屬性,需要有管理員許可權的程序才可以開啟這個裝置物件。對於我們用來通訊的控制裝置來說,肯定是需要乙個裝置名稱的,上面我們還提到,裝置名是無法直接被使用者層所開啟的,需要一些特殊的操作,而...