關於SSDT HOOK取消記憶體寫保護的問題

2021-08-26 06:26:12 字數 1653 閱讀 2555

有些人說不去掉也不會藍屏,照樣能hook成功

確實,我當時也是這樣過。。。

不過拿給別人機器一測試就藍了

網上找到了mj給出的答案:

當使用大頁面對映核心檔案時,**段和資料段在一塊兒,所以頁必須是可寫的,這種情況下直接改是沒有問題的

hkey_local_machine\system\currentcontrolset\control\session manager\memory management下面增加兩個dword值'largepageminimum" = 0xffffffff, "enforcewriteprotection" = 1,重啟,重新跑自己的驅動。。。

win2k上ram超過127m,winxp和win server 2003上ram超過255m,記憶體管理器會使用大頁面(x86上4m,ia64和x86-64上16m)來對映ntoskrnl.exe,這樣由於**和資料可能駐留在同乙個頁面,所以**寫保護是被禁止的。以上兩個登錄檔修改項,第乙個指明了當記憶體數量達到多少時使用大頁面來對映ntoskrnl,設定成0xffffffff就是相當於無限大,因此不會使用大頁面。第二個開啟**寫保護。

一般去掉寫保護有三種方法:

1.更改登錄檔(需要重啟)

hklm/system/currentcontrolset/control/session manger/

memory management/enforcewriteprotection=0

與hklm/system/currentcontrolset/control/session manger/

memory management/disablepagingexecutive=1

2.修改控制暫存器cr0

就是把cr0中的wp(寫保護)位設定為0,就可以禁止記憶體保護了。

//取消記憶體保護 _asm //重新開啟記憶體保護 _asm

3.利用mdl(memory descriptor list)來繞過寫保護

我們可以在mdl中描述一段記憶體,包括記憶體段的起始位置、所擁有的程序、位元組數、記憶體段的標誌等等。

下面列出幾個對ssdt hook比較有用的幾個巨集。

#define hook_index(function2hook) *(pulong)((puchar)function2hook + 1) #define hook(functionname, newpointer2function, oldpointer2function ) / oldpointer2function = (pvoid) interlockedexchange( (plong) &newsystemcalltable[hook_index(functionname)], (long) newpointer2function) #define unhook(functionname, oldpointer2function) / interlockedexchange( (plong) &newsystemcalltable[hook_index(functionname)], (long) oldpointer2function) #define unhook(functionname, oldpointer2function) / interlockedexchange( (plong) &newsystemcalltable[hook_index(functionname)], (long) oldpointer2function)

SSDT HOOK 記憶體寫保護

有些人說不去掉也不會藍屏,照樣能hook成功 確實,我當時也是這樣過。不過拿給別人機器一測試就藍了 網上找到了mj給出的答案 當使用大頁面對映核心檔案時,段和資料段在一塊兒,所以頁必須是可寫的,這種情況下直接改是沒有問題的 hkey local machine system currentcontr...

關於el dialog取消事件

再做乙個 資料的新增以及編輯當前行資料的時候遇到乙個問題,因為兩個功能用的是同乙個彈出框 el dialog 考慮到編輯完成或者取消之後再次點選新建會有資料沒有置空,開始我想的是在取消以及完成按鈕的地方加上置空方法結果忽略了點選右上角的取消按鈕 x 不置空 el dialog width 30 ti...

關於寫程式

php 為使用者提供了豐富的庫函式即內部函式,能否熟練的使用 php 的內部函式,是衡量乙個 php程式設計師合格與否的標準。那麼如何使用 php 中的庫函式呢?由於內部函式是整合在 php 直譯器中的,所以它不用被定義,可以直接使用。使用時只是要注意函式的引數型別 呼叫方法 返回值及格式即可。相對...