'@@나도이것저것또는머리아팠는데문제해결'에 해당되는 글 4건

  1. 2014.08.01 Vmware 가상 OS와 Windbg Remote 연결
  2. 2014.07.26 windoes7 windbg(x64) 와 vmware의 windows xp 디버깅 세팅
  3. 2014.07.21 Windbg 명령어
  4. 2014.07.17 windbg symbol path

악성코드 분석을 하는도중 커널디버깅을 해야 할일이 생겨서 windbg를 리모트로 가상 os와 붙여야 된다고 하더라구요.. 그래서 검색신공으로 마구마구 검색하여 해봤으나 대부분 안된다...ㅠ

그래서 결국 삽질끝에 해결은 했습니다.

 

 

 

windbg옵션에서 symbolpath를 설정해주는 옵션이 있습니다.

첫번째 옵션에 있으니 찾기 쉬우실거에요 ..

srv*.*http://msdl.microsoft.com/download/symbols 로 세팅해줍니다.

이 심볼패스를 설정해주는 이유는 커널디버깅할때 주소값들에대한 의미를 부여하는것입니다.

즉 심볼패스를 설정하지 않으면 특정 주소값의 의미를 사용자가 파악하기는 굉장히 불가능? 에 가깝습니다.

그러나 이 심볼패스를 지정해주면 특정 주소값이 어떤걸 의미하는지 함수인지 SSDT테이블인지 알려줍니다.

 

 

 

그리고 vmware에서 시리얼 포트를 추가해줍니다.

 

 

 

여기서 시리얼포트이름을 설절해줍니다.

나중에 windbg에서도 시리얼포트 이름을 설정해주는데 그거랑 같이 설정해 주면 됩니다.

이름은 자기 맘대로 만드시면되요.

저는 그냥 알기쉽게 com1포트를 사용하면 com_1, com_2이런식으로 사용합니다.

아차! 이거 세팅할때 가상os를 종료하고 진행하셔야합니다.

 

 

그리고 I/O mode에서 Yield CPU on poll 을 체크합니다.

 

 

그리고 vmware의 가상 os를 부팅합니다.

이것때메 삽질했었는데 이부분에대해 언급하는 자료가 없더라구요 ㅠㅠ

위에서 시리얼포트를 추가했을때 위와같이 관리도구를 보면 추가된 시리얼 포트가 있습니다.

저는 예전에 한번 추가한적이있어서 2개이고 보통은 1개일겁니다.

여기서 추가된 포트이름대로 뒤의 boot.ini를 세팅해 주시면 됩니다.

이것때메 거의 1시간 삽질했네요

 

 

실행 > msconfig

위와같이 세팅을 해줍니다.

 

 

그리고 가상 OS를 종료합니다.

 

 

그리고나서 Windbg의 시리얼 COM을 세팅해줍니다.

port는 vmware에서 세팅해준 이름 그대로 세팅해주시면 됩니다.

그리고 체크체크 하고 os를 부팅해주면...

 

 

 다음과 같이 빵~ 하고 windbg가 돌아 갑니다.

 

 

 

여기서 ctrl+break 버튼 이 브레이크버튼 키보드에서 정말 안쓰는 키인데 이거 찾을려고 또 키보드를 유심히 관찰했다는...;;;

아무튼 구지 저렇게 단축키 안써도 메뉴에 있으니까요 잘살펴보심 되구요

이거 누르면 윈도우가 디버깅 모드로 진입하게 되구요(멈춥니다.)

g를 누르면 윈도우가 running상태로 진입하게 됩니다.

 

posted by 미스터리 DKL

remotedebugging

실행이 안됬던 문제점
지금 버추어박스에 시스템에서 장치관리자에보면 세팅된 com포트가 com2로 세팅되어있으므로 디버기의 가상머신의 msconfig -> boot.ini -> 고급옵션 에서 com2로 세팅 이후
디버거의 머신에서 bcdedit /debug on -> becedit /dbgsettings serial debugpor:2 로 세팅
그리고 재부팅하면 디버기와 디버거 가 붙어버린다.

 

 

작성예정

posted by 미스터리 DKL

