获取Windows内核对象的索引与对象名

news/发布时间2024/8/25 18:30:18

下列提出两种获取对象名的方式

  1. 通过_OBJECT_TYPE::Name获取对象名称,通过_OBJECT_TYPE::Index获取对象索引;
  2. 通过NtQueryObject的方式获取,r0与r3通用,代码如下:
typedef enum _OBJECT_INFORMATION_CLASS {ObjectBasicInformation,ObjectNameInformation,ObjectTypeInformation,ObjectTypesInformation,ObjectHandleFlagInformation,ObjectSessionInformation,
} OBJECT_INFORMATION_CLASS;typedef struct _UNICODE_STRING {USHORT  Length;USHORT  MaximumLength;PWSTR  Buffer;
} UNICODE_STRING, *PUNICODE_STRING;typedef struct _OBJECT_TYPE_INFORMATION
{UNICODE_STRING TypeName;ULONG TotalNumberOfObjects;ULONG TotalNumberOfHandles;ULONG TotalPagedPoolUsage;ULONG TotalNonPagedPoolUsage;ULONG TotalNamePoolUsage;ULONG TotalHandleTableUsage;ULONG HighWaterNumberOfObjects;ULONG HighWaterNumberOfHandles;ULONG HighWaterPagedPoolUsage;ULONG HighWaterNonPagedPoolUsage;ULONG HighWaterNamePoolUsage;ULONG HighWaterHandleTableUsage;ULONG InvalidAttributes;GENERIC_MAPPING GenericMapping;ULONG ValidAccessMask;BOOLEAN SecurityRequired;BOOLEAN MaintainHandleCount;UCHAR TypeIndex; // since WINBLUECHAR ReservedByte;ULONG PoolType;ULONG DefaultPagedPoolCharge;ULONG DefaultNonPagedPoolCharge;
} OBJECT_TYPE_INFORMATION, *POBJECT_TYPE_INFORMATION;typedef struct _OBJECT_TYPES_INFORMATION {LONG NumberOfTypes;OBJECT_TYPE_INFORMATION TypeInformation [1];
} OBJECT_TYPES_INFORMATION, *POBJECT_TYPES_INFORMATION;typedef NTSTATUS (__stdcall* typedef_NtQueryObject)(HANDLE Handle,OBJECT_INFORMATION_CLASS ObjectInformationClass,PVOID ObjectInformation,ULONG ObjectInformationLength,PULONG ReturnLength);#define PAD_8(p)        (((p) + 7) & ~7)int main(void) {HMODULE hNtDLL = GetModuleHandleW(L"ntdll.dll");if (!hNtDLL) {return -1;}typedef_NtQueryObject myNtQueryObject = (typedef_NtQueryObject)GetProcAddress(hNtDLL, "NtQueryObject");if (!myNtQueryObject) {return -1;}NTSTATUS status = STATUS_SUCCESS;POBJECT_TYPES_INFORMATION TypesInfo = NULL;ULONG BufferLength = 0;// 如果需要获取指定Handle的对象类型,可以把第一个参数的NULL换成Handle值status = myNtQueryObject(NULL, ObjectTypesInformation, NULL, 0, &BufferLength);if (status != STATUS_INFO_LENGTH_MISMATCH) {return -1;}while (status == STATUS_INFO_LENGTH_MISMATCH) {ULONG StartBufferLength = BufferLength;    if (TypesInfo) {free(TypesInfo);TypesInfo = NULL;}TypesInfo = (POBJECT_TYPES_INFORMATION)malloc(StartBufferLength);memset(TypesInfo, 0, StartBufferLength);if (!TypesInfo) {return -1;}status = myNtQueryObject(NULL, ObjectTypesInformation, TypesInfo, StartBufferLength, &BufferLength);}POBJECT_TYPE_INFORMATION TypeInfoIterator = &TypesInfo->TypeInformation[0];for (LONG i = 0; i < TypesInfo->NumberOfTypes; i++) {std::wstring typeName;typeName.resize(TypeInfoIterator->TypeName.Length / sizeof(WCHAR));memcpy_s(&typeName[0], TypeInfoIterator->TypeName.Length, TypeInfoIterator->TypeName.Buffer, TypeInfoIterator->TypeName.Length);std::wcout << "TypeIdx=" << i << ", TypeName=" << typeName.c_str() << std::endl;// 注意:这里的结构在x64上必须按照8字节对齐TypeInfoIterator = (POBJECT_TYPE_INFORMATION)(PAD_8((ULONG_PTR)TypeInfoIterator->TypeName.Buffer + TypeInfoIterator->TypeName.MaximumLength));}free(TypesInfo);TypesInfo = NULL;system("pause");return 0;
}

