뭉근 : 느긋하게 타는 불

윈도우 8이 새로이 출시되면서 윈도우 8의 커널을 분석해야 되는 분들이 있을거라 생각한다. 따라서 이번 포스트에서는 Vmware로 윈도우 8을 동작 중인 가상 머신에 Windbg를 사용하여 리모트 커널 디버깅을 설정하는 방법을 설명한다.

   

소개

윈도우 8이 공개되고 이에 맞는 WDK 8이 공개되었으며 이 WDK 8에 윈도우 8을 디버깅하기 위한 새 버전의 WinDbg 또한 포함되어 있다. 구버전의 WinDbg를 사용할 경우 디버깅 연결은 되지만 윈도우 8 디버깅 방법을 모르기 때문에 명령어 실행 단계에서 에러가 발생한다. 따라서 새 버전(Windbg:6.3.9600.*)의 WinDbg를 설치해야 하며, 나머지 부분은 윈도우 7 때와과 동일하다.

   

WinDbg 설치

WinDbg의 새 버전은 MSDN 공식 사이트에서 다운로드 할 수 있다. 이 사이트는 WinDbg를 새로 설치하기 위해 두 가지 방법을 제공하는데 첫번째로 WDK 8.1을 설치하여 그 중에 포함되어 있는 Windbg를 사용하는 방법과 Standalone형으로 나온 WinDbg를 사용하는 방법이 있다. 전자의 경우 아래 그림에 나와있듯이 Visual Studio 2013이 미리 설치되어 있어야 한다.

   

   

후자인 Standalone 형의 경우 설치만 하면 된다.

   

   

WinDbg를 설치 후 실행하여 반드시 버전을 확인한다.

  • Windbg:6.3.9600.*

   

이전에 설치했던 WinDbg의 경우 버전 호환성을 위해 그대로 남아있는 것 같으므로

반드시 설치 폴더에 들어가서 실행해 보아야 한다.

WDK 8.1 설치 경로는 다음과 같다.

   

  • C:\Program Files (x86)\Windows Kits\8.1\bin\x86
  • C:\Program Files (x86)\Windows Kits\8.1\bin\x64

   

Vmware 세팅

가상 머신을 리모트 디버깅하기 위해 윈도우 7에서 했던 방식과 달라진 점은 없지만 한번 더 짚고 넘어가기로 한다.

윈도우 8을 설치한 가상 머신에서 아래 작업을 순서대로 수행한다.

   

  • 실행(Ctrl +D) - msconfig 실행
  • 부팅 탭에서 고급 옵션 선택
  • 디버그 모드 체크

   

   

위 작업은 윈도우 8.1에서 디버깅을 가능하게 한 것이고 외부에서 디버깅을 위해 접근하려면 COM1 포트를 사용해야 한다는 설정해주는 것이다.

(* 이 작업은 bcdedit을 이용하여 디버깅용 부팅 옵션을 따로 만들 수도 있다.)

   

본래 COM1, COM2 포트 등은 컴퓨터의 본체에 다른 컴퓨터와 연결하기 위하여 존재하는 것이지만 가상 머신의 경우 실제 포트가 존재하지 않으므로 이름있는 파이프를 활용하여 가상머신을 실행 중인 호스트 PC와 연결해준다.

   

  • 윈도우 8 가상 머신 종료
  • Vmware 가상 머신 옵션
  • Hardware 탭에서 Add 버튼 클릭
  • Serial Port를 추가

 

   

뒤에서도 한번 더 말하겠지만 호스트 PC에 프린터가 잡혀있다면 Vmware가 이를 인식하여 가상 머신과 연동하기 위해 COM1 포트를 프린터 포트로 사용한다. 따라서 부팅 옵션에서 COM1 포트를 사용할 것이지 COM2 포트를 사용할 것인지 잘 정해야 한다.

   

  • Next 후 Output to named pipe 선택

   

   

  • 파이프의 이름을 정한다. 여기서는 com_8_64로 하였다.

   

   

Finish를 하면 새로운 포트가 추가되는데 앞서 말했듯이 Printer가 잡혀있다면 Serial Port 2로 생성이 된다. 물론 Printer가 잡혀있지 않다면 Serial Port 1으로 생성이되며, 이후 Windbg를 실행하여 리모트 커널 디버깅을 진행하면 된다. Serial Port 2일 경우 이를 해결하기 위한 방법으로 두 가지가 있는데 첫번째는 Printer 하드웨어를 제거하고 다시 시리얼 포트를 추가하는 방법이며 두번째는 부팅 옵션의 디버깅용 포트를 변경하는 방법이 있다.

   

   

여기선 가상 머신에서 프린터를 사용할 때를 대비하여 부팅 옵션의 디버깅용 포트를 변경하기로 한다.

   

  • 다시 윈도우 8 가상머신을 키고 부팅 옵션에서 COM2 로 설정해준다.

   

   

* 프린터가 Serial Port 1을 사용하고 있다는 내용은 이 블로그를 통해 알게 되었다.

   

이후 가상 머신을 다시 재부팅한다.

   

Windbg 커널 디버거 연결

앞에서 Vmware의 가상 머신이 리모트 디버깅을 받아들 일 수 있도록 하는 설정을 마쳤다. 이제 남은 일은 Windbg를 실행하여 리모트 커널 디버거를 가상 머신과 연결하는 것이다.

   

  • File - Kernel Debug - Com 탭 에서 아래와 같이 설정해준다.

   

   

포트는 아까 이름있는 파이프의 이름을 설정한 걸 사용하면 된다.(\\.\pipe\com_8_64)

   

