首页
社区
课程
招聘
[分享]刚刚写的一个得到 EPROCESS 系统 偏移的函数
发表于: 2011-9-19 15:05 8488

[分享]刚刚写的一个得到 EPROCESS 系统 偏移的函数

2011-9-19 15:05
8488
这个函数 把各个系统的 PEPROCESS的部分偏移保存到 g_SysverOff
但是  有几个疑问 哈哈
1,我这个函数里面是不是没有全部列举到 所有的操作系统 比如 WIN7 VISTA WIN2008 WIN98 WIN2000等等  这个怎么办  怎么补齐  WIN98都可以算了 毕竟太老了
2,dwMajorVersion==4 dwMinorVersion==0的系统是什么系统啊 能不能有人把这个系统的DEBUGPORT偏移和pImageName偏移 告诉我下啊
3,dwMajorVersion==5 dwMinorVersion==0的系统是什么系统啊 能不能有人把这个系统的DEBUGPORT偏移和pImageName偏移 告诉我下啊

代码如下
typedef struct _stSysVersion_Offset
{// 这个结构体 表示的是 不同系统的 PEPROCESS 的偏移
        ULONG   pid;           //pid 的偏移量
        ULONG        pImageName;    //进程名字偏移
        ULONG   pFlink;        // ActiveProcessLinks  链表
        ULONG   debugport;     //

}stSysVersion_Offset,*PstSysVersion_Offset;
stSysVersion_Offset  g_SysverOff;     //系统的 偏移  
BOOLEAN __stdcall  MyGetSysVersion_Off()  
{ //得到系统的偏移  给全局变量 g_SysverOff 赋值
        RTL_OSVERSIONINFOEXW osvi;
        /*HANDLE hSnapShot;
        BOOL status;
        int  *os_offsets;*/
        RtlZeroMemory(&osvi,sizeof(RTL_OSVERSIONINFOEXW));
        osvi.dwOSVersionInfoSize=sizeof(RTL_OSVERSIONINFOEXW);

        if( STATUS_SUCCESS != RtlGetVersion((PRTL_OSVERSIONINFOW) &osvi) )
        {
                osvi.dwOSVersionInfoSize = sizeof (RTL_OSVERSIONINFOW);
                if ( STATUS_SUCCESS != RtlGetVersion ( (PRTL_OSVERSIONINFOW) &osvi) )
                        return FALSE;
        }

        switch (osvi.dwPlatformId)
        {
        case VER_PLATFORM_WIN32_NT:
                if ( osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0)
                {//
                        g_SysverOff.pid = 148;
                        g_SysverOff.pFlink = 152;
                        //authid_offset = 24;
                        //token_offset = 264;
                        //privcount_offset = 52;
                        //privaddr_offset  = 80;
                        //sidcount_offset = 48;
                        //sidaddr_offset  = 72;
                        KdPrint((" MyGetSysVersion_Off 1111111111111111111 "));
                }
                else if ( osvi.dwMajorVersion == 5 && \
                        osvi.dwMinorVersion == 0 )
                {
                        g_SysverOff.pid = 156;
                        g_SysverOff.pFlink = 160;
                        //authid_offset = 0x18;
                        //token_offset = 0x12c;
                        //privcount_offset = 0x44;
                        //privaddr_offset  = 0x64;
                        //sidcount_offset = 0x3c;
                        //sidaddr_offset  = 0x58;
                        KdPrint((" MyGetSysVersion_Off 2222222222222 "));
                }
                else if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 )
                {//  winxp
                        g_SysverOff.pid = 132;
                        g_SysverOff.pFlink = 136;
                        g_SysverOff.pImageName = 0x174;
                        g_SysverOff.debugport = 0xBC;
                        //authid_offset = 24;
                        //token_offset = 200;
                        //privcount_offset = 72;
                        //privaddr_offset  = 104;
                        //sidcount_offset = 64;
                        //sidaddr_offset  = 92;
                        KdPrint((" MyGetSysVersion_Off 3333333333333 "));
                }
                else if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 )
                {//  WIN2003  32位
                        g_SysverOff.pid = 132;
                        g_SysverOff.pFlink = 136;
                        g_SysverOff.pImageName = 0x164;
                        g_SysverOff.debugport = 0xCC;
                        //authid_offset = 24;
                        //token_offset = 200;
                        //privcount_offset = 84;
                        //privaddr_offset  = 116;
                        //sidcount_offset = 76;
                        //sidaddr_offset  = 104;
                        KdPrint((" MyGetSysVersion_Off 44444444444444 "));
                }
                break;

        default:
                KdPrint(("\n 系统版本错误! %d.%d Not Supported!\n", osvi.dwMajorVersion, osvi.dwMinorVersion));
                return FALSE;
        }
        return  TRUE;
}

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 952
活跃值: (1821)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
winnt 4.0 和win 2000
2011-9-19 15:20
0
雪    币: 3116
活跃值: (1269)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
3


可以用一个结构 _OffsetInfo,里面保存着eprocess各个我们感兴趣的字段,当然喜欢的话,ethread也行
如name,这样程序初始化时候可以赋值_OffsetInfo.name
后面想从eprocess获取name的时候,直接char* eprocess[_OffsetInfo.name]
倒是不错
2011-9-19 16:05
0
雪    币: 204
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
意思就是这个函数不支持 除了 WINXP WIN2003 WIN4 WIN2K的所有WINDOWS了啊  

哪个大牛指点下啊  应该怎么完善 支持所有WINDOWS
2011-9-19 16:11
0
雪    币: 204
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
[QUOTE=zhouws;1001769]嗯

可以用一个结构 _OffsetInfo,里面保存着eprocess各个我们感兴趣的字段,当然喜欢的话,ethread也行
如name,这样程序初始化时候可以赋值_OffsetInfo.name
后面想从eprocess获取name的时候,直接char* eprocess[_OffsetInfo...[/QUOTE]

  可能没怎么懂你的意思  
我现在就是在通过判断系统来得到 感兴趣字段的偏移啊
2011-9-19 16:25
0
雪    币: 7283
活跃值: (4487)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
是不是可以用这个函数获得debugport位置,然后修改吗?比如debugport清零
2011-9-19 16:50
0
雪    币: 204
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
这个只是得到各个系统的 DEBUGPORT 的偏移位置  因为各个系统的 EPROCESS的结构偏移不一样
2011-9-19 17:04
0
雪    币: 204
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
  我的帖子 你们都不理我

怎么总没人回答啊,我觉得这个还是应该很多人能用上啊

怎么没人给点提示啊,
2011-9-20 08:49
0
游客
登录 | 注册 方可回帖
返回
//