运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.liansuoyi.cn/news/08443113.html

如若内容造成侵权/违法违规/事实不符,请联系连锁易网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

SIEM系列|一文读懂 Linux 日志安全分析之文件监控

摘自:https://zhuanlan.zhihu.com/p/259808863 背景介绍在Linux操作系统中,所有内容都是以文件的形式保存和管理的,包括普通文件、目录、网络通信资源等都是文件,即“一切皆文件”。基于这种机制,针对Linux系统层的攻击方式,本质上往往是通过各种方式,对某些敏感文件进行…

机密计算如何引领AI开发的安全未来

先进的AI模型比如机器学习和生成式AI为加速医疗研究、促进业务增长和协助打击犯罪等领域带来了巨大的潜力。但是若不正确使用,在数据用于训练和保护模型后这些模型可能带来重大风险。为应对这一挑战,2023年10月,美国拜登-哈里斯政府颁布了一项行政命令,旨在确保“AI的安全、…

Python中的循环

一、循环语句概念 是一种重复执行某段代码的结构,通常被用于遍历或处理一组数据,或者重复执行一些代码直到满足某个条件为止 Python 中的循环语句有 for 和 while。 Python 循环语句的控制结构图如下所示:二、while循环 Python 中 while 语句的一般形式: while 判断条件(cond…

ISCTF WEB

圣杯战争!!! 前置知识: 反序列化魔法函数:(以俩个下划线开头的方法称为魔法函数)__construct() 在创建对象时候初始化对象,一般用于对变量赋初值。创建一个新的类时,自动调用该方法__destruct() 和构造函数相反,当对象所在函数调用完毕后执行.即当一个类被销毁时自…

【HarmonyOS】模拟器一直停留在开机页面,无法进入桌面

​【关键字】模拟器,qemu-error.log,No sound driver【问题背景】 模拟器一直停留在开机页面,无法进入桌面 ​​【解决方案】 qemu-error.log中有以下报错 ​ 检查立体声混音是否打开,或者重新安装以下音卡驱动 ​ ​

2023-2024-1 20211327 myxxd(课上测试)

myxxd(课上测试) 学***d的使用,提交至少3个应用截图xxd的主要功能是什么?需要使用什么系统调用来实现?写出你的推导过程,命令 xxd 主要用于查看文件的十六进制表示,并提供了一些额外的功能,如生成C语言风格的数组表示。它的主要功能包括:查看文件的十六进制表示: 显示文…

每天使用Spring 框架,那你知道 lazy-init 懒加载原理吗?

懒加载是Spring框架中的一个重要特性,它允许我们将bean的实例化推迟到第一次使用时。懒加载的主要用途是提高应用程序的启动性能,减少不必要的资源消耗。 一、懒加载的用途 在大型的应用程序中,有些bean可能只在特定的条件下才会被使用到。如果在应用程序启动时就实例化所有…

读像火箭科学家一样思考笔记12_实践与测试(下)

测试与实践1. 舆论的火箭科学 1.1. 如果苹果违反了“即飞即测”原则,那苹果的iPhone就不会问世了 1.1.1. iPhone在其上市前的民意调查中相当失败 1.1.1.1. iPhone不可能获得太大市场份额,不可能。 1.1.1.1.1. 微软前CEO史蒂夫鲍尔默(Steve Ballmer) 1.1.2. iPhone并没有试图…

图形API和GPU光线追踪分析

图形API和GPU光线追踪分析 阐述目前市面上的几种流行图形API对光线追踪支持的现状和技术。 1 DirectX RayTracing(DXR) DirectX RayTracing(DXR)是DirectX 12引入的用以支持硬件光线追踪的图形API特性集。在最高级别,DXR为DirectX 12 API引入了四个新概念:加速结构是一个…

最终 Linux课后技术总结

第11章 yum管理器 yum管理器概述yum——Linux上的软件包管理器: 在Linux操作系统中,软件包管理器是一种用于安装、更新、升级和删除软件包的工具。其中,Yum是一种常用的软件包管理器,特别适用于基于RPM(Red Hat Package Manager)的Linux发行版。本文将深入介绍Yum的原理、…

k8s の Pod

一、k8s 中的资源和组件组件是为了支撑 k8s 平台的运行,而提前安装好的软件资源是如何去使用 k8s 能力的定义,比如 k8s使用 pod 去管理业务应用,那么 pod就是 k8s的一类资源。先要查看 k8s 下的所有的资源,可以使用如下命令 kubectl api-resourceskubectl api-resources -o…

下拉框为必录字段,要求下拉框隐藏时不触发校验规则。问题:隐藏时候总是触发校验规则

问题 下面是省份公司显示时候的页面展示:省份公司的下拉框隐藏时候,如页面所示,点击查询,还是有提醒文字 代码如下: <el-form-item prop="province"><el-select v-if="visibility.province" v-model="searchQuery.province" placeh…

springboot集成springsecurity

转载自:www.javaman.cn1、整合springsecurity 添加pom.xml <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId> </dependency>2、springsecurity认证授权流程认证管理流程图…

四、Docker 镜像

1. 什么是镜像 UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem…

如何一分钟内画好可视化图形

一、定类数据饼图描述:用形状类似“饼”的形态描述数据的占比,并且参与绘制的数值没有负值,比如想要直观的查看“月生活费各个板块的占比”。 操作:以SPSSAU为例,使用“频数分析”即可。示例:圆环图描述:圆环图显示各个部分与整体之间的关系,可以包含多个数据,比如想要…

wpf 封装 时间日期 双向绑定 输入框 控件

简单封装一个时间日期 输入框 DateTimePicker.xaml<UserControl x:Class="FullApp5DateTimePicker.Modules.ModuleName.Views.DateTimePicker"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microso…

arthas 热更新docker容器中的代码

1、将修改并编译好的class文件复制到docker容器中docker cp BasicController.class arthas-demo:/将文件BaseiController.class复制到arthas-demo容器根目录下 BaseiController.class:编译后的代码 arthas-demo:容器名2、进入容器,运行arthas 参见:地址 3、替换文件retrans…

制作交互式页面动画 | animate+javaweb

目前是做得这样的作业,有想法改一改。

若依系统单租户扩展为多租户的大体方案

基本方案将ruoyi-vue扩展为多租户,查看了下其生态中也有一些多租户的扩展,感觉都有些简单,不太完善,所以并没有采用。 多租户实现方式只用了最简单的表中添加字段标识tenant_id的方式来实现多租户,其他单独数据库、独立表等方式未涉及。 采用的mybatis-plus提供的多租户方…

三个对数值的大小比较 | 一题多解

三个对数值的大小比较,此题目比较经典。前言 典例剖析 比较 \(\log_23\) 和\(\log_34\) 和 \(\log_45\) 的大小比较; 分析:利用假分数的性质\(\cfrac{b}{a}>\cfrac{b+m}{a+m}\)(\(b>a\)) 和相关变形 \(\log_ab=\log_a{(a\times\cfrac{b}{a})}=1+\log_a{\cfrac{b}{a}}\…
推荐文章