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