드라이버 쪼물딱 거리기 1탄
요즘 들어 바이러스나 스파이웨어같은 녀석들도 커널 드라이버를 통해서 시스템콜을 후킹하거나
커널 오브젝트를 수정하거나 하는 일들을 자주 볼 수 있습니다.
이런 기술들에 대해서 블로그를 통해서 조금씩 시간날때 마다 얘기해 보려고 합니다.

원래 사내 교육용으로 문서를 만들다가 .. 걍 블로그에도 함께 올리는 거구요 ^^
읽고 조금이나마 도움이 되었다면 트랙백이나 댓글 팍팍 달아주셈.
호응이 없으면 안 할지도 몰라요 :-)

또한 소스코드나 문서(?) 는 맘대로 사용해도 좋습니다만 주인이 바뀌지만 않았으면 합니다.
서로 얼굴 붉힐일 없으면 좋겠네요.




1탄 - 개발 환경 구축

DDK

드라이버개발을 위해서는 DDK 가 필요하다.
DDK 는 드라이버 개발을 위해 필요한 헤더파일이나 라이브러리들을 제공하는데 드라이버 개발을 위해 반드시 DDK 가 필요한 것은 아니다. 필요한 헤더나 라이브러리를 직접 만들 수도 있다. 그러나 결코 영장류의 사고능력을 가진 사람이라면 선택하지 않을 방법일 것이다. (예로 holy_father 라는 유명한 해커는 DDK 를 pascal 로 포팅해서 Delphi 로 드라이버를 만들기도 한다.)

이 문서에서는 최신 DDK 버전인 windows 2003 sp1 (3790) 을 사용한다.

최근에는 MS 에서 다시 DDK 를 공짜로 다운로드 받을 수 있도록 한다고 하니 알아서 다운받아서 설치하기 바란다.


개발 환경 구축
Driver 는 기본적으로 command line utility 인 build 명령을 통해 Makefile, sources 파일을 참조해서 빌드를 한다.
이는 통합 개발 환경(IDE)하에서 개발을 하던 일반 개발자들(특히 윈도우 계열에서)에게 매우 불편한 환경이 아닐 수 없다.

Visual studio 를 통해서 DDK 의 빌드 환경을 만드는 방법에는 여러 가지가 있는데
- driver studio 를 이용하는 방법
- 월터 오니 아저씨의 WDM wizard
- Vs 의 옵션을 수동으로 바꿔서 만드는 방법
- Ddkbuild
등이 있다.

개인적으로 DDKBuild 가 가장 훌륭하다. 이 문서에서는 DDKBuild 를 이용한 개발환경을 사용할 것이다.

http://www.hollistech.com/Resources/ddkbuild/ddkbuild.htm
DDKBUILD 는 위의 링크에서 받을 수 있으며 단순히 배치 파일이다.
이 글을 쓰고 있는 현재 최신 버전은 3.13 이다.

다운로드 한 DDKBUILD 를 압축을 풀고 vs .net 이 참조 가능한 패스에 복사한다.
(e.g. C:Program FilesMicrosoft Visual Studio .NET 2003Vc7in)

DDKBUILD 에게 사용할 DDK version 을 알려주기 위해 약간의 편집을 해야 한다.



이것은 DDKBUILD 에게 Windows 2003 Server 또는 W2K3SP1 DDK 환경을 사용하겠다고 알려주는 것이며 경로는 알아서 설치경로를 적어주면 된다.
자세한 내용은 홈페이지에서 확인하기 바란다.



그림 처럼 메이크 파일을 생성하고, 명령줄을 입력하면 된다.

참고로 드라이버는 일반 어플리케이션과는 달리 debug build/release build 라고 하지 않는다.
Debug build ----- checked build
Release build ----- free build

드라이버를 release build , 즉 free build 로 만들기 위해서는 ddkbuild –WNET free . 을 해주면 될 것이다.
주의할 것은 free 또는 checked 뒤에 . (콤마) 를 반드시 찍어줘야 한다.
by somma | 2006/09/21 17:41 | 시스템 프로그래밍 | 트랙백(5) | 핑백(1) | 덧글(12)
트랙백 주소 : http://somma.egloos.com/tb/2710282
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Tracked from window 쪼물딱 거리기 at 2006/09/21 17:54

제목 : 드라이버 쪼물딱 거리기 2탄
드라이버 쪼물딱 거리기 1탄 개발 환경 ...more

Tracked from 홍가일보 at 2006/12/22 10:23

제목 : 비주얼스튜디오에서 DDK build를...
DriverStudio 를 설치해서 VC6에서 DDK 빌드를 한다.비주얼스튜디오 IDE를 사용해서 편하긴 한데 웬지 모를 존재의 무거움(?)이랄까?매번 드라이버스튜디오를 설치해야하고 환경설정해야하고...가장 중요한건 돈주고 사야한다는거...googling 하다가 알아낸 것들...1. http://www.osronline.com/article.cfm?article=43 에서 DDKBUILD를 다운받아 비주얼스튜디오 또는 프로젝트 폴더에 복사해 넣......more

Tracked from Leader &.. at 2007/04/24 16:53

