2박 3일간의 디바이스 드라이버 코딩 여행

사실 난 지난 며칠간 거의 폐인이었다.
일요일 저녁부터 수요일 아침까지 60시간 동안 5시간 자고 코딩만 했으니 -_-;
산학원에서 나가지도 않았다 -_-
다른 건 거의 안 하고 모니터만 쳐다보면서 코딩했다.
그 외에는 커피 마시고, 밥 먹고, 화장실가고, 전화하고, 드라마 1개 반 본게 다니까
대략 45~50시간 정도 코딩한건가.

이번에 필 받아서 코딩한 것은,
windows device driver에서 passthru와 filemon을 통합, 수정하는 작업이었다.
나름대로 WormMon 이라고 이름을 지었는데,
최종 작품은 거시적인 방법(macroscopic)으로 worm을 탐지하고 대응하는 프로그램이다.
코딩은 거의 다 해놨으니 마무리만 하면 되겠다.

passthru는 network를 모니터링 하는 device driver이다.
흔히 NDIS(Network Driver Interface Specification)이라고 하는 네트워크 드라이버의 샘플 코드이다.
filemon은 file system을 모니터링하는 device driver이다.

차 떼고 포 떼서 간단히 설명하면,
passthru에서 네트워크로 들어오고 나가는 패킷을 검사해서 유심히 보고 있다가
filemon에서 디스크에 어떤 파일이 쓰여지고 실행되는지를 살펴본 후,
어떤 조건을 만족하면 그 놈을 worm이라 판단하는 것이다.

지금 하고 있는 집중교육에서 나는 filemon부분을 맡았기 때문에 passthru는 미처 공부를 못 했는데,
이번 기회에 싹 정리했다.
사실 하룻밤만에 공부하고 코딩까지 다 할 줄 알았는데
커널 레벨에서 동기화(synchronization) 오브젝트인 뮤텍스(mutex)가 말썽이라서
디버깅하는데 시간이 너무 오래걸렸다.
이게 passthru의 어느 부분에서 사용하면 커널에서 에러가 나버린다.
filemon에서도 잘 돌아가고 passthru의 다른 부분에서는 잘 돌아가는데 왜 그러지.
mutex에 대해서 더 공부를 해야 겠구나.
그런데 디버깅할 때는 내가 작성한 코드에서 에러가 나는게 아니라,
그 밖에서 에러가 나니까 원인 찾는데 정말 한참 걸렸다.
커널 레벨에서 디버깅하는건 삽질 중의 삽질이다 -_-/
그래도 이번 기회에 VMWare, WinDbg와 친해져서 기쁘다 ㅎ

이번에 사용한 개발 도구는 아래와 같다.
Ultra Edit Studio (UEStudio), Visual Studio 2005, Visual Studio 6, VMWare, WinDbg, Source Insight
어느 하나 뺄 게 없구나.
잘 버텨준 컴퓨터에 감사한다 ㅎㅎ

'WDM' 카테고리에 쓰는 글이 아니고 그냥 '이야기'에 쓰는 글인데
너무 주저리주저리 하니까 글 쓰는 나도 지겹네.
그냥 스크린샷이나 대충 때려박자 ㅋ


개발 화면 1.
VMWare에서 device driver 올려서 돌려보고 WinDbg에서 디버깅하는 장면.



개발 화면 2.
Visual Studio와 Source Insight에서 device driver와 user mode application을 동시에 개발하는 장면.



개발 화면 3.
우왕 이런식으로 filemon 유저 모드 프로그램에 passthru 유저 모드 프로그램을 통합했다.


개발 화면 4.
하지만... 이내 WinDbg에 에러 메시지를 내면서 블루스크린이 뜨고 만다 -_-;


개발 화면 5.
결국에는 이렇게 잘 돌아가게 만들었다 -_-v

ps1.
혹시나 이 글을 볼 학생들을 위한 팁.
passthru 유저 모드 프로그램에 filemon 유저 모드 프로그램을 넣는 것보다,
filemon 유저 모드 프로그램에 passthru 유저 모드 프로그램을 넣는게 더 쉽다.
passthru의 어느 부분에서 mutex 근처에서 문제가 생기면 spin lock을 써라.

ps2.
개발할 때는 22인치 모니터도 무지 좁구나... 흑흑.
22인치 듀얼 모니터가 낫겠군 ㅎㅎ

by 천재태지서주영 | 2008/11/26 23:19 | 이야기 | 트랙백 | 덧글(8)

트랙백 주소 : http://seoz.egloos.com/tb/1841113
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by async at 2008/11/26 23:23
오! 현기증이 ;;
Commented by 천재태지서주영 at 2008/11/28 04:46
이제 보니까 나도 현기증이 나네 -_-;
Commented by 한을 at 2008/11/28 23:29
아무리 눈을 크게 뜨고 봐도 코드는 안 보이는군요 :)
Commented by 천재태지서주영 at 2008/12/02 00:14
잘 보면 보임 ㅎㅎㅎ
Commented by 미친감자 at 2009/02/28 10:21
좋은 글 잘보고 갑니다.^^
그리고, 패킷의 형태를 보고 웜파일을 잡는다는 것 맞죠?
좋은 아이디어 이군요~~
Commented by 천재태지서주영 at 2009/03/23 22:36
미친 감자님 안녕하세요 ^^
네, 패킷의 행동을 보고 웜파일을 잡는거예요.
웜이라고 의심할 만한 행동을 하면 웜이라고 마크해놓고,
그 횟수가 커지면 웜이라고 결정을 해버리는 아이디어 입니다.
Commented by C.RIO at 2009/10/27 21:24
서주영 조교님이시네요
이때 집중교육 수강하였던 학생입니다. ^^;
집중교육때 도움이 많이되서 이걸로 많이 우려먹고 있네요...
감사합니다 ㅎ
Commented by 천재태지서주영 at 2009/10/28 11:15
C.RIO 님 안녕하세요? 닉넴만으로는 누군지 추측하기 힘들군요 ^^
도움이 많이 되었다니 뿌듯합니다.
저도 도움이 많이 되었는데, 써먹지 못하고 있어요.
꾸준히 공부를 해야겠지요.
지금은 무슨 일을 하고 있나요~?

:         :

:

비공개 덧글

◀ 이전 페이지          다음 페이지 ▶