本質上我正在尋找一種可以爲內核模式做什麼的函數,VirtualProtect
對用戶模式有什麼作用。如何在Windows 7下的內核模式下設置內存區域的保護
我使用以下簡化代碼示例的邏輯分配內存。
PMDL mdl = MmAllocatePagesForMdl
(
LowAddress,
HighAddress,
SkipAddress,
size
);
ULONG flags = NormalPagePriority | MdlMappingNoExecute | MdlMappingNoWrite;
PVOID ptr = MmGetSystemAddressForMdlSafe
(
mdl,
flags
);
的MdlMappingNoExecute
和MdlMappingNoWrite
標誌只會對Win8的+效果。
此外,僅使用MmGetSystemAddressForMdlSafe
我不能指定例如NoAccess
保護內存區域。
是否有任何額外的或替代的API-s我可以使用,以便我可以修改分配的內存的頁面保護?
由於目前這種功能在生產代碼中不會被使用,因此攻擊者也會這樣做。
謝謝。你碰巧知道嗎,這些API可以應用於非分頁和系統(不與進程關聯)的內存嗎? –
* ZwAllocateVirtualMemory例程在指定進程的用戶模式虛擬地址空間內保留,提交或提供這兩個頁面的區域* - https://msdn.microsoft.com/zh-cn/library/windows/硬件/ ff566416%28v = vs.85%29.aspx 儘管您的答案仍然有用,但由於'MmAllocatePagesForMdl'生成非分頁內存分配 - https://msdn.microsoft,因此目前該問題隱含地要求解決非分頁內存問題。 com/en-us/library/windows/hardware/ff554482(v = vs.85).aspx –
知道未公開的'ZwProtectVirtualMemory' API是否能夠在非分頁內存上工作,以及它與' MmProtectMdlSystemAddress'?我想我明白'NtProtectVirtualMemory'是用於用戶模式的內存,並且會失敗,並且參數指向系統內存範圍。 'Zw'和'Mm' API之間的區別很有趣,因爲在互聯網上可以找到各種詭計來調用'ZwProtectVirtualMemory' API。如果不是因爲某些優勢......那麼我認爲這些黑客不會被製造出來? –