【旧文章搬运】炉子给的SYSTEM_HANDLE_TYPE有点错误

原文发表于百度空间,2008-12-03
==========================================================================

今天写程序,用ZwQuerySystemInformation枚举系统中的文件句柄时出了问题,死活一个都找不到,可是这明显不可能啊?于是用Process Explorer随便找了个文件句柄对象,然后看了它的OBJECT_TYPE,才发现文件句柄的类型索引应为28,而我用的是炉子给的那个SYSTEM_HANDLE_TYPE表,里面给的值却是26!怪不得一个也找不到呢。于是,就花了点时间把这个类型索引给修正了一下,并且把几个UNKNOW的给补充了出来,以后用起来就方便了嘛~

所谓的句柄索引,其实就是下面这个句柄信息结构中的ObjectTypeNumber:

typedef struct _SYSTEM_HANDLE_INFORMATION {
ULONG ProcessId;
UCHAR ObjectTypeNumber;//其实就个
UCHAR Flags;
USHORT Handle;
PVOID Object;
ACCESS_MASK GrantedAccess;
} SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;

而这个东西,也就是OBJECT_TYPE结构中的Index而已,所以叫它索引......

typedef struct _OBJECT_TYPE {
    ERESOURCE Mutex;
    LIST_ENTRY TypeList;
    UNICODE_STRING Name;            // Copy from object header for convenience
    PVOID DefaultObject;
    ULONG Index;
    ULONG TotalNumberOfObjects;
    ULONG TotalNumberOfHandles;
    ULONG HighWaterNumberOfObjects;
    ULONG HighWaterNumberOfHandles;
    OBJECT_TYPE_INITIALIZER TypeInfo;
#ifdef POOL_TAGGING
    ULONG Key;
#endif //POOL_TAGGING
    ERESOURCE ObjectLocks[ OBJECT_LOCK_COUNT ];
} OBJECT_TYPE, *POBJECT_TYPE;

下面给出我修正后的,也补充了一些内容:

typedef enum _SYSTEM_HANDLE_TYPE
{
   OB_TYPE_UNKNOWN=0,   //0
   OB_TYPE_TYPE,    // 1,fixed
   OB_TYPE_DIRECTORY,   // 2,fixed
   OB_TYPE_SYMBOLIC_LINK, // 3,fixed
   OB_TYPE_TOKEN,    // 4,fixed
   OB_TYPE_PROCESS,   // 5,fixed
   OB_TYPE_THREAD,    // 6,fixed
   OB_TYPE_JOB,    // 7,fixed
   OB_TYPE_DEBUG_OBJECT, // 8,fixed
   OB_TYPE_EVENT,    // 9,fixed
   OB_TYPE_EVENT_PAIR,   //10,fixed
   OB_TYPE_MUTANT,    //11,fixed
   OB_TYPE_CALLBACK,   //12,fixed
   OB_TYPE_SEMAPHORE,   //13,fixed
   OB_TYPE_TIMER,    //14,fixed
   OB_TYPE_PROFILE,   //15,fixed
   OB_TYPE_KEYED_EVENT, //16,fixed
   OB_TYPE_WINDOWS_STATION,//17,fixed
   OB_TYPE_DESKTOP,   //18,fixed
   OB_TYPE_SECTION,   //19,fixed
   OB_TYPE_KEY,    //20,fixed
   OB_TYPE_PORT,    //21,fixed
   OB_TYPE_WAITABLE_PORT, //22,fixed
   OB_TYPE_ADAPTER,   //23,fixed
   OB_TYPE_CONTROLLER,   //24,fixed
   OB_TYPE_DEVICE,    //25,fixed
   OB_TYPE_DRIVER,    //26,fixed
   OB_TYPE_IOCOMPLETION, //27,fixed
   OB_TYPE_FILE,    //28,fixed
   OB_TYPE_WMIGUID    //29,fixed
}SYSTEM_HANDLE_TYPE;

这回就全了。网上找了一下,用到这个枚举的基本都和炉子的LzOpenProcess有关,而那里面只用了OB_TYPE_PROCESS,而这个是对的,其它的估计也没多少人注意,也没什么人用到,所以网上传的基本都是炉子那个不完全正确版本。

ps:后来仔细在WRK中看了一下这个Index 的生成过程,又学到点新东西,原来对象类型也是一种对象,叫做ObpTypeObjectType,就像我们熟知的PsProcessType,PsThreadType一样。而这个索引并不是固定的,而是系统根据需要调用ObCreateObjectType时动态生成的(不过对于某一固定版本的系统,这个应该是固定的吧),所以ObpTypeObjectType的对象计数就是系统中所有对象类型的个数......

最后声明一下,这个类型表是我在XP SP2下搞出来的,谁有时间帮我验证下在别的系统上对不对~(估计在Vista下肯定不对,系统差距太大了)

=========================================================================================================================

后记:这个类型表在每个系统里都不一样,在之后的文章里,会有更深入的一些分析

