我看到NtQueryObject挂起了具有这些授权访问值的重复句柄(handle.GrantedAccess
是ACCESS_MASK类型):
1179785 (integer) --> 0b100100000000010001001 (binary)
1180063 (integer) --> 0b100100000000110011111 (binary)
1180041 (integer) --> 0b100100000000110001001 (binary)
2032127 (integer) --> 0b111110000000111111111 (binary)
||||||| | |
||||||| | |
||||||| | |
^^^^^^^ ^ ^
Possible culprit bits seem to be 3rd and 7th bit, but could also be 9th to 15th bit.
总是,handle.ObjectTypeNumber
是30.这个对象类型编号是什么,如何获得此类型的特定权限列表?我的实验有点显示它必须是0-15位,导致此对象类型数为30(整数)的挂起。 handle
是SYSTEM_HANDLE类型,定义为:
typedef struct _SYSTEM_HANDLE
{
ULONG ProcessId;
BYTE ObjectTypeNumber;
BYTE Flags;
USHORT Handle;
PVOID Object;
ACCESS_MASK GrantedAccess;
} SYSTEM_HANDLE, *PSYSTEM_HANDLE;
我正在编写一个取证工具,使用here描述的方法枚举所有打开的文件句柄。
答案 0 :(得分:5)
我有点晚了,但如果您只对基于磁盘的文件感兴趣,可以这样做:
if(GetFileType(handle) == FILE_TYPE_DISK) {
...
}
挂起通常发生在非磁盘文件(例如管道)上。使用这种技术,您根本不需要担心handle.GrantedAccess。