CreateMutex
까보면 다나와~

NtQuerySystemInformation (SystemModuleInformation) 정보

먼저 NtQuerySystemInformation은 첫번째 인자인 SystemInformationClass를 참조하여 어떤 정보를 보여줄 것인지 판단하고 두번째 인자인 SystemInformation 버퍼를 통해 결과를 보여준다.

(또 NtQuerySystemInformation은 두번의 호출로 값을 얻어오기도 하는데 방식은 4번째 인자가 있고 없고의 차이가 있다. 있으면 Information 크기를 얻어오고, 없으면 Information 크기로 값을 얻어오는 것 같다. 더 확인이 필요함....그러니깐 4번쩌 인자가 들어갔을 때 그 크기를 구해오는 거고 크기를 바탕으로 다시한번 함수를 호출하는 방식으로 정보를 얻는 것..)


NtQuerySystemInformation으로 SystemModuleInformation정보를 얻고자 할 때, 로드되는 메모리 구조는 다음과 같다.



typedef struct _SYSTEM_MODULE_INFORMATION {

  ULONG                ModulesCount; 0000006f

  SYSTEM_MODULE        Modules[0];

} SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;

 

typedef struct _SYSTEM_MODULE { 

 ULONG Reserved[2];     00000000 00000000

 PVOID Base;                 804d9000

 ULONG Size;                 001f8c80

 ULONG Flags;                0c004000

 USHORT Index;              0000

 USHORT Unknown;        0000

 USHORT LoadCount;      0001

 USHORT ModuleNameOffset; 0012

 CHAR ImageName[256];

} SYSTEM_MODULE , *PSYSTEM_MODULE 


위의 이미지를 예로 들면 ntkrnlpa.exe의 IMG_BASE는 '804d9000'이 되겠다.

활용하자면 NtQuerySystemInformation의 SYSTEM_MODULE_INFORMATION으로 로드된 모듈과 img base, 또는 로드된 모듈 개수, 또는 커널 이미지 정보를 확인 가능하다.


  Comments,     Trackbacks