티스토리 뷰

 

 

 

버전 

날짜 

내용 

작성자 

1.0.0.1 

2015.1.2 

Kernel Driver Debugging 환경 설정

삽잡이 

1.0.0.2 

2015.1.2

bcdedit 설정 방법 추가 및 문구 정리

삽잡이 

 

 

 

 

 

 

[지난 이야기]

 

 

013. 에라 모르겠다! WinDbg로 커널 드라이버를 씹어먹자! : http://sapzape.tistory.com/24

 

 

 


 

 

여러분 안녕하십니까... 

미친 삽질의 선두 주자! 별것도 아닌거에 질질 끄는!

미친삽 삽잡이입니다. 


여러분 새해복 많이 받으세요!!! 2015년이 찾아왔습니다.

저는 2014년에서 2015년을 넘어가는 사이에도 드라이버와 씨름을 하고 있었답니다 하하...

설정하는데만 얼마나 시간을 쏟았는지 허허... 

최근에서야 드라이버 디버깅을 진행중이랍니다 ㅠㅠ 

그래도 뭔가 묘한 매력이 있는거 같습니다 ... 농약같은...

허허허... 아무튼, 본론으로 넘어가서...


자... 지금까지 시스템 핸들 값 (PID 4)를 뜯어보기 위해 별의 별 삽질을 다 해봤습니다.

오늘 드디어 이 삽질의 끝을 내립니다. (물론 WinDbg 설정만요...)

11 - 14 장에 걸쳐 모두 커널 드라이버 디버깅을 위한 삽질을 걸쳤는데,

뭔가 이리저리 흩어진 느낌인데요....

지금까지의 내용을 정리하며 시작해보겠습니다.

지난 장들의 내용이 중복될 수 있습니다. 

14장만 보셔도 드라이버 디버깅을 하시는데 문제가 없도록 정리하겠습니다.
(물론 지저분한 11 - 13장은 시간이 날 때 정리하도록... 허허...)

 

자... 우선, 지난 장들을 살펴보시면 아시겠지만,

 

Target PC 그러니까, 저는 VM을 쓰고 있는데요...

디버깅을 할 수 있도록 환경을 만들어줘야합니다. 

Vista 이상은 bcdedit, XP 이하는 boot.ini에서 설정해주시면 됩니다.

제 Target PC 버전은 Window 7 x86 이라서... bcdedit 으로 설정해보겠습니다.

 


 

자 작업을 완료하고 재부팅 한번 해주시고요~

 

그다음으로 심볼 파일 설정을 진행해봅시다.

심볼 파일은 .pdb라고 했죠. 이 파일은 드라이버를 컴파일시 생성되는데요, 

(.pdb 파일 생성 방법은 구글링을 해보시거나, 나중에 따로 올리도록 하겠습니다..)

심볼 파일을 등록하면, 

컴파일 하고자하는 대상의 함수명, 위치, 소스 정보등을 가지고 있습니다. 

디버깅시 매우 필요한 파일이죠...

 

srv*d:\symbols*http://msdl.microsoft.com/download/symbols

d:\symbols 폴더에 microsoft 에서 제공하는 심볼 서버에서 

필요한 심볼 파일을 저장 한다는 뜻으로 이해하시면 될듯합니다.


추가적으로 세미콜론을 붙이고 d:\locsymbols 폴더를 추가로 지정한 이유는,

진행하고자하는 커널 드라이버를 디버깅하기 위해서

개인적으로 추가해주는 심볼 파일 경로인데요, 심볼을 로딩하기 위해서 지정해줬습니다.

(이 폴더 안에는 제가 씹어 먹을 KProcessHacker의 .pdb 파일을 옮겨뒀습니다!)



 

 

* 이때 이 덤벙거리는 삽질의 전문가님께서는

로를 잘못 지정해두고 왜 안되지 하는 삽질을 했었습니다. 삽질 1!

 

여러분께서는 Symbols 파일의 경로를 확실하게 지정해주세요.

부끄럽지만 저는 D:\에 설정을 하려했지만 , C\ 위치에 입력하여 삽질했던 모습입니다...




여러분은 저와 같은 삽질을... 하지마세요... 저건 간난 얼라들도 안할 삽질...

 


그럼 경로를 제대로 설정하고 .

sympath 명령어를 입력한다면, D:\로 시작되는 제대로 된 경로가 출력되겠죠 ^^ 

이렇게요!


 

다음으로, 소스 파일의 경로를 지정 줍니다


 

 

지정후에 확인을 누르면 소스 파일 경로가 뜨네요~

  


 

심볼 파일 설정 경로를 제대로 설정하신다면,

