xiaoc1026 发表于 2013-1-7 13:05:08

在WIN8 上进程保护的疑问

OB_PREOP_CALLBACK_STATUS    PreProcCreateRoutine(
        __in    PREG_CONTEXT    RegistrationContext,
        __inout    POB_PRE_OPERATION_INFORMATION    OperationInformation
        )
{
        PVOID pPsName = NULL;

        if( OperationInformation->Operation == OB_OPERATION_HANDLE_CREATE &&
                OperationInformation->ObjectType == *PsProcessType &&
                OperationInformation->KernelHandle == 0 &&
                (OperationInformation->Parameters->CreateHandleInformation.OriginalDesiredAccess & PROCESS_TERMINATE) )
        {
                pPsName = OperationInformation->Object;
                OperationInformation->Parameters->DuplicateHandleInformation.DesiredAccess &= (~PROCESS_TERMINATE);
                DbgPrint(" PreProcCreateRoutine PROCESS_TERMINATE\n");
        }

        return    OB_PREOP_SUCCESS;
}WDK HELP 上说:

Object
A pointer to the process or thread object that is the target of the handle operation.

这个 进程对象 OperationInformation->Object 怎么得到进程路径呢?

我用内存搜索Object 是可以找到路径 是偏移 0x990,这个路径不会就这样定位吧?

xiaoc1026 发表于 2013-1-7 14:06:36

//呵呵,获取到了短路径,那个全路径 PEPROCESS 结构没有申明不好获取
OB_PREOP_CALLBACK_STATUS    PreProcCreateRoutine(
        __in    PREG_CONTEXT    RegistrationContext,
        __inout    POB_PRE_OPERATION_INFORMATION    OperationInformation
        )
{
        PEPROCESS pEprocess = NULL;
        //PUNICODE_STRING pName = NULL;
        char* pName;

        if( OperationInformation->Operation == OB_OPERATION_HANDLE_CREATE &&
                OperationInformation->ObjectType == *PsProcessType &&
                OperationInformation->KernelHandle == 0 &&
                (OperationInformation->Parameters->CreateHandleInformation.OriginalDesiredAccess & PROCESS_TERMINATE) )
        {

                pEprocess = (PEPROCESS)OperationInformation->Object;

                //pName = (PUNICODE_STRING)(pEprocess + 0x390);
                pName = PsGetProcessImageFileName(pEprocess);

                if( MmIsAddressValid(pName) )
                {
                        KdPrint((" Path = %wZ", pName));
                }
                //KdPrint((" %wZ", pEprocess->SeAuditProcessCreationInfo.ImageFileName.Name));
                OperationInformation->Parameters->DuplicateHandleInformation.DesiredAccess &= (~PROCESS_TERMINATE);
                DbgPrint(" PreProcCreateRoutine PROCESS_TERMINATE\n");
        }

        return    OB_PREOP_SUCCESS;
}

Tesla.Angela 发表于 2013-1-7 14:09:23

OperationInformation->Object是EPROCESS或者ETHREAD。
获取路径可以使用ZwQueryInformationProcess。

xiaoc1026 发表于 2013-1-7 14:40:07

Tesla.Angela 发表于 2013-1-7 14:09 static/image/common/back.gif
OperationInformation->Object是EPROCESS或者ETHREAD。
获取路径可以使用ZwQueryInformationProcess。 ...

老大,如果进程保护要 在WINXP 通用的话,是不是要2份代码。HOOK ObReferenceObjectByHandle

Tesla.Angela 发表于 2013-1-7 17:21:05

xiaoc1026 发表于 2013-1-7 14:40 static/image/common/back.gif
老大,如果进程保护要 在WINXP 通用的话,是不是要2份代码。HOOK ObReferenceObjectByHandle ...

XP下的进程保护我比较喜欢用“把线程设置为SystemThread”。

kk1025 发表于 2013-4-11 15:38:14

Tesla.Angela 发表于 2013-1-7 14:09 static/image/common/back.gif
OperationInformation->Object是EPROCESS或者ETHREAD。
获取路径可以使用ZwQueryInformationProcess。 ...

原來要這樣

bennywing 发表于 2013-10-15 12:00:08

这个是好东西

mlyknown 发表于 2014-8-5 17:03:46

Tesla.Angela 发表于 2013-1-7 17:21
XP下的进程保护我比较喜欢用“把线程设置为SystemThread”。

win8 下可以么

mlyknown 发表于 2014-8-5 17:03:48

Tesla.Angela 发表于 2013-1-7 17:21
XP下的进程保护我比较喜欢用“把线程设置为SystemThread”。

win8 下可以么
页: [1]
查看完整版本: 在WIN8 上进程保护的疑问