Rootkit之SSDT hook(通过CR0)

CR0当中有一个写保护位,是保护内存不可写属性的,为了能够写入内核,只能把它的保护给咔嚓掉了,不过……如果做完了手脚但不还原写保护属性的话,极有可能会BOSD.
/=====================================================================================//
   5:  //Name: VOID DisableWriteProtect()                                                     //
   6:  //                                                                                     //
   7:  //Descripion: 用来去掉内存的可写属性,从而实现内存只读                                 //
   8:  //                                                                                     //
   9:  //=====================================================================================//
  10:  VOID DisableWriteProtect(ULONG oldAttr)
  11:  {
  12:      _asm
  13:      {
  14:          mov eax, oldAttr
  15:          mov cr0, eax
  16:          sti;
  17:      }
  18:  }
  19:   
  20:   
  21:  //=====================================================================================//
  22:  //Name: VOID EnableWriteProtect()                                                      //
  23:  //                                                                                     //
  24:  //Descripion: 用来去掉内存的只读保护,从而实现可以写内存                               //
  25:  //                                                                                     //
  26:  //=====================================================================================//
  27:  VOID EnableWriteProtect(PULONG pOldAttr)
  28:  {
  29:      ULONG uAttr; 
  30:   
  31:      _asm 
  32:      { 
  33:          cli;
  34:          mov  eax, cr0; 
  35:          mov  uAttr, eax; 
  36:          and  eax, 0FFFEFFFFh; // CR0 16 BIT = 0 
  37:          mov  cr0, eax; 
  38:      }; 
  39:   
  40:      //保存原有的 CRO 属性 
  41:      *pOldAttr = uAttr; 
  42:  }
  43:   
  44:   
原文地址:https://www.cnblogs.com/vcerror/p/4289231.html