Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 3 của 3
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Tại sao hook NtShutDownSystem thì bị reset máy

    Em có hook ntshutdownsystem để không cho restart nhưng khi hook thì máy tính tự nhiên restart , mọi người giúp em sửa code với.


    Mã:
    #include "ntddk.h"
    #pragma pack(1)
    typedef struct ServiceDescriptorEntry
    {
            unsigned int *ServiceTableBase;
            unsigned int *ServiceCounterTableBase; //Used only in checked build
            unsigned int NumberOfServices;
            unsigned char *ParamTableBase;
    } SSDTEntry;
    __declspec(dllimport)  SSDTEntry KeServiceDescriptorTable;
    #pragma pack()
    typedef enum _SHUTDOWN_ACTION {
    ShutdownNoReboot,
    ShutdownReboot,
    ShutdownPowerOff
    }SHUTDOWN_ACTION;
     
    NTKERNELAPI NTSTATUS NtShutdownSystem(
                   IN SHUTDOWN_ACTION Action
                   );
    typedef NTSTATUS(*_NtShutdownSystem)(
                   IN SHUTDOWN_ACTION Action
                   );
     
    
    _NtShutdownSystem Old_NtShutdownSystem;
    #define GetSystemFunc(FuncName) KeServiceDescriptorTable.ServiceTableBase[*(PULONG)((PUCHAR)FuncName+1)]
    PMDL  MDSystemCall;
    PVOID *MappedSCT;
    #define GetIndex(_Function) *(PULONG)((PUCHAR)_Function+1)
    #define HookOn(_Old, _New)  \
           (PVOID) InterlockedExchange( (PLONG) &MappedSCT[GetIndex(_Old)], (LONG) _New)
    #define UnHook(_Old, _New)  \
           InterlockedExchange( (PLONG) &MappedSCT[GetIndex(_Old)], (LONG) _New)
     
    
    NTSTATUS NewNtShutdownSystem(
                     IN SHUTDOWN_ACTION Action
                     )
    {
    Action = -2;
    return -2;
    }
    
    //Unload
    VOID UnLoad(IN PDRIVER_OBJECT DriverObject)
    {
       DbgPrint("UnLoad Driver.
    ");
       //??Hook
       UnHook( NtShutdownSystem, Old_NtShutdownSystem);
       //?????MDL
       if(MDSystemCall)
       {
          MmUnmapLockedPages(MappedSCT, MDSystemCall);
          IoFreeMdl(MDSystemCall);
       }
    }
    //EntryPoint.
    NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, 
               IN PUNICODE_STRING RegistryPath)
    {
      DriverObject->DriverUnload = UnLoad;
      
      //??????????
      Old_NtShutdownSystem  =(_NtShutdownSystem )(GetSystemFunc(NtShutdownSystem ));
      MDSystemCall = MmCreateMdl(NULL, KeServiceDescriptorTable.ServiceTableBase, KeServiceDescriptorTable.NumberOfServices*4);
      if(!MDSystemCall)
        return STATUS_UNSUCCESSFUL;
      MmBuildMdlForNonPagedPool(MDSystemCall);
      MDSystemCall->MdlFlags = MDSystemCall->MdlFlags | MDL_MAPPED_TO_SYSTEM_VA;
      MappedSCT = MmMapLockedPages(MDSystemCall, KernelMode);
      //??HOOK
      HookOn( NtShutdownSystem, NewNtShutdownSystem);
      return STATUS_SUCCESS;
    }

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Bị Màn hình xanh à bạn ?

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    dạ không , nó bị restart đột ngột như dùng ntshutdownsystem đó

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •