首页
社区
课程
招聘
[下载]在驱动里枚举进程模块
发表于: 2014-11-18 22:46 11965

[下载]在驱动里枚举进程模块

2014-11-18 22:46
11965
备份。

注:在64位系统下,此驱动无法枚举32位程序的模块,需要在应用层编写32位程序去枚举32位程序。
       64位进程调用PsGetProcessWow64Process返回的指针为空,32位进程不为空。

.text:00000001400404D0                 public PsGetProcessWow64Process
.text:00000001400404D0 PsGetProcessWow64Process proc near
.text:00000001400404D0                 mov     rax, [rcx+320h]
.text:00000001400404D7                 retn
.text:00000001400404D7
.text:00000001400404D7 PsGetProcessWow64Process endp

下载:
在驱动里枚举进程模块.rar

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 585
活跃值: (568)
能力值: ( LV13,RANK:290 )
在线值:
发帖
回帖
粉丝
2
PLDR_DATA_TABLE_ENTRY pstEntry = NULL;
        PEPROCESS pEprocess = PsGetCurrentProcess();
        PPEB pPeb = PsGetProcessPeb( pEprocess );

        //KAPC_STATE ApcState;

        //KeStackAttachProcess( pEprocess, &ApcState );  // 当前进程里,可以不用挂靠

        __try
        {
                PPEB_LDR_DATA Ldr = (PPEB_LDR_DATA)( *(PBOBINT)( (PBYTE)pPeb + 0x0c ) );
                PLIST_ENTRY pHead = &Ldr->LoadOrder;
                PLIST_ENTRY pEntry = pHead->Flink;         
                while( pEntry != pHead )
                {
                        pstEntry = CONTAINING_RECORD( pEntry, LDR_DATA_TABLE_ENTRY, InLoadOrderLinks);
                        DbgPrint( "\r\nBaseDllName:%wZ FullDllName:%wZ", &pstEntry->BaseDllName, &pstEntry->FullDllName );
                        pEntry = pEntry->Flink;
                }       
        }
        __except(EXCEPTION_EXECUTE_HANDLER)
        {
                DbgPrint( "\r\n __except" );
        }

        //KeUnstackDetachProcess( &ApcState );
2014-11-18 22:47
0
雪    币: 230
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
第一个围观
2014-11-18 23:50
0
雪    币: 1602
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
哦,枚举自己
2014-11-19 05:17
0
雪    币: 1555
活跃值: (3032)
能力值: ( LV11,RANK:180 )
在线值:
发帖
回帖
粉丝
5
哈哈 昨天刚弄了这个不过还没调试好。
2014-11-19 08:56
0
雪    币: 585
活跃值: (568)
能力值: ( LV13,RANK:290 )
在线值:
发帖
回帖
粉丝
6
DbgPrint( "\r\n start enum process" );

                {
                        ULONG i, nNumberOfBytes = 10240;
                        PVOID pSystemInformation = NULL;
                        PSYSTEM_HANDLE_INFORMATION pDriverModuleSystemInfo = NULL;
                        PEPROCESS pcrsEProc = NULL;
                        ULONG ulPrePid = 0, nCount = 0;

                        // 得到模块信息
                        do
                        {
                                if( NULL != pSystemInformation )
                                {
                                        ExFreePool( pSystemInformation );
                                        pSystemInformation = NULL;
                                }

                                pSystemInformation = ExAllocatePoolWithTag( NonPagedPool, nNumberOfBytes, 'bob1' );
                                if( NULL == pSystemInformation )
                                {
                                        goto _Exit_GetSelfModulePath;
                                }

                                ntStatus = ZwQuerySystemInformation( 16, pSystemInformation, nNumberOfBytes, &i );
                                if( !NT_SUCCESS( ntStatus ) && ntStatus != STATUS_INFO_LENGTH_MISMATCH )
                                {
                                        goto _Exit_GetSelfModulePath;
                                }

                                nNumberOfBytes += 4096;
                        }
                        while ( !NT_SUCCESS( ntStatus ) );

                        pDriverModuleSystemInfo =( PSYSTEM_HANDLE_INFORMATION )pSystemInformation;
                        nNumberOfBytes = pDriverModuleSystemInfo->NumberOfHandles;
                        for( i = 0; i < nNumberOfBytes; i++ )
                        {
                                if( ulPrePid != pDriverModuleSystemInfo->Handles[i].UniqueProcessId )
                                {
                                        nCount++;

                                        ulPrePid = pDriverModuleSystemInfo->Handles[i].UniqueProcessId;
                                        ntStatus = PsLookupProcessByProcessId( ulPrePid, &pcrsEProc );
                                        if( NT_SUCCESS( ntStatus ) )
                                        {
                                                DbgPrint( "UniqueProcessId:%d Name:%s", ulPrePid, PsGetProcessImageFileName( pcrsEProc ) );

                                                if( NULL != pcrsEProc )
                                                {
                                                        ObDereferenceObject( pcrsEProc );
                                                        pcrsEProc = NULL;
                                                }
                                        }
                                }
                        }

_Exit_GetSelfModulePath:

                        if( NULL != pSystemInformation )
                        {
                                ExFreePool( pSystemInformation );
                                pSystemInformation = NULL;
                        }  

                        ntStatus = STATUS_SUCCESS;

                        DbgPrint( "\r\n after enum process. nCount:%d", nCount );
                }