*다른 블로그에서 볼 수 있는 단축 아이콘의 실행 인자 정보를 변경하여 실행하는 것이 위와 같은 과정이다.

   

OK를 누르면 아래와 같이 창이 뜨는데

   

   

계속 멈춰 있으면 한번 Ctrl + Break 를 눌러보면 연결이 된다.

(이 문제는 윈도우7 디버깅할 때도 있었는데 무슨 문제인가 싶다.)

   

이후 심볼 설정을 해주면 되는데

Windbg 메뉴에서 File - Symbol File Path에 아래와 같이 입력한다.

SRV*d:\websymbol*http://msdl.microsoft.com/download/symbols;

   

   

"d:\websymbol"은 심볼을 넣을 폴더 경로로 디버깅하다가 필요한 심볼 정보가 있으면 마이크로소프트사에서 제공하는 디버깅 데이터 서버를 통해 다운받을 폴더이다. 반드시 사용 전에 폴더를 미리 만들어주어야 한다. Reload 체크 박스를 설정하면 OK를 누르자마자 심볼 정보를 다시 리로드하는 것을 볼 수 있다.

간혹 가다가 한번씩 심볼 정보가 일치하지 않을 때가 있는데 이 때는 심볼 정보를 다시 리로드하는 명령어 .reload를 실행주면 된다.

   

   

이상 Window8 Remote Kernel Debugging on Vmware using WinDbg 글을 마친다.

'디버깅' 카테고리의 다른 글

MS 심볼 구성에 관하여  (0) 2014.12.17
Windows 10 _KPCR and _KPRCB  (0) 2014.11.14
8바이트 변수 초기화 문제  (0) 2014.11.14
Windbg에서 KDBG 찾기  (0) 2014.06.19
_DRIVER_OBJECT.DriverSection 정보  (0) 2013.10.05

MFC만 하다보니까 WinAPI는 너무 약한거 같다...

기본이 되는 힘을 익혀야되는데

아래 함수는 프로세스 자신 뿐만 아니라

타프로세스의 윈도우 핸들을 받을 경우 그에 속하는 모든 자식 윈도우 핸들을 출력해주는 함수이다. 

void ChildWindows(HWND parentHwnd) {
    HWND childHwnd;
    childHwnd = GetWindow(parentHwnd, GW_CHILD);
    
    while(childHwnd) {
        printf("%#08x\n", childHwnd);
        ChildWindows(childHwnd);
        childHwnd = GetNextWindow(childHwnd, GW_HWNDNEXT);
    }

    return;
}

 

'프로그래밍' 카테고리의 다른 글

드라이버 개발 삽질 #1  (0) 2015.03.12
ofstream 한글 출력 문제  (0) 2014.10.22
ifstream 64  (0) 2014.09.25
CPP 벡터 반복문 중 원소 지우기  (0) 2014.09.22
가상 함수 테스트  (0) 2014.07.05

다음팟 로컬 채팅 무시 프로그램입니다.

다음팟은 기본적으로 채팅 무시 기능을 제공하나 채팅 무시 리스트를 휘발성으로 가지고 있기 때문에

다음팟 매번 실행 시, 일x충이나 언행이 안좋은 사람들을

다시 채팅 무시에 등록해야 되는 귀찮음이 있었습니다.

이에 귀찮아서 로컬 PC에 채팅 무시 리스트 파일을 만들어 지속적으로

채팅 무시를 할 수 있는 간단한 프로그램을 만들었습니다.

다운로드 :

PotPlayerChatIgnore_v01.zip

 

*윈도우 7 32비트, 64비트에서 동작 확인하였습니다. 다른 버전은 동작할 지 잘 모르겠습니다.

- 사용법

압축을 풀면 아래와 같이 PotChatIg.dll과 PotPlayerChatIn\gnore.exe가 나옵니다.

 

다음팟을 실행 시키신 후 PotPlayerChatIgnore.exe를 실행합니다.

(다음팟이 실행되어 있어야만 동작합니다.)

실행시키면 아래와 같이 동작하고 채팅 무시 기능 등록이 성공했다는 메시지가 뜹니다.

이후 방송시청 도중 채팅 무시하고 싶은 유저가 생길 경우, 채팅 무시하기 기능을 그대로 사용하시면 됩니다.

* 실제로 적용되는지 궁금하시면 채팅무시를 한번 풀어보세요 ^^. 로컬에 저장되어 있어서 채팅무시를 풀어도 해당 유저의 대화 내용은 보이지 않습니다.

이후 다음팟 실행시 등록한 유저의 채팅 내용은 보이지 않습니다.

* 로컬 채팅 무시 유저 목록 파일은 다음과 같은 위치에 있습니다.

%USERPROFILE%\AppData\Local\Daum\PotPlayer\ignores.dat

채팅 무시를 초기화하실려면 해당 파일을 수정 및 삭제하시기 바랍니다.

 

- 바이러스 검사 결과

다음팟 프로세스에 패치하는 형태로 동작하기 때문에 한군데서 not malcious로 나왔네요.

 

DLL 또한 바이러스 정보 없습니다.

'생활' 카테고리의 다른 글

'배려'의 명언  (0) 2014.11.24
Quiet - 내향적인 사람들을 위한 또는 이해하기 위한 도서  (0) 2014.09.15
메모리 포렌식 도서 출간 예정  (0) 2014.04.11
나니아 연대기  (0) 2013.02.12
이세돌의 은퇴 이유  (0) 2013.02.12