자주 쓰는 일반 명령어
r : 레지스터 상태 보기 / 변경
d : 메모리 내용 보기
e : 메모리 내용 변경
bp : 브레이크 포인트 걸기
p, t : 브레이크 포인트가 걸린 다음 명령들을 한 줄씩 수행
대표적 일반 명령어
A(Assemble), U(Unassemble)
BL(Breakpoint List), BC(Breakpoint Clear)
BD(Breakpoint Disable), BE(Breakpoint Enable)
BA(Break on Access)
BP, BU(Set Breakpoint)
D, DA, DB, DW, DD(Display Memory)
Dds(Display Words and Symbols)
DL(Display Linked List) LIST_ENTRY or SINGLE_LIST_ ...
DS, Ds(Display String)
DT(Display Type)
DV(Display Local Variable)
K, KB, KD, KP, KV (Display Stack Backtrace

E, EA, EB, Ed, EW, EU (Enter Values)
S(Search Memory)
R(Register)
LD(Load Symbol)
LM(List Loaded Symbols)
LN(List Nearest Symbols)
G(Go), P(Step), PC(Step to Next Call)
T(Trace), TB(Trace to Next Branch), TC(Trace to Next Call)
WT(Trace and Watch Data)


2. 메타 명령 (대부분 디버거 자체를 제어) (.으로 시작)

자주 쓰는 명령어
.attach : WinDbg를 특정 프로세스에 붙여서 그 프로세스를 디버깅할 때 사용
.cls : WinDbg 명령 창에 출력된 모든 내용을 지우기
.sympath : 현재 WinDbg에 설정된 심볼 경로 확인 / 설정
.reload : 심볼 경로를 설정한 후에 WinDbg가 심볼을 다시 로드하게 하기
대표적 메타 명령어
.bugcheck (Display Bug Check Data)
.cls (Clear Screen)
.ofilter (Filter Target Output)
.enable_unicode (Enable Unicode Display)
.crash (Force System Crash)
.dump (Create Dump File)
.reboot (Reboot Target Computer)
.cxr (Display Context Record)
.exr (Display Exception Record)
.ecxr (Display Exception Context Record)
.trap (Display Trap Frame)
.exepath (Set Executable Path)
.srcpath (Set Source Path)
.sympath (Set Symbol Store Path)
.symfix (Set Symbol Store Path)
.reload (Reload Module)
.context (Set User-Mode Address Context)
.process (Set Process Context)
.thread (Set Register Context)
.tss (Display Task State Segment)
.load (Load Extension DLL)


3. 확장 명령
온갖 종류의 명령을 많이 포함하고 있지만 굳이 성격을 구분하자면 윈도우 운영체제에 종속적인 정보를 다루는 명령들이 많다. 특정 정보를 자세히 보여주거나 해석해서 보여줘 디버깅을 편리하게 도와주는 기능을 가지는 것들도 있다.
확장 명령은 !로 시작하는 이름 형식을 가지고 있고 사용자가 직접 만들 수 있다. (자세한 것은 65page or 6장)

<DIV style="BORDER-BOTTOM: #9fd331 1px dashed; BORDER-LEFT: #9fd331 1px dashed; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: #e7fdb5; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: #9fd331 1px dashed; BORDER-RIGHT: #9fd331 1px dashed; PADDING-TOP: 10px" class=txc-textbox>자주 쓰는 확장 명령어
!process : 현재 프로세스의 정보를 보거나 현재 윈도우 운영체제에서 실행 중인 모든 프로세스의 정보를 보여주는 명령
!gle : GetLastError의 약자로 Win32 API인 GetLastError()와 같이 마지막으로 설정된 Win32 Code를 보여주는 명령이다.
!error : Win32 Error Code나 NTSTATUS Code를 해석해 문자열로 보여주는 명령이다.
!analyze : 덤프 파일을 열었을 때 자동으로 분석을 하는 데 사용하는 명령이다.
대표적인 확장 명령어
!analyze : displays information about the current bug check
!cpuid : displays information about the processors on the system
!error : decodes and displays information about an error value
!gle : displays the last error value for the current thread
!obja : displays the attributes of an object in the object manager
!peb : displays a formatted view of the information in the process environment block(PEB)
!teb : displays a formatted view of the information in the thread environment block (TEB)
!token : displays a formatted view of a security token object
!process : displays information about the specified process or all
!stacks : displays information about the current kernel stacks
!thread : displays summary information about a thread
!zombies : displays all dead ("zombie") processes or threads
!drivers : displays a list of all drivers loaded
!devnode : displays information about a node in the device tree
!devobj : displays detailed information about a DEVICE_OBJECT
!devstack : displays a formatted view of the device stack
!drvobj : displays detailed information about a DRIVER_OBJECT


유저모드 명령줄
0:000
0은 프로세스 번호이고 000은 스레드 번호이다.
커널모드 명령줄

프로세스나 스레드 정보 표시가 없으므로 현재 어떤 프로세스의 어떤 스레드인지 확인하려면 !process, !thread 명령으로 직접 확인해봐야 한다.
멀티 프로세서는 현재 프로세서 번호를 포함해 아래처럼 나온다.

 

하이퍼스레딩을 지원하는 프로세서 하나는 두 개의 프로세서가 존재하는 것으로 나온다.
듀얼 코어 프로세서 하나는 2개의 프로세서로 나온다.
하이퍼스레딩을 지원하면서 듀얼 프로세서이면 4개로 나온다. 이러한 프로세서를 두 개 사용하면 8개의 프로세서로 나타난다.

 

출처

문헌 : WinDbg로 쉽게 배우는&nbsp;Windows Debugging
http://tiktoor.tistory.com/25

 

posted by 미스터리 DKL
srv*.*http://msdl.microsoft.com/download/symbols

 

posted by 미스터리 DKL