[Windows] Kernel Debugging
windows kernel 공부를 하면서 디버깅할 일이 생겨서 해당 포스트를 작성합니다. 이때까지 시도한 방법은 아래의 2가지 방법이었습니다.
- serial port
- network
해당 방법중 serial port를 이용한 방법은 baudrate를 1152000으로 설정해도 kernel 디버깅이 매우 느리게 작동했습니다. 따라서, vmware와 network를 이용한 디버깅 방법에 대해서 소개해드리겠습니다.
windbg 및 windows SDK 설치
우선, windbg
를 설치해야됩니다. 링크에서 다운 받을 수 있으며 아래에 있는 버튼을 이용해 설치합니다.
또한, Windows SDK
를 설치해야됩니다. Windows SDK는 링크에서 설치를 할 수 있습니다. SDK안에 디버깅을 할 때 필요한 kdnet.exe
와 VerifiedNICList.xml
파일이 있기 때문에 필수적으로 설치해야합니다!
VMware Windows 설치
설치를 하고 나면 vmware를 통해 windows를 설치합니다.
💡 이미 windows를 설치해뒀어도 상관없습니다!
이 때, 네트워크는 다음과 같이 Bridged
모드로 설치를 진행합니다.
Vmware Windows 설정
Guest OS인 Windows에서 설정을 해야됩니다. 우선 다음의 명령어로 테스트 모드를 활성화합니다.
1
2
bcdedit -set loadoptions disable_intergrity_checks
bcdedit -set testsigning on
이후, Host에서 C:\Program Files (x86)\Windows Kits\10\Debuggers\x64
경로에 존재하는 아래의 파일을 Guest에 복사합니다.
- kdnet.exe
- VerifiedNICList.xml
복사해둔 위의 2개의 파일을 C:\kdnet
폴더를 생성해서 안에 넣어줍니다.
이후, kdnet.exe를 실행시켜서 아래와 같이 호환이 가능한 장치가 있는 지 확인합니다.
호환되는 장치가 있다면 아래의 명령어를 실행합니다.
1
.\kdnet.exe [Host IP Address] [PORT]
- Host IP Address : Host의 IP 주소를 입력합니다.
- PORT : 원하는 포트를 입력합니다. 보통 50000번 포트를 사용합니다.
위의 명령어를 실행하면 출력되는 windbg.exe
로 시작되는 명령어가 있습니다. 해당 명령어중 key
로 시작하는 값을 기록해둡니다. 이후, shutdown -r -t 0
명령어를 실행해서 Guest OS를 재부팅시킵니다.
Kernel Debugging
좀전에 저장해둔 key
값을 사용해서 windbg에서 다음과 같이 입력합니다.
이렇게 모든 설정을 하고 windbg를 실행하면 커널 디버깅이 정상적으로 되는 것을 확인할 수 있습니다.