해당 폴더에 Web에서 가져온 .pdb 파일들을 받아옵니다. (제가 받은게 아닙니다!) 

 

 


 

 

아래 캡쳐한 화면은, 제가 디버깅할 드라이버의 .pdb 파일이 들어있는 폴더입니다.

이부분도 제가 경로 설정때 지정했었습니다.

 


 

* 이때 이 덤벙거리는 삽질의 전문가님께서는

 

나의 .pdb 파일이 왜  심볼 설정이 되지 않지... 하는 삽질을 했었습니다. 삽질 2!

 

 MSDN을 보면,

 

The executable and the .pdb files must match exactly the version and build of the files used when the dump was created.

 

그러니까...

실행 파일과 .pdb 파일은 덤프가 만들어졌을 때 

사용된 파일의 버전 및 빌드와 정확히 일치해야 합니다... 

음... 제기억으로 저는 일치하지 않아서 심볼 빌드가 안됬던거 같은데... 참조하세요!




 


 

 

설정이 다 됬으니... 로드된 모듈을 확인해보면, 

 

아래 화면 과 같이 모듈들에 필요한 .pdb 파일들이 보이시나요?

웹에서 필요한 심볼들을 받아오게 되서 설정 됬습니다.

(저는 이렇게 쉽게 진행할 것을... 뭐이리 고생하며 안됬었는지 ㅠㅠ)



 


자... 이제 본격적으로 드라이버를 씹어먹어야합니다.

드라이버중에 바로 kprocesshacker.sys 를 씹어 먹어야합니다.

왜냐 그래야 PID 4 즉, 커널 권한의 handle 값을 추출할 수 있거든요...

(이곳까지 정말 너무 오래 걸렸습니다... 감격 ㅠㅠ)

WinDbg에서 디버깅할 소스파일을 Open 해주시고요!


WinDbg에서는 디버깅을 위해서 bp라는 명령어로 break point를 잡아야합니다.

 

bp 모듈명!함수명 을 입력해주시면 됩니다.

bl은 bp를 한 리스트를 출력해주는데요, 보이시죠?





아참! 그리고 lm으로 확인해보시면, 제가 지정한 pdb 파일도 올라가 있습니다.

(저는 이 파일을 올리는것도 왜이리 힘들었는지 ㅠㅠ... 신세 한탄좀... ㅋㅋㅋ)

 


 

이제 정말 디버깅하기에 코앞까지 왔습니다!!!!

Target PC에서 드라이버를 등록하고 시작하는 순간 

우리의 드라이버 씹어먹기는 시작됩니다.

 

시작이 반이라 했습니다. 여러분 저는 이 반을 오는데 엄청난 삽질을 했습니다.

모두 피가 되고 살이 되는 경험이겠죠... 아하하하 


됬고, 진행해봅시다. Target PC에 드라이버를 옮깁시다.

저는 캡쳐된 경로에 kprocesshacker.sys 파일을 옮겨뒀습니다.


 

저는 OSR에서 제공하는 Driver Loader 툴을 사용하여 드라이버 등록을 진행했습니다.

(http://www.osronline.com/article.cfm?article=157 <-- 이곳에서 받을 수 있습니다.)

굳이 저 툴을 사용하지 않으셔도 됩니다. 


다른 Driver Loader 툴(processhacker 프로그램도 가능할 거에요!)을 사용하셔도 되고,

코드를 추가해서 설정하실 수 도 있는데...

(코드 추가는... 구글링을 하셔도 되고.... 제가 나중에 좀 더 공부해서... 허허...)


아무튼, [Browse]를 누르고 .sys 파일을 선택해주시고요

드라이버를 등록하고, 시작하면

(여러분 등록하고 시작해야되요... 혹시 등록 되있으면 바로 시작을...)

 

 

WinDbg 프로그램의 화면중... 

브레이크 포인터를 걸었던 곳에 표시가 됩니다!

이제 디버깅을 시작하면 됩니다 후후...

 

 

기존 Visual Studio 에서 디버깅 하듯이 진행하시면 됩니다!

F9는 Break Point 이구, F10, F11.. 모두 다 아시죠??

같이 씹어먹어보자구요!

 

반드시 모두 씹어먹고 말것이다!

이상 삽잡이였습니다!

 

[출처 및 참고자료]

 

http://asec.ahnlab.com/137 <-- 드라이버 디버깅 환경 설정 설명이 잘 되어 있는 곳.

http://egloos.zum.com/byung/v/4400241 <-- 바이너리 생성 파일 시점이 다를 시 발생하는 문제에 대해 설명되어 있는 곳. 

 

 

[구글 키워드]

 

WDK

Window Driver

WinDbg

WinDbg Kernel Debugging

Driver Debugging

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함