windows xp kernel debugging

windows xp kernel debugging

윈도우 디버거는 크게 유저모드 디버거와 커널모드 디버거로 나눌수 있다.
유저모드 디버거는 유저권한으로 윈도우 프로그램을 디버깅 할수 있고 커널모드 디버거는 ring0 권한으로 윈도우 커널까지도 디버깅 할 수 있다.
윈도우를 공부하거나 루트킷등을 공부하다 보면 커널영역의 메모리를 확인해야 할 필요가 있다.

이번엔 커널모드 디버깅을 할 수 있는 환경을 구성해보겠다.
프로세스를 디버깅하게되면 프로세스는 동작을 안하고 eip가 잡혀있다. 커널모드는 윈도우자체를 디버깅 하는 것이기 때문에 윈도우가 멈춰있는다. 그렇기 때문에 2대의 컴퓨터가 필요하다. vm ware으로 가상머신을 실행하여 2대의 컴퓨터 환경을 구성하고 시리얼통신을 통해서 vm의 윈도우를 디버깅 할 수 있는 환경을 만들 수 있다.
디버거 컴퓨터에는 WDK(+symbols)를 설치하고 windbg를 사용하여 vm의 윈도우를 디버깅 할 것이다.

먼저 vm의 windows xp에 디버깅이 가능한 부트스위치를 추가해 주어야한다.
xp의 경우에 c:\boot.ini파일을 수정하여 부트스위치를 추가 할 수 있다.
boot.ini파일에

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /debug /debugport=COM1

를 써넣어 시리얼포트로 디버깅을 가능한 디버그모드를 추가 할 수 있다.
vm의 소프트웨어적인 설정은 완료되었고 이제 시리얼포트를 꽃는 작업을 해주어야 한다.


호스트로 vm을 디버깅 할 것이기 때문에 named pipe를 선택하여 dafault값인 \\.\pipe\com_1을 추가해 준다.
vm에 부트모드를 추가해 주고 가상으로 시리얼포트를 꽃음으로 vm의 디버깅 할 환경 구성은 완료되었다.

이제 호스트컴퓨터의 windbg를 이용해서 vm을 디버깅해보자.


file -> kernel debug를 클릭하고 vm에 설정한 pipe의 이름을 적어준다.
호스트와 vm이 시리얼통신을 할 수 있게 연결이 되었다. 확인을 누르고 vm을 실행 시키면


boot.ini파일을 수정하여 추가한 디버그모드가 뜨게 된다. 디버그모드를 선택하면 커널 디버깅을 할 수 있다.
이제 디버깅을 할 수 있는 환경이 구성되어 있지만 함수이름,구조체,변수이름등을 포함하는 심볼파일이 없기 때문에 디버깅이 매우 힘들다. 심볼파일을 받아 와야한다.

File -> Symbol file path를 선택하고
SRV*.*http://msdl.microsoft.com/download/symbols
를 입력하여 마이크로소프트 심볼서버로부터 심볼을 받아올수 있다.


커널 디버깅을 할 수 있는 환경이 구성되었다.

0 개의 댓글:

댓글 쓰기