심플스 - 프로그램과 책 이야기로 가득한 곳, (Simples.Kr)

  

커널 모듈 리스트 가져오기

Windows Research 조회 수 9447 추천 수 0 2010.09.03 17:28:16
 

루트킷 체크 프로그램인 gmer에 Modules탭에 보면은 현재 로드 된 커널 모듈을 볼 수 있습니다.
회사에서 작업을 하다가 해당 기능이 좀 필요해서 간단하게 인터넷 뒤져서 짜집기한 코드입니다.
( OpenRCE랑 Undocumented 사이트 참고하였습니다. )

컴파일을 하실려면 ntdll.lib이 필요한데 해당 lib파일은 WDK에 있습니다.

#include <Windows.h>

#define NT_SUCCESS(Status) (((NTSTATUS)(Status)) >= 0)
#define STATUS_INFO_LENGTH_MISMATCH ((NTSTATUS)0xC0000004L)

typedef enum _SYSTEM_INFORMATION_CLASS
{
    SystemBasicInformation,
    SystemProcessorInformation,
    SystemPerformanceInformation,
    SystemTimeOfDayInformation,
    SystemPathInformation,
    SystemProcessInformation,
    SystemCallCountInformation,
    SystemDeviceInformation,
    SystemProcessorPerformanceInformation,
    SystemFlagsInformation,
    SystemCallTimeInformation,
    SystemModuleInformation,
    SystemLocksInformation,
    SystemStackTraceInformation,
    SystemPagedPoolInformation,
    SystemNonPagedPoolInformation,
    SystemHandleInformation,
    SystemObjectInformation,
    SystemPageFileInformation,
    SystemVdmInstemulInformation,
    SystemVdmBopInformation,
    SystemFileCacheInformation,
    SystemPoolTagInformation,
    SystemInterruptInformation,
    SystemDpcBehaviorInformation,
    SystemFullMemoryInformation,
    SystemLoadGdiDriverInformation,
    SystemUnloadGdiDriverInformation,
    SystemTimeAdjustmentInformation,
    SystemSummaryMemoryInformation,
    SystemNextEventIdInformation,
    SystemEventIdsInformation,
    SystemCrashDumpInformation,
    SystemExceptionInformation,
    SystemCrashDumpStateInformation,
    SystemKernelDebuggerInformation,
    SystemContextSwitchInformation,
    SystemRegistryQuotaInformation,
    SystemExtendServiceTableInformation,
    SystemPrioritySeperation,
    SystemPlugPlayBusInformation,
    SystemDockInformation,
    SystemPowerInformationRedefine, // 이름이 중복되어서 변경하였습니다.
    SystemProcessorSpeedInformation,
    SystemCurrentTimeZoneInformation,
    SystemLookasideInformation
} SYSTEM_INFORMATION_CLASS, *PSYSTEM_INFORMATION_CLASS;


extern "C" NTSYSAPI NTSTATUS NTAPI NtQuerySystemInformation(
    IN SYSTEM_INFORMATION_CLASS SystemInformationClass,
    OUT PVOID SystemInformation,
    IN ULONG SystemInformationLength,
    OUT PULONG ReturnLength OPTIONAL);

typedef struct _RTL_PROCESS_MODULE_INFORMATION {
    HANDLE Section;
    PVOID MappedBase;
    PVOID ImageBase;
    ULONG ImageSize;
    ULONG Flags;
    USHORT LoadOrderIndex;
    USHORT InitOrderIndex;
    USHORT LoadCount;
    USHORT OffsetToFileName;
    CHAR FullPathName[256];
} RTL_PROCESS_MODULE_INFORMATION, *PRTL_PROCESS_MODULE_INFORMATION;

typedef struct _RTL_PROCESS_MODULES {
    ULONG NumberOfModules;
    RTL_PROCESS_MODULE_INFORMATION Modules[1];
} RTL_PROCESS_MODULES, *PRTL_PROCESS_MODULES;

BOOL PrintSystemModuleList()
{
    NTSTATUS Status;
    PRTL_PROCESS_MODULES ModuleInfo;
    PRTL_PROCESS_MODULE_INFORMATION ModuleEntry;
    ULONG ReturnedLength;
    ULONG i;

    Status = NtQuerySystemInformation(SystemModuleInformation,
                                      NULL,
                                      0,
                                      &ReturnedLength);
    if (Status != STATUS_INFO_LENGTH_MISMATCH)
    {
        return FALSE;
    }

    ModuleInfo = (PRTL_PROCESS_MODULES)malloc(ReturnedLength);

    Status = NtQuerySystemInformation(SystemModuleInformation,
                                      ModuleInfo,
                                      ReturnedLength,
                                      &ReturnedLength);
    if (!NT_SUCCESS(Status))
    {
        free(ModuleInfo);

        return NULL;
    }


    for (i = 0; i < ModuleInfo->NumberOfModules; i++)
    {
        ModuleEntry = &ModuleInfo->Modules[i];
       
        printf("%s\n", ModuleEntry->FullPathName);
    }
    free(ModuleInfo);

    return TRUE;
}


