為了安全起見,Windows XP及其以後的系統將一些重要的內存頁設置為只讀屬性,這樣就算有權力訪問該表也不能隨意對其修改,例如SSDT、IDT等。但這種方法很容易被繞過,我們只要將這些部分修改為可寫屬性就可以了,不過當我們的事情做完後記得把它們恢復為只讀屬性,不然會造成一些很難預料到的後果。
cr0是系統內的控制寄存器之一。控制寄存器是一些特殊的寄存器,它們可以控制CPU的一些重要特性。
控制寄存器最初出現於低級的286處理器中,以前稱之為機器狀態字(machine status word),在386以後它們被重命名為控制寄存器(control register)。
cr0寄存器直到486的處理器版本才被加入了“寫保護”(Write Protect,WP)位,WP位控制是否允許處理器向標記為只讀屬性的內存頁寫入數據。
WP位0:禁用寫保護的功能
WP位1:開啟寫保護的功能
cr0的第16位是WP位,只要將這一位置0就可以禁用寫保護,置1則可將其恢復。
禁用寫保護的操作步驟:
啟用寫保護的操作步驟:
__asm
PJMPCODE pCurAddr; JMPCODE oleCode; INITCODE DbgPrint(== (curAddr!= pCurAddr=(PJMPCODE)curAddr; oleCode.jmpStyle=pCurAddr->jmpStyle; oleCode.jmpAddr=pCurAddr->jmpAddr; = ; jmpCode.jmpAddr = oldAddr-curAddr- ~->jmpStyle=; pCurAddr->jmpAddr=jmpCode.jmpAddr; pDriverObject->DriverUnload =
~->jmpStyle=oleCode.jmpStyle; pCurAddr->jmpAddr=oleCode.jmpAddr; DbgPrint(