티스토리 뷰

728x90
반응형

[Reversing] ZwQuerySystemInformation(), ZwDuplicateObject(), ZwQueryObject()


분석 중 해당 API에 대해 정리가 필요해 작성한다.

NtQuerySystemInformation() API을 보게되면 첫번째 멤버는 System_Information_class로 인자값에 대한 시스템 정보를 보여준다. (그림 1)의 해당 API의 스택에 쌓인 인자를 보게되면 “10”을 가지고 있으며, SystemHandleInformation로 시스템 핸들의 정보를 원하는 것을 확인 할 수 있다. 

[https://www.geoffchappell.com/studies/windows/km/ntoskrnl/api/ex/sysinfo/query.htm]

이후 진행 시 ZwDuplicateObject API을 보게되면 커널에 요청해 핸들을 가지고와 복사하는 것을 (그림 1)에서 확인 할 수 있다. 

다음으로 ZwQueryObject() API을 이용하여 위에서 얻은 객체의 핸들을 통해 커널의 객체 타입에 대한 정보를 얻어오는 것을 확인 할 수 있다. 두번째 멤버의 인자값 “2”, ”1”에 따라 정보를 얻을 수 있다.

(그림 1)

 

// ZwQueryObject를 통한 Kernel Object의 Type  

typedef INT TYPE_KERNEL_OBJECT;  

#define     TYPE_KERNEL_OBJECT_UNKNOWN                  0  

#define     TYPE_KERNEL_OBJECT_TYPE                     1  

#define     TYPE_KERNEL_OBJECT_DIRECTORY                2  

#define     TYPE_KERNEL_OBJECT_SYMBOLICLINK             3  

#define     TYPE_KERNEL_OBJECT_TOKEN                    4  

#define     TYPE_KERNEL_OBJECT_PROCESS                  5  

#define     TYPE_KERNEL_OBJECT_THREAD                   6  

#define     TYPE_KERNEL_OBJECT_JOB                      7  

#define     TYPE_KERNEL_OBJECT_DEBUGOBJECT              8  

#define     TYPE_KERNEL_OBJECT_EVENT                    9  

#define     TYPE_KERNEL_OBJECT_EVENTPAIR                10  

#define     TYPE_KERNEL_OBJECT_MUTANT                   11  

#define     TYPE_KERNEL_OBJECT_CALLBACK                 12  

#define     TYPE_KERNEL_OBJECT_SEMAPHORE                13 

#define     TYPE_KERNEL_OBJECT_TIMER                    14  

#define     TYPE_KERNEL_OBJECT_PROFILE                  15  

#define     TYPE_KERNEL_OBJECT_KEYEDEVENT               16

#define     TYPE_KERNEL_OBJECT_WINDOWSTATION            17  

#define     TYPE_KERNEL_OBJECT_DESKTOP                  18  

#define     TYPE_KERNEL_OBJECT_SECTION                  19  

#define     TYPE_KERNEL_OBJECT_KEY                      20  

#define     TYPE_KERNEL_OBJECT_PORT                     21  

#define     TYPE_KERNEL_OBJECT_WAITABLEPORT             22  

#define     TYPE_KERNEL_OBJECT_ADAPTER                  23  

#define     TYPE_KERNEL_OBJECT_CONTROLLER               24  

#define     TYPE_KERNEL_OBJECT_DEVICE                   25  

#define     TYPE_KERNEL_OBJECT_DRIVER                   26  

#define     TYPE_KERNEL_OBJECT_IOCOMPLETION             27  

#define     TYPE_KERNEL_OBJECT_FILE                     28  

#define     TYPE_KERNEL_OBJECT_WMIGUID                  29  

#define     TYPE_KERNEL_OBJECT_FILTERCONNECTIONPORT     30  

#define     TYPE_KERNEL_OBJECT_FILTERCOMMUNICATIONPORT  31  

#define     TYPE_KERNEL_OBJECT_OTHER                    32   


 


728x90
반응형
댓글
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today