[疑惑]X64 hook NtOpenProcess
首先感谢TA大大公开源码~下面是我代码
ULONG64 ullSSDTBaseAddress;
ULONG64 ullSSDTNtOpAddress;
ULONG64 RealSSDTNtOpAddress;
typedef NTSTATUS (__stdcall *NTOPENPROCESS)(
__out PHANDLEProcessHandle,
__in ACCESS_MASKDesiredAccess,
__in POBJECT_ATTRIBUTESObjectAttributes,
__in_opt PCLIENT_IDClientId
);
NTOPENPROCESSRealNtOpenProcess;
NTSTATUS __stdcall MyNtOpenProcess(
PHANDLEProcessHandle,
ACCESS_MASKDesiredAccess,
POBJECT_ATTRIBUTESObjectAttributes,
PCLIENT_IDClientId
)
{
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 地方的代码应该怎么写? 呵呵,这个就不解释了。。。你自己慢慢研究吧,研究通了发代码我给你加精华。。。 老大真心的没有搞懂,给点提示好吗?
按照道理说没有错啊。可是总是蓝屏的 給力阿~{:soso_e116:} Tesla.Angela 发表于 2012-3-1 15:45 static/image/common/back.gif
呵呵,这个就不解释了。。。你自己慢慢研究吧,研究通了发代码我给你加精华。。。 ...
努力學習中
页:
[1]