본문 바로가기
사이버보안/OS(윈도우즈)

[윈도우 구조 #4] WinDbg 윈도우 디버거

by 홍주은 2022. 6. 6.
반응형

윈도우를 분석하기 위해 필요한 것 중 하나가 WinDbg이다.
WinDbg는 윈도우의 프로그램을 디버깅하기 위해 필요하며, 커널 모드와 유저 모드 둘 다 지원을 한다.
유저 모드야 다양한 디버거가 존재를 하며 특히 Visual Studio 같은 경우는 소스 코드까지 있기 때문에 수월하게 디버깅을 할 수 있다. 하지만 커널 디버깅을 하기 위해선 WinDbg가 있어야 한다.


커널 모드 디버깅은 말 그대로 커널을 디버깅 하는 것이고 사용자 모드의 프로그램도 디버깅 가능하다.
커널 디버깅을 하기 위해선 2대의 컴퓨터가 필요하다.
하나는 디버깅 대상이 되는 시스템이고 다른 하나는 디버깅을 하는 시스템이다. 이 점이 유저 모드 디버깅과 차이가 나는 점이다.

디버깅을 한다는 것은 프로그램이 실행을 중지시키고 그 시점의 메모리를 본다는 말이다.
따라서 커널 디버깅을 하게 되면 윈도우 자체가 돌아가지 않아 같은 시스템에 디버거가 있으면 디버거 역시 돌아가지 않는다.
그래서 별도의 시스템을 이용한다. VMware와 같은 가상머신을 이용할 수 있음으로써 호스트는 디버거(debugger)로, 가상머신은 디버기(debuggee)로 사용한다.

 

Getting Started with WinDbg (Kernel-Mode) - Windows drivers

This topic provides hands-on exercises that will help you get started using WinDbg as a kernel-mode debugger.

docs.microsoft.com


WinDbg의 핵심 파일은 dbgeng.dll이다. 이름이 말해 주는 것처럼 디버거 엔진이다.
이 파일을 이용하여 우리가 디버거를 만들 수도 있다. WinDbg는 이 파일에 UI를 입혔다고 보면 된다.

디버거는 메모리를 보고 수정하는 프로그램이다.
디버깅하기 원하는 코드를 설정하면 디버거는 그 위치에 0xCC 값을 저장하고 실행 흐름이 설정한 위치에 오면 예외가 발생해서 디버거에게 제어권이 넘어온다.
그 순간 디버깅 대상이 되는 프로그램은 멈추고 디버거는 심볼을 이용하여 프로그램을 분석한다.

심볼은 단순한 바이너리 값을 해석하기 위해 필요한 정보이다. 코드인 경우는 대체로 함수명이 많다.
DLL 파일의 익스포트 함수도 심볼이라 할 수 있다. 데이터인 경우는 변수명이나 데이터 구조체가 심볼인 경우가 많다.

 

Symbols for Windows debugging (WinDbg, KD, CDB, NTSD) - Windows drivers

Symbols for the Windows debuggers (WinDbg, KD, CDB, and NTSD) are available from a public symbol server.

docs.microsoft.com


WinDbg의 명령어는 세 종류가 있다.

 

  • ln, bp 와 같이 WinDbg에서 제공하는 기본 명령어
  • .process 와 같이 '.'이 붙은 명령어로 값을 설정
  • !prcoess 와 값이 '!' 이 붙은 명령어로, 여러 명령어를 조합해서 프로그램의 여러 상태를 보는 명령어

 

WinDbg는 어떻게 보면 도구이다. 하지만 윈도우 구조를 분석하기 위해 유용한 도구이다.
WinDbg에 관련된 여러 책들이 있지만, 나는 WinDbg에서 제공하는 도움말을 추천한다.

반응형