Windbg
```c
1: kd> x HelloDriver!gTraceFlags
fffff801`908a3020 HelloDriver!gTraceFlags = 0
1: kd> ed HelloDriver!gTraceFlags 0xffffffff
1: kd> x HelloDriver!gTraceFlags
fffff801`908a3020 HelloDriver!gTraceFlags = 0xffffffff
`` ed`` : e는 edit, d는 DWORD. `` eq``같은 것도 가능하다.
Windbg에 OutputDebugString로 출력되는 디버그 스트링 찍기
커널의 ``c Kd_DEFAULT_Mask``와 ``c &``연산을 하기 때문에, 기본적으로 아무것도 출력되지 않도록 되어있다.
따라서 이 값을 ``c 0xffffffff``로 설정해준다.
주의!! dbgview 켜놓으면 여기서 먼저 가져가서 windbg에 안뜬다!!
```c
0: kd> ed nt!Kd_DEFAULT_Mask 0xffffffff
0: kd> dd nt!Kd_DEFAULT_Mask L1 // 뒤에 L1 붙이면 1개만 출력
fffff801`9161df68 ffffffff
`` dd`` : Display DWORD
```c
1: kd> bp HelloDriver!DriverEntry
1: kd> bl // breakpoint list
0 e Disable Clear fffff801`908d6000 0001 (0001) HelloDriver!DriverEntry
1: kd> bc 0 // 삭제
1: kd> bu DriverName!DriverFunction // break unresolved symbol.
// 현재 해당 심볼이 안올라온 상태에서, 나중에 해당 심볼이 나타나면 break 걸리도록 설정.
코드에서 break point 넣기
디버깅 심볼 추가하기
NT Kernel debugging symbol 다운로드 받기
```c
kd> .symfix C:\symbols
kd> .sympath // symbol 경로 확인
kd> .reload
```
* symbol matching
Windows의 심볼 파일 확장자는 `` .pdb``다.
심볼 매칭 과정은 다음과 같다.
1. binary의 PE section 중, debug section이 존재하는데, 여기에 `` .pdb``파일의 경로가 기록되어 있다.
2. 이 경로에 가서 `` .pdb`` 파일을 불러와 심볼을 매칭한다.
3. ASLR이 적용되어 있는 경우라도, 어차피 ImageBase + RVA 식으로 접근하기 때문에 ImageBase만 알고 있다면 symbol matching이 가능하다.
* 원격으로 커널 디버깅 하는 경우, windbg는 호스트에서 실행되기 때문에, `` .pdb``파일을 호스트 PC에서 찾는다. 그래서 그냥 호스트에서 컴파일하고, 게스트로 넘긴 다음 디버깅하면 알아서 호스트에 있는 `` .pdb``파일(컴파일 할 때 생성된)을 불러온다.
etc command
```
!process
dt _eprocess [address]
.hh [command] // help 창 띄워준다
'OS > Windows' 카테고리의 다른 글
[Windows] 작업 스케줄러 / 시작프로그램 (0) | 2017.11.25 |
---|---|
[Windows] 환경변수 (0) | 2017.02.15 |
로컬 접근으로 SAM & SYSTEM 획득 및 Windows password crack (0) | 2016.12.25 |
[Windows] 공유 폴더 설정 (0) | 2016.11.01 |
Windows Authentication [ SAM ] (0) | 2016.10.14 |