wenh7788 发表于 2012-3-1 11:53:54

[疑惑]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 地方的代码应该怎么写?

Tesla.Angela 发表于 2012-3-1 15:45:16

呵呵,这个就不解释了。。。你自己慢慢研究吧,研究通了发代码我给你加精华。。。

wenh7788 发表于 2012-3-1 18:39:18

老大真心的没有搞懂,给点提示好吗?
按照道理说没有错啊。可是总是蓝屏的

iloveqqp 发表于 2012-3-8 01:15:09

給力阿~{:soso_e116:}

kk1025 发表于 2013-4-12 11:11:35

Tesla.Angela 发表于 2012-3-1 15:45 static/image/common/back.gif
呵呵,这个就不解释了。。。你自己慢慢研究吧,研究通了发代码我给你加精华。。。 ...

努力學習中
页: [1]
查看完整版本: [疑惑]X64 hook NtOpenProcess