int _tmain(int argc, _TCHAR* argv[])
{
    PrintSystemModuleList();

    return 0;

}


profile

마플

2010.11.04 10:29:57

안녕하세요 ^^^;;;

까먹고 있다 이제 글 올립니다.

 

올려주신 글을 보고 아주아주 조금 수정한 소스를 제 블로그에 올려놨습니다.

http://kese111.tistory.com/entry/ZwQuerySystemInformation-을-사용한-System-Module-List-구하기

 

소스 공개해주신걸로 믿고 허락안받고 퍼간게 맘에 걸렸는데, 이제야왔네요.

 

감사합니다.

profile

esniper

2010.11.04 13:50:41

네 참고하여 소스를 수정한 경우에 이렇게 댓글을 남겨주셔도 되지만 더 깔끔한 방법은 상단에 표기를 같이 해주시는 것입니다.

예를들어 지금은 이렇게 되어있는데요. 현재 마플이라는 이름의 상단에 출처를 밝혀주신 후에 modify한 날짜와 본인의 이름을 명시하는 것이 좋습니다.

그리고 변경된 것을 이렇게 원저작자에게 알려주면 이상적인 경우가 되겠네요 ^^

참고하셔서 앞으로도 좋은 자료 많이 만드시길 바랍니다.


=================================================================

// ---  Get System Module List with ZwQuerySystemInformation

//  --- * 2010/10/27 * 

 

//  --- 마플 

//  --- http://kese111.tistory.com 

 

#include <ntddk.h>


코드 내용들....

.

.


참고자료 

http://simples.kr/?mid=ITTalk&page=2&document_srl=19838

=================================================================

profile

마플

2010.11.07 17:46:06

바로 반영하겠습니다 ^^;

List of Articles
번호 제목 글쓴이 날짜 조회 수
163 Linux Tip 리눅스 기반 오픈 소스 사이트 모음 삽질신 2009-11-16 70763
162 Linux Tip VirtualBox에 우분투 설치 후에 내부 네트워크 접속 설정하기 file esniper 2010-09-10 35186
161 Windows Research IE Cache 경로 변경하기 lain 2011-06-09 30674
160 Windows Research VMWare 탐지 기법 우회 - 2 [2] lain 2011-04-04 28693
159 Windows Research 화면캡쳐방지는 어떻게 구현될까? [3] lain 2010-09-04 28475
158 PHP Tip php 파싱 라이브러리 - snoopy esniper 2009-03-26 20618
157 Linux Tip Directory index forbidden by Options directive 삽질신 2009-11-16 20150
156 Linux Tip VirtualBox에서 오른쪽 CTRL키 사용하기(VitualBox 호스트키) file [2] esniper 2010-09-10 19566
155 Windows Tip SSH 터널링 - putty의 plink 사용예 esniper 2009-03-26 19459
154 문서자료 고품질의 무료 아이콘들 [3] esniper 2010-09-08 19345
153 문서자료 json 문법 체크 사이트 Lyn 2012-02-28 18774
152 PHP Tip mysql_insert_id() - 마지막 insert 된 아이디 값 esniper 2009-03-26 18310
151 Linux Tip 우분투 설치 후 putty에서 한글 안 깨지도록 설정하기 file esniper 2010-09-10 17014
150 Linux Tip 우분투 ssh or mysql 서버 접속지연이 있는 경우 해결책 esniper 2010-09-10 16389
149 Windows Research 커널레벨에서 IAT Hook lain 2011-06-11 16379
148 Linux Tip 우분투에 IRC서버 설치후 닉네임 길이와 동접자 조절. [1] 오랑캐꽃 2010-11-26 15960
147 Windows Research 유저 레벨에서 API Hook 1부 file [1] lain 2010-09-03 15710
146 Windows Research SetEvent 함수는 언제 실패할까? lain 2010-09-04 15686
145 Windows Research Sysinternals - Filemon source code file [5] lain 2010-09-04 15376
144 Windows Research Sysinternals - Regmon source code file [1] lain 2010-09-04 14937

  • 이용약관
  • 개인정보취급방침
  • 사이트맵