[WinDbg] DriverEntry부터 디버깅 시작하기
break point
디버깅이 준비가 되었으면 이제 시작해야겠죠
에러가 난 덤프 파일이 있을수 있지만 아직 준비단계이기에 단축키 및 간단한 명령어등을 이용해서 WinDbg와 친해지도록 하겠습니다.
디버깅은 오류가 났을때에 덤프를 통해서 분석을 하기도 하고 Kernel live debugging을 하기 위해서도 사용할 수 있습니다.
오늘의 디버깅 방법은 driver가 load되는 시점에 bp를 걸어서 원하는 함수를 디버깅 하는 방법을 해보겠습니다.
사용되는 단축키는
F8 (step in - 함수 진입시 안으로 들어갈 때)
F9 (현재 cursor break point)
F10 (step over - 함수 안으로 진입하지 않고 다음 스텝으로 진행)
Ctrl + Break (동작중 break point)
사용되는 명령어
sxe av
(set exception break when access violation)
sxe ld module
(set exception break when [module] load
sxe ud module
(set exception break when [module] unload
bp
(break point address)
bl
(break point list)
bc
(break point clear)
lm
(load module list)
g
(go)
start
driver를 load하기 전 다음과 같이 load 시점에 exception을 걸어둡니다.
kd> sxe ld hacker_n0te.sys
kd> g
driver load시 다음과 같이 break point가 잡힐 것 입니다. (int 3
은 어셈블리에서 break point 를 나타냅니다.)
nt!DebugService2+0x5:
fffff800`751d58e5 cc int 3
kd> lm
start end module name
fffff800`00000000 fffff800`0005f000 volmgrx (deferred)
fffff800`0005f000 fffff800`00076000 vsock (deferred)
fffff800`00084000 fffff800`000ea000 mcupdate_GenuineIntel (deferred)
fffff800`000ea000 fffff800`000f8000 werkernel (deferred)
...
fffff800`0234f000 fffff800`02357000 hacker_n0te (deferred)
...
load된 module list에 내가 작성한 module이 올라온것을 확인했으면 bp를 걸면 됩니다.
kd> bp hacker_n0te!DriverEntry
kd> g
위와 같이 DriverEntry를 bp로 잡아주어도 되고, 직접 작성한 function등을 잡아도 됩니다.
break point의 목록은 bl
명령어로 확인 가능하며
break point를 제거하기 위해선 bc *
혹은 bc [frame number]
등의 명령어를 사용할 수 있습니다.
다음 스크린샷에서 Disassembly 창을 보시면 DriverEntry function에서 break point가 걸린것을 확인하실 수 있습니다.
마찬가지로 bp 를 이용하여 module!function으로 원하는 함수에 bp를 걸고 디버깅이 가능하며,
F8, F9, F10 키를 이용하여 스텝단위로 디버깅을 할 수 있습니다.
또한 소스코드가 있는경우엔 Symbol 연결시 자동으로 로드 되니 더욱 편리하게 디버깅이 가능합니다.
'⌨ DEVELOPMENT > Debugging' 카테고리의 다른 글
dump 분석을 위한 windbg 64bit 다운로드 및 설치 (0) | 2019.08.04 |
---|---|
[Debugging] 프로세스 크래시 발생시 덤프 남기기 (0) | 2016.01.22 |
[Assembly] 디버깅을 위한 8086 어셈블리 (0) | 2016.01.17 |
[WinDbg] 특정 프로세스 디버깅하기 (0) | 2016.01.13 |
[windows] 윈도우 64bit Driver 서명없이 로드하기 (2) | 2016.01.10 |
[WinDbg] vmware에 WinDbg 연결하여 디버깅 준비하기 (0) | 2016.01.06 |
[WinDbg] Kernel Debugging을 위한 디버거 다운로드 및 설치! (0) | 2016.01.05 |
visual studio 디버깅시 디스어셈블리 확인하기 (0) | 2015.12.31 |
댓글
이 글 공유하기
다른 글
-
[Assembly] 디버깅을 위한 8086 어셈블리
[Assembly] 디버깅을 위한 8086 어셈블리
2016.01.17 -
[WinDbg] 특정 프로세스 디버깅하기
[WinDbg] 특정 프로세스 디버깅하기
2016.01.13 -
[windows] 윈도우 64bit Driver 서명없이 로드하기
[windows] 윈도우 64bit Driver 서명없이 로드하기
2016.01.10 -
[WinDbg] vmware에 WinDbg 연결하여 디버깅 준비하기
[WinDbg] vmware에 WinDbg 연결하여 디버깅 준비하기
2016.01.06