윈도우 구조 분석을 위해 필요한 도구 Windbg 환경 설정 및 사용법에 대해 알아보자.
http://msdn.microsoft.com/library/windows/hardware/ff551063(v=vs.85).aspx
다운로드는 이곳에서..
현재는 Windbg가 WDK에 통합되어서.. WDK를 설치해야 Windbg를 사용할 수 있다.
물론 따로 설치하는 것도 가능하긴 함.
일단 Windbg를 설치하고,
심볼 설정을 해주어야 한다.
심볼 파일이란
어셈블리 코드에서 소스코드의 위치, 함수 이름, 변수 이름 같은 정보를 담고 있는 파일이다.
확장자는 .pdb
심볼 파일이 담고 있는 정보는 다음과 같다.
- 전역 변수의 이름과 주소
- 각 엔트리 포인트의 함수 이름과 주소
- FPO 데이터 ( Frame Pointer Omission.. 지금은 안알랴줌 )
- 로컬 변수의 이름과 주소
- 소스 파일의 경로와 줄 번호
- 변수와 구조 등의 타입 정보
심볼 파일은 디버깅 시에 아주 중요한 역할을 한다.
외부공개시에 운영체제의 개발단계에서 불필요한 정보를 삭제하므로.. 개발단계에서 필요한 작업들
추가 개발 혹은 버그 수정을 위해 코드를 확인할 때 방향을 잃게 된다.
말그대로 그냥 기계어 코드를 쭉쭉 읽어나가며 처음부터 분석을 해야한다는 말.
심볼 설정을 해둔다면 분석할 때 좋겠죠?
그럼 이런 심볼 파일은 어떻게 생성되는 것일까.
프로그래밍 해본사람이야 다들 알 것이다.
일반적으로 심볼은 소스코드 컴파일 시에 생성된다.
우리가 사용하는 실행 파일들은 그저 프로그램 실행에만 초점을 맞춘 기계어코드이다.
그러므로 디버깅 할때는 이런 심볼 파일의 경로를 지정하여야 분석할 때 각 코드의 의미를 알 수 있다.
MS는 외부에 심볼 서버를 공개하여 윈도우 디버깅 시에 내부 정보를 확인할 수 있도록 해준다.
아 물론 비공개도 있다. 안타까운 사실은 우리가 분석하는 시스템 프로세스들은 대부분이 비공개 심볼이다.
일단 공개 심볼서버 구성에대한 정보는
http://msdn.microsoft.com/ko-kr/windows/hardware/hh852360
에서 확인가능하다.
----------------------------------------------------------------------------------------------------------------------------------
1. 심볼 설정 방법
그럼...심볼 설정하는 방법에 대해 알아보자.
2가지 경로로 설정하는 방법을 알아보겠다.
1. 윈도우 환경 변수에 심볼 경로 등록
- 심볼 경로를 사전에 등록하여 운영체제의 모든 환경에서 기본적으로 지정한 심볼 경로를 이용한다.
cmd창에 set_NT_SYMBOL_PATH=srv*DownstreamStore*http://msdl.microsoft.com/download/symbols
2. Windbg 실행 이후 심볼 설정
- 개별 분석 케이스 별로 필요한 심볼 지정시 유용하다.
Windbg의 file 메뉴 -> Symbol file path 에서
SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols
그리고 여기에 여러개의 심볼 서버를 등록할 수도 있다.
구분자는 세미콜론..( ; )
2. 커널 디버깅
Windbg로 커널 디버깅 하는 방법을 알아보자. 우리는 이걸 하려고 Windbg를 설치했다는 걸 잊으면 안됨.
다른 상용 툴들도 있지만.. OS를 만든 ms사에서 개발한 Windbg가 가장 안정적으로 디버깅 작업을 수행할 수 있다.
단, 단점이 하나 있는데.. 내가 내 로컬 pc의 커널 디버깅이 불가능 하다는 것.. 그럼?
가상 머신의 커널로 디버깅을 수행할 수 있다.
물론 디버깅 타겟 pc에 windbg를 설치할 필요는 없다.
로컬 머신의 커널 디버깅을 수행할 수 있긴 한데, 추적과 중지, 제어 기능을 모두 사용할 수 없다.
완전한 디버깅 작업을 위해서는 당연히 로컬 pc의 커널디버깅이 필요하겠지..
(참고로 저는 VM WARE를 사용하여 가상머신을 구동할 것이며, 가상 머신은 알아서들 구동하세요.-_-;;)
하지만 여러분도 알다 시피, 커널은 보호 되어있다. 우리같은 유저들은 마음대로 들여다 볼 수가 없는 영역..
그렇다면 타겟 pc에서 커널 디버깅을 허용하도록 수정을 해주어야 하겠쬬???
타겟 pc의 C드라이버에 가면 boot.ini 라는 부팅에 관련된 설정을 관정하는 파일을 수정해준다.
우에 보이는 파일이 boot,ini 이다.
수정을 해주는데.. 잘안보이제??
빨간색 위에 있는 설정 내용들을 그대로 복사하여 아래와 같이 바꾼다.
참고로... 윈도우 비스타 이후로는 boot.ini가 사라집니다잉..
( System32에 Bcdedit.exe 라는 부팅 관리자를 통해서 부팅 옵션을 설정함. 다른 방법도 아래에 소개함.)
-----------------------------------------------------------------------------------------------------------------------------------
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional(vb_com)" /fastdetect /debug /debugport=COM1 /baudrate=115200
-----------------------------------------------------------------------------------------------------------------------------------
또한가지 msconfig로 들어가서도 설정을 바꿀 수있다. (vista 이상은 이방법으로 하면 편함. boot.ini가 없으니)
참고로 나중에 쭉쭉 하다가 만약 커널 디버깅 연결이 안된다,,,
그러면 디버거 포트를 COM1 에서 COM2 로 바꾸어 보시라.
(나도 COM1로 안되서 몇시간을 해맷다,,)
옵션을 하나하나 찝어서 설명을 좀 해드리리다. 쁠라스(+)로 Boot.ini 에서 사용할 수 있는 옵션 몇가지도 추가로 설명드림.
글고 아까말한 Bcdedit (윈도우 비스타 이상 OS) 를 수정하여
디버깅 모드 활성화를 시키는 방법이다.
bcdedit /debug on : 디비깅 모드를 활성화 시키고 COM1 사용, baudrate=115200 으로 설정되게 된다.
---------------------------------------------------------------------------------------------------------------------------------
이제 가상 머신에서의 기본적인 설정이 완료되었다.
본격적으로 Debugger와 Debuggee를 연결하는 작업을 해보자.
먼저 가상 머신의 직렬포트 부터 설정한다.
책에서는 버박(버츄얼박스)을 쓰지만 나는 브엠웨어를 사용하므로.. 브엠웨어 대로 설정하겠다.
보시는 바와 같이 설정하믄 됩니당~~~
단!!!! serial port 항목이 없으면 아래 Add... 버튼을꾹 누질러서 항목을 추가하여 다음과 같이 설정하면됨.
pipe 이름은 저장해두고 있으셈.. Windbg 설정 할 때도 같은 pipe 이름을 써줘야 하니 복사 꾹
파이프 이름의 형태는 \\.\pipe\[내가 쓰고싶은 이름] 이다.
VM WARE 의 설정은 완료 되었다. 이제 Windbg 설정을 해보자.
뭐 여기도 백번 말보다 그림이 훨씬 알아보기 쉽겠지??
File 에 커널 디버깅 항목에 들어가서 다음과 같이 설정 해주면 된다.
뭐 이렇게 하는 방법도 있고...
아예 바로가기에 설정해서 하는 방법도 있다.
대상 부분에다가
-b -k com:port=\\.\pipe\vb_com,pipe
내용을 뒤에 추가해주면
Windbg 실행하면 바로 커널 디버깅 모드로 사용할 수 있다.
이렇게 모든 설정을 마치고..
Windbg를 실행한 상태에서 가상 머신을 구동하면
아래와 같은 성공적인 커널 디버깅 화면이 나온다.
아까 말한대로 연결이 안된다면 COM2 포트로 바꿔 주고 하면 된다.
여기서 하나더
간혹 가다가 가상 머신 구동하지 않은 채로 Windbg를 켜면 이런 오류가 뜰 수가 있다.
이럴 때는.. 가상머신 부터 구동하고. 부팅되고 있는 찰나에 Windbg를 실행 시키면 올바르게 실행된다.
'IT 그리고 정보보안 > 환경설정 및 기타' 카테고리의 다른 글
Git 설치 및 사용법 (0) | 2021.04.17 |
---|---|
Linux VIM 편집기 환경 설정 (0) | 2021.04.17 |
Windows7 아이콘 깨짐 현상 해결 (0) | 2021.04.17 |
Windbg 명령어 - dt(display type) (0) | 2021.04.13 |
윈도우 계정 SID(Security Identifier) (0) | 2021.04.13 |