HOOK SSDT禁用内存写保护

cr0的第16位是WP位,只要将这一位置0就可以禁用写保护,置1则可将其恢复。

// 关闭写保护
__asm
{
    cli ;
    mov eax, cr0
    and  eax, ~0x10000
    mov cr0, eax
}

// 恢复写保护
__asm
{
    mov  eax, cr0
    or     eax, 0x10000
    mov  cr0, eax
    sti ;
}


MDL的全称是Memory Descriptor List,即内存描述符表


typedef struct _MDL 
{
    struct _MDL  *Next;
    CSHORT       Size;
    CSHORT       MdlFlags;
    struct _EPROCESS *Process;
    PVOID          MappedSystemVa;
    PVOID          StartVa;
    ULONG         ByteCount;
    ULONG   ByteOffset;
} MDL, *PMDL;

我们先来看一段在SSDT HOOK中常见的代码,如下所示:
PMDL MDSystemCall;
PVOID *MappedSCT;

MDSystemCall = MmCreateMdl(NULL, KeServiceDescriptorTable.ServiceTableBase, KeServiceDescriptorTable.NumberOfServices*4);
if(!MDSystemCall)
{
    return STATUS_UNSUCCESSFUL;
}
MmBuildMdlForNonPagedPool(MDSystemCall);
MDSystemCall->MdlFlags |= MDL_MAPPED_TO_SYSTEM_VA;
MappedSCT = MmMapLockedPages(MDSystemCall, KernelMode);
HookOn( ZwTerminateProcess, New_ZwTerminateProcess);


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值