首页
社区
课程
招聘
[求助]ring0枚举进程
发表于: 2013-7-25 10:38 6819

[求助]ring0枚举进程

2013-7-25 10:38
6819
原帖是http://bbs.pediy.com/showthread.php?t=106745&highlight=ring0
不知道有没有发错地方~新人,请见谅哈!

3.利用进程的ActiveProcessList

void DisplayInfo()
{
PEPROCESS pEprocess = NULL, pTemp = NULL;
pEprocess = PsGetCurrentProcess();
pTemp = pEprocess;
do
{
   DbgPrint("PId:%d\t", *(PULONG)((ULONG)pTemp+0x084) );
   DbgPrint("Path:%s\n", (PUCHAR)((ULONG)pTemp+0x174 ));
   pTemp = (PEPROCESS)( (ULONG)(*(PULONG)((ULONG)pTemp+0x088)) - 0x088 );

} while ( pTemp != pEprocess );
}
我按照帖子的ring0的代码进行调试,编译成功并生成了驱动sys文件,利用instdrv驱动安装成功,但是启动的时候会蓝屏,请问是为什么?是不是因为只有在得到ring0的控制权下才可以使用以上代码呢?
本人刚开始研究ring0驱动编程,所以希望大家给我详细点讲解哈,谢谢!

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
挂上wingdb看看哪出错了
2013-7-25 10:43
0
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
1. Windows 不同版本的 EPROCESS 中的 ActiveProcessList 的偏移不一样。具体自己用 Windbg
    dt nt!_EPROCESS

2. 调试程序都不会、错误代码都不会定位....。
2013-7-25 11:25
0
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
4
NTSTATUS LookupProcessByName(
        IN PCHAR pcProcessName,
        OUT PEPROCESS *pEprocess
        )
{
        NTSTATUS        status;
        ULONG                uCount = 0;
        ULONG                uLength = 0;
        PLIST_ENTRY        pListActiveProcess;
        PEPROCESS        pCurrentEprocess = NULL;
        ULONG ulNextProcess = 0;
        ULONG g_Offset_Eprocess_Flink;
        WIN_VER_DETAIL WinVer;
        char lpszProName[100];
        char *lpszAttackProName = NULL;

        if (!ARGUMENT_PRESENT(pcProcessName) || !ARGUMENT_PRESENT(pEprocess))
        {
                return STATUS_INVALID_PARAMETER;
        }
        if (KeGetCurrentIrql() > PASSIVE_LEVEL)
        {
                return STATUS_UNSUCCESSFUL;
        }
        uLength = strlen(pcProcessName);

        WinVer = GetWindowsVersion();
        switch(WinVer)
        {
        case WINDOWS_VERSION_XP:
                g_Offset_Eprocess_Flink = 0x88;
                break;
        case WINDOWS_VERSION_7_7600_UP:
        case WINDOWS_VERSION_7_7000:
                g_Offset_Eprocess_Flink = 0xb8;
                break;
        case WINDOWS_VERSION_VISTA_2008:
                g_Offset_Eprocess_Flink = 0x0a0;
                break;
        case WINDOWS_VERSION_2K3_SP1_SP2:
                g_Offset_Eprocess_Flink = 0x98;
                break;
        case WINDOWS_VERSION_2K3:
                g_Offset_Eprocess_Flink = 0x088;
                break;
        }
        if (!g_Offset_Eprocess_Flink){
                return STATUS_UNSUCCESSFUL;
        }

        pCurrentEprocess = PsGetCurrentProcess();
        ulNextProcess =(ULONG) pCurrentEprocess;

        __try
        {
                memset(lpszProName,0,sizeof(lpszProName));
                if (uLength > 15)
                {
                        strncat(lpszProName,pcProcessName,15);
                }
                while(1)
                {
                        lpszAttackProName = NULL;
                        lpszAttackProName = (char *)PsGetProcessImageFileName(pCurrentEprocess);

                        if (uLength > 15)
                        {
                                if (lpszAttackProName &&
                                        strlen(lpszAttackProName) == uLength)
                                {
                                        if(_strnicmp(lpszProName,lpszAttackProName, uLength) == 0)
                                        {
                                                *pEprocess = pCurrentEprocess;
                                                status = STATUS_SUCCESS;
                                                break;
                                        }
                                }
                        }
                        else
                        {
                                if (lpszAttackProName &&
                                        strlen(lpszAttackProName) == uLength)
                                {
                                        if(_strnicmp(pcProcessName,lpszAttackProName, uLength) == 0)
                                        {
                                                *pEprocess = pCurrentEprocess;
                                                status = STATUS_SUCCESS;
                                                break;
                                        }
                                }
                        }
                        if ((uCount >= 1) && (ulNextProcess ==(ULONG) pCurrentEprocess))
                        {
                                *pEprocess = 0x00000000;
                                status = STATUS_NOT_FOUND;
                                break;
                        }
                        pListActiveProcess = (LIST_ENTRY *)((ULONG)pCurrentEprocess + g_Offset_Eprocess_Flink);
                        (ULONG)pCurrentEprocess = (ULONG)pListActiveProcess->Flink;
                        (ULONG)pCurrentEprocess = (ULONG)pCurrentEprocess - g_Offset_Eprocess_Flink;
                        uCount++;
                }
        }
        __except(EXCEPTION_EXECUTE_HANDLER)
        {
                KdPrint(("LookupProcessByName:%08x\r\n",GetExceptionCode()));
                status = STATUS_NOT_FOUND;
        }
        return status;
}

自己提取。。。
2013-7-25 11:49
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
感谢回复,我刚学所以不会调试。。。 我是在host win8下直接用VS2012+虚拟机win8调试的,但是调试会报一个"Driver Testing - An error occured deploying the driver(s) in the solution. The system cannot find the file specified".的错误。
2013-7-25 16:27
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
OK,我试试
2013-7-25 16:28
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
VS能调内核驱动?看来我out了
2013-7-25 23:05
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
你好,请问怎么获得以下偏移值的方法呢?讲解的详细点哈!
这些是XP SP3的,我想获得2003的偏移,怎么弄呢?
#define  EPROCESS_SIZE       0x260
#define  PEB_OFFSET          0x1B0        
#define  FILE_NAME_OFFSET    0x174
#define  PROCESS_LINK_OFFSET 0x088
#define  PROCESS_ID_OFFSET   0x084
#define  EXIT_TIME_OFFSET    0x078

#define  OBJECT_HEADER_SIZE  0x018
#define  OBJECT_TYPE_OFFSET  0x008
2013-7-28 21:11
0
游客
登录 | 注册 方可回帖
返回
//