삽이 부서질 때까지 삽질

mini filter driver 스터디 - 디버깅 메세지 출력 및 파일 필터 본문

driver

mini filter driver 스터디 - 디버깅 메세지 출력 및 파일 필터

xinfo 2017. 9. 24. 21:18

1. mini filter driver 스터디 - 미니 필터 드라이버 생성 및 기본 개념


이 글에선 1번 글을 다 읽고, 이해했다는 전제하에 진행이 됩니다.

windbg 명령어 설명 및 프로젝트 생성과 같은 중복된 작업은 전부 제외합니다.

위 글을 읽고 모르시면 덧글 또는 메일을 남겨주세요.

메일이 훨씬 빠르게 답변 할거에요.



두번째 시작.


https://github.com/xinfolab/mini-filter-driver-study


자료는 git에서 받고, print_study 프로젝트를 보시면 됩니다.


이번엔 windbg에 로그를 찍는 것과 특정 파일을 열기를 시도했을 때 막는 미니 필터 드라이버를 제작해보겠습니다.

프로젝트 생성과 기타 등등은 전부 패스하고,



미니 필터 드라이버에선 main 함수가 DriverEntry 입니다.

그리고 이번에 살펴볼 FilterRegistration 입니다.

F12 를 눌러서 따라 들어가 보겠습니다.



그러면 위와 같은 구조체가 나오는데요.

전부 의미가 있지만...

Callbacks 부분으로 가겠습니다.

다시 F12




git에서 다운이 아닌 프로젝트를 새롭게 생성하셨으면 전부 if 0 범위 안에 들어가 있을 겁니다.

IRP를 하나도 사용하지 않게 설정이 되어 있는거죠.


저는 IRP_MJ_CREATE, IRP_MJ_CLOSE, IRP_MJ_CLEANUP 을 활성화 시켜놨습니다.

자세히 보시면 printstudyPreOperation, printstudyPostOperation 이라고 되어 있습니다.


PreOperation : IRP 가 수행 되기 전에 해당 함수가 실행됩니다.

PostOperation : IRP 가 수행 된 후에 해당 함수가 실행됩니다.

IRP_MJ_CREATE 에 대한 MSDN을 보면

https://msdn.microsoft.com/ko-kr/library/windows/hardware/ff548630(v=vs.85).aspx


The I/O Manager sends the IRP_MJ_CREATE request when a new file or directory is being created, or when an existing file, device, directory, or volume is being opened. 


이라고 되어 있습니다. 해석해보면 새로운 파일, 디렉토리를 생성하거나 존재한 파일이나 장치, 디렉토리 볼륨 등이 열렸을 때 해당 IRP가 발생한다. 라고 되어 있는거 같네요.

[맞겠지..? ㅋ]



IRP_MJ_CREATE의 printstudyPreOperation 을 따라 들어가보면 위와 같은 코드를 볼 수 있습니다.

드라이버를 처음 보시는 분들은 매우 복잡해 보이겠지만, 정말 간단 합니다.


FltParseFileNameInformation 함수가 FileNameInfo 의 글자를 파싱합니다. 그리고 txt_file 변수에 ".txt" 문자열을 넣고 FileNameInfo의 Name 변수와 txt_file 변수를 비교합니다.

해당 IRP를 보낸 파일이 .txt 확장자를 가지면  STATUS_ACCESS_DENIED 를 보냅니다.

즉, 접근을 못하게 막는 겁니다.



guest에 설치하여 .txt 를 열어보면 아래와 같이 뜨는겁니다.







windbg는...



어휴 눈 돌아간다...


Comments