드라이버 개발 시작

2015. 11. 1. 12:44Security ★ Development/Windows Driver

반응형

 이번에 루트킷을 하면서 드라이버 프로그래밍을 하게 되었습니다.  지난번에 NDIS, WFP 관련해서 개발 포스팅을 했었는데 네트워크 드라이버가 아닌 드라이버의 경우 어떻게 시작해야되는지에 대해 정리해보려합니다.  환경 구축은 이전 글을 참고하시면됩니다.


 시작프로젝트는 WDF의 Kernel Mode Driver (KMDF)로 합니다.  Driver.c 파일에 보면 DriverEntry이 있고 그 외 몇몇 파일이 만들어져 있습니다.  타겟 머신에 제대로 실행이 되는지 확인해볼 것이기 때문에 DriverEntry 함수 내에 DbgPrint()를 사용하여 로그를 찍어보도록 합니다.

 또 한 군데, OnUnload()에서도 찍어보는데 이 함수는 기본값으로 만들어져있지 않습니다.  DriverEntry()위에 다음과 같이 정의해줍니다.



 그리고 이를 DriverUnload 루틴에 셋팅해줘야 합니다.  DriverEntry()의 마지막 리턴 앞에 

DriverObject->DriverUnload=OnUnload;

 라는 구문을 추가합니다.


 코딩은 여기까지 해줍니다.  이제 F5를 눌러서 print가 잘 찍히는지 확인해줍니다.  원활한 테스트를 위해 타겟머신에는 DebugView와 InstDrv를 깔아줍니다.   



 InstDrv에는 sys파일의 경로를 적어주고 Install을 클릭합니다.  successful이 나오면 Start를 클릭합니다.  그럼 DebugView에 DbgPrint()로 찍어뒀던 문자열이 나오게 됩니다.  다른 프로그램들과 마찬가지로 실행이되고 무한 루프나 계속하여 사용자와 상호작용할 사건들이 없으니 바로 종료되는 모습입니다.