|
首先感谢TA大大公开源码~
下面是我代码
- ULONG64 ullSSDTBaseAddress;
- ULONG64 ullSSDTNtOpAddress;
- ULONG64 RealSSDTNtOpAddress;
- typedef NTSTATUS (__stdcall *NTOPENPROCESS)(
- __out PHANDLE ProcessHandle,
- __in ACCESS_MASK DesiredAccess,
- __in POBJECT_ATTRIBUTES ObjectAttributes,
- __in_opt PCLIENT_ID ClientId
- );
- NTOPENPROCESS RealNtOpenProcess;
- NTSTATUS __stdcall MyNtOpenProcess(
- PHANDLE ProcessHandle,
- ACCESS_MASK DesiredAccess,
- POBJECT_ATTRIBUTES ObjectAttributes,
- PCLIENT_ID ClientId
- )
- {
- NTSTATUS rc;
- //ULONG PID;
- DbgPrint( "NtOpenProcess() called.\n" );
- KdPrint(( "NtOpenProcess() called.\n" ));
- rc = (NTSTATUS)(NTOPENPROCESS)RealNtOpenProcess(
- ProcessHandle,
- DesiredAccess,
- ObjectAttributes,
- ClientId
- );
- return rc;
- }
- KIRQL WPOFFx64()
- {
- KIRQL irql=KeRaiseIrqlToDpcLevel();
- ULONG64 Cr0=0;
- Cr0=__readcr0();
- Cr0 &=0xFFFFFFFFFFFEFFFF;
- __writecr0(Cr0);
- _disable();
- return irql;
- }
- VOID WPONx64(KIRQL irql)
- {
- ULONG64 Cr0=0;
- Cr0=__readcr0();
- Cr0 |=0x10000;
- _enable();
- __writecr0(Cr0);
- KeLowerIrql(irql);
- }
- VOID HookNtOpenProcess()
- {
- KIRQL irql;
- ULONG64 Address;
- ULONG64 ulSSDTValue;
- ulSSDTValue=*(ULONG64*)ullSSDTBaseAddress; //0xfffff800`03c7fb00
- Address=(ULONG64)(ulSSDTValue + 0x23*4); //0xfffff800`03c7fb8c
- RealSSDTNtOpAddress=ulSSDTValue+(((DWORD)(*(ULONG64*)Address))>> 4); //
- RealNtOpenProcess=(NTOPENPROCESS)RealSSDTNtOpAddress;
- irql=WPOFFx64();
- *(ULONG64*)Address= (ULONG64)MyNtOpenProcess; ×××××××这句代码怎么写?
- WPONx64(irql);
- }
复制代码 因为计算的方法变化了,我反而不会写了。经过蓝屏多次查看之后无果,只好出来献丑了。请大侠们指点,谢谢!
说白了hook 地方的代码应该怎么写? |
|