본문 바로가기
Programming/System Programming

[Driver]프로세스/DLL로드 및 소멸 모니터링 프로그래밍

by Winduck 2017. 7. 6.
반응형

 

 


이번에는 유투브 강의를 통해 간단하게 배운 프로세스/DLL로드 및 소멸 모니터링하는 프로그램을 코딩해보았습니다.

개발하게 된 Driver는 PsSetCreateProcessNotifyRoutine와 PsRemoveLoadImageNotifyRoutine를 통하여 진행되었습니다.


우선, 프로세스 생성및 소멸에 관련된 정보를 얻기위해 다음의 함수를 사용합니다.


※ PsSetCreateProcessNotifyRoutine함수

 - Windows는 위 함수를 통하여 드라이버에 전달을 프로세스가 생성/소멸될때 SetCreateProcessNotifyRoutine가 CallBack Routine에 추가합니다.


NTSTATUS PsSetCreateProcessNotifyRoutine(
  _In_ PCREATE_PROCESS_NOTIFY_ROUTINE SetCreateProcessNotifyRoutine, // 프로세스 생성 및 소멸시 호출되는 CallBack Routine
  _In_ BOOLEAN                        Remove // 1: 콜백루틴에서 제거 / 0 : 콜백루틴에 추가 
);


프로세스 생성및 종료시 실행되는 SetCreateProcessNotifyRoutine함수는 다음의 구조를 가집니다.


void SetCreateProcessNotifyRoutine(
  _In_ HANDLE  ParentId, // 부모 프로세스 pid
  _In_ HANDLE  ProcessId, // 현재프로세스 pid
  _In_ BOOLEAN Create // 1:프로세스 생성중 /  0 일때 프로세스 종료중
)
{ ... } 



 
※PsRemoveLoadImageNotifyRoutine
- 드라이버나 DLL의 로드또는 언로드시마다 SetLoadImageNotifyRoutine 가 호출되도록 CallBack루틴에 추가합니다.

NTSTATUS PsRemoveLoadImageNotifyRoutine(
  _In_ PLOAD_IMAGE_NOTIFY_ROUTINE SetLoadImageNotifyRoutine // 호출되는 CallBack루틴
);


드라이버나 DLL의 로드또는 언로드시호출되는 SetLoadImageNotifyRoutine는 다음의 구조를 갖습니다.


void SetLoadImageNotifyRoutine(
  _In_opt_ PUNICODE_STRING FullImageName, // 로드되는 모듈 FullName
  _In_     HANDLE          ProcessId, //프로세스 pid
  _In_     PIMAGE_INFO     ImageInfo //DLL 또는 드라이버의 정보를 담고있다.
)
{ ... }


위 두함수를 통하여 구현해보았습니다. 다음은 구현화면입니다.


 

< 참조 : https://www.youtube.com/watch?v=aaTLMRu1R0A&list=PLpdy68VBRKQrRx0DBi1GViqr5RwCyEH-X&index=3 >

반응형

댓글