原文地址:https://www.cnblogs.com/achillis/p/10180826.html

时间: 2024-10-07 12:31:24

【旧文章搬运】炉子给的SYSTEM_HANDLE_TYPE有点错误的相关文章

【旧文章搬运】获取并修改PEB中的映像路径,命令行和当前目录

原文发表于百度空间,2008-7-24 当时对UNICODE_STRING的使用还有点问题,导致最终效果图中字符串被截断了========================================================================== 先从分析PEB开始吧.感觉分析这个东西,首先要把类型定义搞清楚,这个在Windbg里dt _PEB就可以了搞清楚定义主要是为了定位相关变量的偏移.PEB中的ProcessParameters部分就是进程的参数了,里面就有我们感兴

【旧文章搬运】遍历EPROCESS中的ActiveProcessLinks枚举进程

原文发表于百度空间,2008-7-25========================================================================== 前面对PEB的相关结构和其中的重要成员进行了分析和学习,现在开始真正进入内核,学习内核中的一些结构.这个EPROCESS结构在ntddk.h中有定义,但是并未给出具体的结构,因此要得到EPROCESS中一些重要的成员变量,只能通过偏移的方法,比如PID,ImageName等.这些偏移可以在Windbg中dt _

【旧文章搬运】ZwQuerySystemInformation枚举内核模块及简单应用

原文发表于百度空间,2008-10-24========================================================================== 简单说,即调用第11号功能,枚举一下内核中已加载的模块.部分代码如下://功能号为11,先获取所需的缓冲区大小ZwQuerySystemInformation(SystemModuleInformation,NULL,0,&needlen);//申请内存ZwAllocateVirtualMemory(NtCu

【旧文章搬运】ZwQuerySystemInformation枚举进线程信息

原文发表于百度空间,2008-10-15========================================================================== 很古老的东西了,写一写,权当练手吧.本来以为没什么难度,很科普很傻瓜的东西,但是写的时候还是遇到一些问题,进程信息正确,得到的线程信息总是不正确,后来分析了一下,发现这个ntdll sdk中定义的进程信息结构和线程信息结构都有点问题,可能它是来自<Win2000 Native API>一书,不适用于Wind

【旧文章搬运】Idle进程相关的一些东西

原文发表于百度空间,2009-05-13========================================================================== Idle进程和System进程一样,也是系统中的一个特殊进程,严格讲它不算是一个进程,但是它有自己的EPROCESS,并有一个IdleThread.若说它算一个进程,它的进程空间.句柄表.Token等却又和System进程一样,即共享了System的内核数据,所以不能以常理对待之.关于Idle进程的两个问题:

【旧文章搬运】分析了一下360安全卫士的HOOK

原文发表于百度空间及看雪论坛,2009-10-08 看雪论坛地址:https://bbs.pediy.com/thread-99128.htm 看时间,09年的国庆节基本上就搞这玩意儿了...========================================================================== 分析了一下360的HOOK,通过直接hook KiFastCallEntry实现对所有系统调用的过滤. 我分析的版本如下:主程序版本: 6.0.1.1003H

【旧文章搬运】Windows中全局钩子DLL的加载过程

原文发表于百度空间,2011-03-24========================================================================== 看雪上别人问的一个问题,顺便在此记录下吧~~ kd> kvn # ChildEBP RetAddr Args to Child 00 0012f7b8 77d2dbfb 0012f81c 00000000 00000008 kernel32!LoadLibraryExW+0x2 (FPO: [Non-Fpo]

R.I.P. Alan Turing(旧文搬运15.6.6)

艾伦·图灵 Alan Turing 1912年6月23日-1954年6月7日 英国数学家.逻辑学家,计算机科学之父,人工智能之父 在小时候,图灵就表现出了惊人的科学天赋,能够读懂爱因斯坦的著作,并且在没有学过微积分的情况下,解出许多数学难题. 图灵考入剑桥大学,并以优异成绩毕业.1935年,年仅23岁的图灵,被选为剑桥大学国王学院院士.之后,主要研究可计算理论,并提出"图灵机"的构想. 二战期间,图灵主要从事破译德军Enigma密码的工作.那是一场没有硝烟的战争,一场人类智慧极限的对抗

BuzzSumo:什么样的文章能获得疯转?(基于1亿篇文章大数据分析)

BuzzSumo:什么样的文章能获得疯转?(基于1亿篇文章大数据分析) 社交媒体追踪服务分析工具BuzzSumo,2014年5月前后对社交媒体上超过1亿篇文章进行了分析,试图找出一个答案: 什么样的内容才能让用户乐于分享,获得病毒式传播? 这个大问题又内含或细分为一些小问题: ◆那些获得疯转的文章,激起了用户哪种情绪? ◆清单?图表?哪类文章更有可能被用户分享? ◆读者更喜欢分享短文章还是长文章?社交媒体上的文章,最理想的长度是怎样的? ◆“信任”是不是驱动用户分享文章的一个主要因素? ◆文章有