제목 : 드라이버 빌드 환경 구성 하기
드라이버 쪼물딱 거리기 1탄드라이버 빌드 하는데 항상 커맨드 창으로 해서 불편했는데 somma 님께서 잘 정리해서 올려주셔서 우리 회사 프로젝트를 깔끔하게 다 정리를 할 수 있게 되어서 너무 좋다....more

Tracked from 나른한 블로그 at 2007/09/20 23:33

제목 : DDK 세팅..
드라이버 쪼물딱 거리기 1탄...more

Tracked from 박한범님의 이글루 at 2009/03/13 03:10

제목 : DDK VS에 연동하기~!
드라이버 쪼물딱 거리기 1탄^~^/...more

Linked at » compile.. at 2008/04/03 18:49

... http://somma.egloos.com/2710282</a> http://blog.naver.com/pfool/100035568659     http://www.microsoft.com/whdc/devtools/ddk/default.mspx 중간쯤보면 그림에서 보는것 같이 Download the Windows Server 2003 SP1 DDK [236 MB ISO file] 를 클릭하면 ISO 파일을 받을수 있다. 위 버전을 설치하면 Window ... more

Commented by Mins at 2006/09/21 17:58
우헤헤.. 제가 젤 빨리 찾아왔음.....
맨날 귀찮다고 하시면서.. 이런걸 다 준비하시다니.. ㅋㅋㅋ 역시 소마형은 절라 멋져요.. - _-)=b
Commented by somma at 2006/09/21 18:50
오.. 민쓰가 일등이네.. 돈있으면 맛있는거 사먹지 말구.. 나 술사줘 -_-;;
Commented by seyool at 2006/09/26 14:58
소망형님 고맙습니다 ㅋㅋ

set WNETBASE=C:/Progra~1/WINDDK/3790.1830

저는 이렇게 하니까되네요.. 뛰어쓰기에 민감하네요
/ 을 역슬레쉬로 바꿔서 하면 되요.. +_+
Commented by 홍가이버 at 2006/12/22 10:24
헉...죄송...트랙백이 두번이나..^^
좋은글 잘보고 갑니다...
Commented by somma at 2006/12/22 11:25
홍가이버 / 트랙백 하나는 지웠습니다. ^___^
Commented by rainrunabl at 2007/03/21 23:30
제가 somma님 글을 Visual Studio 2005와 연동하는것으로 아주 약간 변경해 보았습니다. ^^

http://blog.naver.com/pfool/100035568659
Commented by somma at 2007/03/22 11:36
rainrunable / 제가 설명한것 보다 훨씬 좋은데요? ^^
Commented by wany at 2007/10/09 10:15
안녕하세요..

DDK를 이용해서 빌드를 하고 있는데요..
참 좋은 글 같습니다.
그런데.. DDK로 폴더 a, b, c를 따로따로 빌드를 하고 있는데요..
각 폴더 a, b, c는 각가의 sources 파일이 있고 각각 dll로 만들어집니다.

이것을 vs2005에서 DDKbuild를 이용하여
하나의 project내에서 각각 빌드를 하려면 어떻게 해야 하나요?

제가 vs2005 사용하는데는 초보자라서...
아시면 부탁드려요..
Commented by somma at 2007/10/09 17:27
> 그런데.. DDK로 폴더 a, b, c를 따로따로 빌드를 하고 있는데요..
> 각 폴더 a, b, c는 각가의 sources 파일이 있고 각각 dll로 만들어집니다.

dll 이 아니라 sys 겠죠?
각각의 sources 파일을 가지고 있다면 각 폴더는 VS2005 에서 서로 다른 프로젝트로 만들어져 있지 않나요?
그렇다면 프로젝트들을 관리하고 있는 솔루션을 빌드해 버리면 모든 프로젝트들이 모두 빌드 될텐데요 ^^
잘 안되는 경우라면 배치파일을 하나 만들어서 빌드 명령줄에 생성하신 배치파일을 호출하게 하는것이 편할듯 하네요.
Commented by wany at 2007/10/09 18:10
답변 감사합니다.

한가지 더 문의드려요..
빌드를 하고서, 생성된 파일 위치를 알고 있어서 이파일을 원하는 곳으로 복사하고 싶은데요..

vs2005의 메뉴를 찾아봐도 어떻게 해야 할지.. ^^;

빌드 후에 별도의 bat 파일을 실행시키면 좋겠는데.. 어떻게 할 수 있는지 아시나요?


Commented by somma at 2007/10/09 23:04
프로젝트 속성 ->구성 속성 -> 빌드 이벤트 -> 빌드 후 이벤트
명령줄에 배치 파일이나 명령어를 입력하시면 됩니다.

copy /Y "$(InputDir)\some_header.h" "..\Release\some_header.h"

이런 식으로요~~ ^^
Commented by 미친감자 at 2008/04/03 22:15
허거덕--;;;
삽질했습니다.
"G:\MyDoc\Visual Studio 2008\Projects\FileMon" 에서 빌드할때는 안되던것을
"I:\FileMon" 으로 하니까. 되네요--;;;
경로에 공백이 있으면 안되나봐요.........

:         :

:

비공개 덧글



< 이전페이지 다음페이지 >