如何枚举一个进程或系统中的 内核对象已知一个命名内核对象的句柄,如何获得他的名称搜了半天 连点沾边的文章也看不到,以至于我怀疑是不是根本没有方法处理以上2个问题,忘高手不要吝啬,指点1 2
比如 CreateEvent(.... ,"abc");如何枚举到这个事件对象? 或者知道这个事件对象的句柄如何获得他的名字?

解决方案 »

  1.   

    呵呵,这个windows核心编程中有源码,在一个网站上,楼主自己找书看下网址
      

  2.   

    这问题太偏,太深了,还是去查windows核心编程,再下去你可以去看看,驱动啊,汇编啊,UNIX系统源代码啊。
      

  3.   

    这个还要真正的对windows有所了解,他好像没公开这样的函数,那只能你自己去找了,要看windows放在哪里了。
      

  4.   

    查查MSDN的findwindowex函数,传入父句柄,搜索子句柄HWND FindWindowEx(          HWND hwndParent,
        HWND hwndChildAfter,
        LPCTSTR lpszClass,
        LPCTSTR lpszWindow
    );
      

  5.   

    剖析Windows NT/2000内核对象组织请仔细看看,不懂就Google之
      

  6.   

    你的意思是获得内核Object咯?至于怀疑就不用怀疑了。你讲得出,内核就做得到
      

  7.   

    学到不少,代码到简单,他确定内核对象是从 0x8148e210 地址开始的,对于现在的尤其是我这样的64位 WIN7 肯定变了,不过对内核对象的理解更深了
    兔哥猛啊,先跟屁股后面混吧,希望在有生之年赶上  困难吗?复杂吗? 是驱动级编程能实现还是应用层就能实现? 太过复杂的话我还是先知难而退吧,其实我就是想弄QQ大厅多开,当然实现方法很多,我想用这样狠的方法,发现QQ建立的互斥对象,直接把它干掉。。不难的话讲解一下吧,我另开贴给你多加3分。
      

  8.   

    这玩意不太简单了么,还超级难
         // 枚举已经打开的句柄,取其名称
         HMODULE hNtDll = NULL; // nt.dll句柄
         ZWQUERYSYSTEMINFORMATION ZwQuerySystemInformation = NULL;
         NTQUERYOBJECT NtQueryObject = NULL;
         SYSTEM_HANDLE_INFORMATION *hInfo = NULL;
         int nNumHandle = 0, i;      // 句柄数量
         NTSTATUS Status;
         ULONG nSize, nCount;
         char cBuffer[0x40000], cInfoBuffer[0x1000];
         OBJECT_ALL_INFORMATION *pInfo;
         OBJECT_NAME_INFORMATION* pName;
         DWORD nId = GetProcessId(hProcess);
         // 取导出函数
        hNtDll = GetModuleHandle( "ntdll.dll" );
        ZwQuerySystemInformation = ( ZWQUERYSYSTEMINFORMATION )GetProcAddress( hNtDll, "ZwQuerySystemInformation" );
        NtQueryObject = ( NTQUERYOBJECT )GetProcAddress( hNtDll, "NtQueryObject" );     // 查询句柄信息
         Status = ZwQuerySystemInformation(SystemHandleInformation,
             cBuffer,
             0x40000,
             &nSize);     if(NT_SUCCESS(Status))
         {
             nNumHandle = *(PULONG)cBuffer;
             hInfo = (SYSTEM_HANDLE_INFORMATION*)(cBuffer + 4);
             nCount = 0;
             for(i = 0; i < nNumHandle; i++)
             {
                  if(hInfo[i].ProcessId != nId) continue;
                  Status = NtQueryObject(hInfo[i].Handle, ObjectAllInformation, cInfoBuffer, 0x1000, &nSize);
                  if(NT_SUCCESS(Status))
                  {
                       pInfo = (OBJECT_ALL_INFORMATION*)cInfoBuffer;
                       nCount++;
    ……………………….
                  }
             }
         }
    你会发现打印出来的是个OBJECT_ALL_INFORMATION对象的列表,
    typedef struct _OBJECT_ALL_INFORMATION {
      ULONG                   NumberOfObjectsTypes;
      OBJECT_TYPE_INFORMATION ObjectTypeInformation[1];} OBJECT_ALL_INFORMATION, *POBJECT_ALL_INFORMATION;
    当ObjectTypeInformation里面有TypeName:Event就在其中至于修改么,也简单啊~~ NtSetInformationObject啊
      

  9.   


    就是干互斥对象啊Easy Easy
    你R3下就够了,ProcessExplorer就能干互斥对象。方法也是先ZwQuerySystemInformation,然后得Mutex句柄,然后注入进去CloseHandle
      

  10.   

    看了2遍半  基本上看懂了, 不算难理解,但你要知道难者不会会者不难嘛~  那个超高当然是对我说的。举手提问: if(hInfo[i].ProcessId != nId) continue;是判断 这个内核对象是否属于指定进程吧,这里有点疑问,hInfo[i].ProcessId 是创建此对象的进程ID 还是使用此对象的进程ID,如果是后者,那么进程ID应该不止一个啊,
    莫非 hInfo[i].Handle  不同i之间有可能一样? 不知道我理解有问题没
      

  11.   

    请下载观之~http://download.csdn.net/source/1252213
      

  12.   

    不好意思,我发错了
    是这个http://download.csdn.net/source/1003887
      

  13.   

    typedef struct _SYSTEM_HANDLE_INFORMATION { // Information Class 16
    ULONG ProcessId;
    UCHAR ObjectTypeNumber;
    UCHAR Flags;  // 0x01 = PROTECT_FROM_CLOSE, 0x02 = INHERIT
    USHORT Handle;
    PVOID Object;
    ACCESS_MASK GrantedAccess;
    } SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;
    Members

    ProcessId
    The process identifier of the owner of the handle.
    ObjectTypeNumber
    A number which identifies the type of object to which the handle refers.The number
    can be translated to a name by using the information returned by ZwQueryObject.
    Flags
    A bit array of flags that specify properties of the handle.
    Handle
    The numeric value of the handle.
    Object
    The address of the kernel object to which the handle refers.
      

  14.   

    一个Handle有一个hInfo,还要说得更明白么?
      

  15.   


    我有鸭梨请你吃。莫非 hInfo[i].Handle  不同i之间有可能一样?   应该是 hInfo[i].Object 不同i之间有可能不一样对吧呵呵   万分感谢。。 
      

  16.   

    QQ游戏大厅多开, 以前玩过这个, 那时他们建立了一个 名为"QQGame_Mutex03/01/2003"的Mutex对象, 不知道现在有没有变过, LZ可以在CreateMutex 那里设个断点调试下
      

  17.   

    CSDN这趟水深得很,我在申请进程版块版主之前,已经把Undocument APIs全部都看过一遍,MSDN上A-Z的API也都背过一遍。不然难以服众和立足啊。
      

  18.   

    我不要鸭梨,只要分。你不介意的话,可以加分结贴。Handle是Object对应的句柄计数,一样不一样,看你的Handle对应什么Object了,Object就是内核对象,不同i可能一样,当然。
      

  19.   

    该帖已达到分数最大值,不允许加分操作。  看 我是新手哦,你那么多分就别剥削我的分了,虽然答应多给你3分,可你那么多分了应该也不会要对吧。果然不是简单的地方,第一次遇到我找不到头文件的情况查了一下 
    The NTSTATUS type is defined in Ntdef.h, and system-supplied status codes are defined in Ntstatus.h需要2个头文件我是VS2008 SP1 并且是全部安装 竟然找不到Ntdef.h 想下载一个还那么困难 终于找到一个 竟然是#ifndef __INCLUDE_DDK_NTDEF_H
    #define __INCLUDE_DDK_NTDEF_Hstruct _KTHREAD;
    struct _ETHREAD;
    struct _EPROCESS;#define NTKERNELAPI
    #define NTSYSAPI
    #define NTAPI
    #endif
    根本没有我要的  兔哥在哪个头文件里定义的这些东西啊?
      

  20.   

    自己定义的话就
    #define STATUS_SUCCESS 0
    typedef LONG KPRIORITY;
    typedef struct _UNICODE_STRING {
    USHORT Length;//在缓冲区存放的数据的长度
    USHORT MaximumLength;//缓冲区的最大长度
    PWSTR Buffer;//缓冲区的地址
    } UNICODE_STRING, *PUNICODE_STRING;//系统信息的分类
    typedef enum _SYSTEM_INFORMATION_CLASS {
    SystemBasicInformation, // 0 Y N
    SystemProcessorInformation, // 1 Y N
    SystemPerformanceInformation, // 2 Y N
    SystemTimeOfDayInformation, // 3 Y N
    SystemNotImplemented1, // 4 Y N
    SystemProcessesAndThreadsInformation, // 5 Y N
    SystemCallCounts, // 6 Y N
    SystemConfigurationInformation, // 7 Y N
    SystemProcessorTimes, // 8 Y N
    SystemGlobalFlag, // 9 Y Y
    SystemNotImplemented2, // 10 Y N
    SystemModuleInformation, // 11 Y N
    SystemLockInformation, // 12 Y N
    SystemNotImplemented3, // 13 Y N
    SystemNotImplemented4, // 14 Y N
    SystemNotImplemented5, // 15 Y N
    SystemHandleInformation, // 16 Y N
    SystemObjectInformation, // 17 Y N
    SystemPagefileInformation, // 18 Y N
    SystemInstructionEmulationCounts, // 19 Y N
    SystemInvalidInfoClass1, // 20
    SystemCacheInformation, // 21 Y Y
    SystemPoolTagInformation, // 22 Y N
    SystemProcessorStatistics, // 23 Y N
    SystemDpcInformation, // 24 Y Y
    SystemNotImplemented6, // 25 Y N
    SystemLoadImage, // 26 N Y
    SystemUnloadImage, // 27 N Y
    SystemTimeAdjustment, // 28 Y Y
    SystemNotImplemented7, // 29 Y N
    SystemNotImplemented8, // 30 Y N
    SystemNotImplemented9, // 31 Y N
    SystemCrashDumpInformation, // 32 Y N
    SystemExceptionInformation, // 33 Y N
    SystemCrashDumpStateInformation, // 34 Y Y/N
    SystemKernelDebuggerInformation, // 35 Y N
    SystemContextSwitchInformation, // 36 Y N
    SystemRegistryQuotaInformation, // 37 Y Y
    SystemLoadAndCallImage, // 38 N Y
    SystemPrioritySeparation, // 39 N Y
    SystemNotImplemented10, // 40 Y N
    SystemNotImplemented11, // 41 Y N
    SystemInvalidInfoClass2, // 42
    SystemInvalidInfoClass3, // 43
    SystemTimeZoneInformation, // 44 Y N
    SystemLookasideInformation, // 45 Y N
    SystemSetTimeSlipEvent, // 46 N Y
    SystemCreateSession, // 47 N Y
    SystemDeleteSession, // 48 N Y
    SystemInvalidInfoClass4, // 49
    SystemRangeStartInformation, // 50 Y N
    SystemVerifierInformation, // 51 Y Y
    SystemAddVerifier, // 52 N Y
    SystemSessionProcessesInformation // 53 Y N
    }SYSTEM_INFORMATION_CLASS, *PSYSTEM_INFORMATION_CLASS;typedef struct _VM_COUNTERS {
    ULONG PeakVirtualSize; //虚拟存储峰值大小;
    ULONG VirtualSize; //虚拟存储大小;
    ULONG PageFaultCount; //页故障数目;
    ULONG PeakWorkingSetSize; //工作集峰值大小;
    ULONG WorkingSetSize; //工作集大小;
    ULONG QuotaPeakPagedPoolUsage; //分页池使用配额峰值;
    ULONG QuotaPagedPoolUsage; //分页池使用配额;
    ULONG QuotaPeakNonPagedPoolUsage; //非分页池使用配额峰值;
    ULONG QuotaNonPagedPoolUsage; //非分页池使用配额;
    ULONG PagefileUsage;//页文件使用情况;
    ULONG PeakPagefileUsage;//页文件使用峰值;
    }VM_COUNTERS,*PVM_COUNTERS;typedef struct _IO_COUNTERS
    {
    LARGE_INTEGER ReadOperationCount; //I/O读操作数目;
    LARGE_INTEGER WriteOperationCount; //I/O写操作数目;
    LARGE_INTEGER OtherOperationCount; //I/O其他操作数目;
    LARGE_INTEGER ReadTransferCount;//I/O读数据数目;
    LARGE_INTEGER WriteTransferCount; //I/O写数据数目;
    LARGE_INTEGER OtherTransferCount; //I/O其他操作数据数目;
    }IO_COUNTERS,*PIO_COUNTERS;
    typedef struct _CLIENT_ID
    {
    HANDLE UniqueProcess;
    HANDLE UniqueThread;
    }CLIENT_ID;typedef enum _THREAD_STATE
    {
    StateInitialized,
    StateReady,
    StateRunning,
    StateStandby,
    StateTerminated,
    StateWait,
    StateTransition,
    StateUnknown
    }THREAD_STATE;typedef enum _KWAIT_REASON {
    Executive,
    FreePage,
    PageIn,
    PoolAllocation,
    DelayExecution,
    Suspended,
    UserRequest,
    WrExecutive,
    WrFreePage,
    WrPageIn,
    WrPoolAllocation,
    WrDelayExecution,
    WrSuspended,
    WrUserRequest,
    WrEventPair,
    WrQueue,
    WrLpcReceive,
    WrLpcReply,
    WrVirtualMemory,
    WrPageOut,
    WrRendezvous,
    Spare2,
    Spare3,
    Spare4,
    Spare5,
    Spare6,
    WrKernel
    } KWAIT_REASON;typedef struct _SYSTEM_THREADS
    {
    LARGE_INTEGER KernelTime;
    LARGE_INTEGER UserTime;
    LARGE_INTEGER CreateTime;
    ULONG WaitTime;
    PVOID StartAddress;
    CLIENT_ID ClientId;
    KPRIORITY Priority;
    KPRIORITY BasePriority;
    ULONG ContextSwitchCount;
    THREAD_STATE State;
    KWAIT_REASON WaitReason;
    }SYSTEM_THREADS,*PSYSTEM_THREADS;typedef struct _SYSTEM_PROCESSES
    {
    ULONG NextEntryDelta; //构成结构序列的偏移量;
    ULONG ThreadCount; //线程数目;
    ULONG Reserved1[6];
    LARGE_INTEGER CreateTime; //创建时间;
    LARGE_INTEGER UserTime;//用户模式(Ring 3)的CPU时间;
    LARGE_INTEGER KernelTime; //内核模式(Ring 0)的CPU时间;
    UNICODE_STRING ProcessName; //进程名称;
    KPRIORITY BasePriority;//进程优先权;
    ULONG ProcessId; //进程标识符;
    ULONG InheritedFromProcessId; //父进程的标识符;
    ULONG HandleCount; //句柄数目;
    ULONG Reserved2[2];
    VM_COUNTERS VmCounters; //虚拟存储器的结构,见下;
    IO_COUNTERS IoCounters; //IO计数结构,见下;
    SYSTEM_THREADS Threads[1]; //进程相关线程的结构数组,见下;
    }SYSTEM_PROCESSES,*PSYSTEM_PROCESSES;typedef LONG NTSTATUS;typedef NTSTATUS ( __stdcall *ZWQUERYSYSTEMINFORMATION )
                      ( SYSTEM_INFORMATION_CLASS SystemInformationClass,
                        IN OUT PVOID SystemInformation,
                        IN ULONG SystemInformationLength,
                        OUT PULONG ReturnLength OPTIONAL );查MSDN 查什么也没发现这些东西到底是在哪由谁来定义的