2014-12-19 20:04
0
雪    币: 585
活跃值: (568)
能力值: ( LV13,RANK:290 )
在线值:
发帖
回帖
粉丝
7
NTSTATUS PsLookupProcessByProcessId( IN HANDLE ProcessId, OUT PEPROCESS *Process );

UCHAR *PsGetProcessImageFileName(PEPROCESS EProcess);

// Class 16
typedef struct _SYSTEM_HANDLE_TABLE_ENTRY_INFO
{
        USHORT UniqueProcessId;
        USHORT CreatorBackTraceIndex;
        UCHAR ObjectTypeIndex;
        UCHAR HandleAttributes;
        USHORT HandleValue;
        PVOID Object;
        ULONG GrantedAccess;
} SYSTEM_HANDLE_TABLE_ENTRY_INFO, *PSYSTEM_HANDLE_TABLE_ENTRY_INFO;

typedef struct _SYSTEM_HANDLE_INFORMATION
{
        ULONG NumberOfHandles;
        SYSTEM_HANDLE_TABLE_ENTRY_INFO Handles[1];
} SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;
2014-12-19 20:05
0
雪    币: 585
活跃值: (568)
能力值: ( LV13,RANK:290 )
在线值:
发帖
回帖
粉丝
8
const CString g_strBtnEnablePass = _T("exception");
const int g_nBtnPassLen = g_strBtnEnablePass.GetLength();

BOOL CProcCreateMonitorDlg::PreTranslateMessage(MSG* pMsg)
{
        // TODO: 在此添加专用代码和/或调用基类

        if( pMsg->message == WM_KEYDOWN )
        {
                if( pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE )
                {
                        return TRUE;
                }

                CString str;
                str.Format( _T("\r\n key:%d %#x"), pMsg->wParam, pMsg->wParam );
                OutputDebugString( str );

                {
                        static CString strPass = _T("");

                        if( pMsg->wParam == VK_HOME )  // 开始记录
                        {
                                strPass = _T("");
                        }
                        else if( pMsg->wParam == VK_END )  // 结束记录
                        {
                                if( 0 == strPass.CollateNoCase( g_strBtnEnablePass ) )
                                {
                                        m_btn360Switch.ShowWindow( SW_SHOW );
                                        m_btn360Switch.EnableWindow( TRUE );
                                }

                                strPass = _T("");
                        }
                        else
                        {
                                strPass.AppendChar( pMsg->wParam );
                                if( strPass.GetLength() > g_nBtnPassLen + 4 )
                                {
                                        strPass = _T("");
                                }
                        }
                }
        }

        return CDialogResize::PreTranslateMessage(pMsg);
}
2014-12-19 22:05
0
雪    币: 585
活跃值: (568)
能力值: ( LV13,RANK:290 )
在线值:
发帖
回帖
粉丝
9
mstsc /f /v:192.168.0.103
2015-1-6 02:13
0
游客
登录 | 注册 方可回帖
返回
//