WINGDB
(register), A (Assemble) , BL (breakpoint List), BC (breakpoint clear), BD(break disable),
BE(breakpoint Enable), BA(Break on Access), BP(set breakpoint) dd(display memory)
dl(display linked list), ds(display string), DT(display type), k (display stack backtrace), e(enter values), s(search memory), r (register), g(go), p(step), pc(step to next call), tb(trace to next branch)
Meta commnad :
- .attach (attach process)
- .cls(clear)
- .sympath (symbol path) **중요 윈도우 라이브러리는 항상 해줘야함
key event
- ctrl + break : process break (이후 브레이크 포인트로 분석가능)
- alt + 6 (call stack)
- f10 : step over f11 : step : out
u + 주소값 = x/i 효과
d + 레지스터 = x/x 효과
windbg 단축키 모음
g, F5 = 실행
Ctrl+Break = 멈추고 디버깅 시작
qd(quit and detach) = 디버기를 계속실행하면서 디버거 종료
.symfix [path] = 심볼파일 경로설정
.sympath = 등록된 심볼파일 경로 출력
.sympath+ [path] = 심볼파일경로 등록 (추가됨)
bl = break point 리스트 출력
bd [breakpoint id] = break point disable
be [breakpoint id] = break point enable
bc [breakpoint id] = break point clear
조건 브레이크 예제
bp [address] ".if @@(pData->dwMyFlag & 0x00010000) {}.else {gc}"
@@(c++코드) 조건이 성립하면 break, 그렇지 않다면 gc 명령어가 실행된다. gc는 F10
과 동일하다.
k = call stack 출력
kb = call stack 파라메터까지 출력
.srcpath = 소스경로 설정
dv = local 변수 리스트 출력, display value
db [변수이름] = 변수 데이타를 byte단위로 출력한다. display byte, dword..
dd = display dword
bpm r4 address = address위치의 메모리를 read 할때 break
lm = 모듈정보리스트 출력
lmvm [모듈이름] = 특정 모듈 정보 출력 (심볼파일이 설정되었는지 확인할때 필요)
.ecxr = dump파일을 열어볼 때, dump 파일의 레지스터와 스택포인트등 dump파일과
일치시킨다.
!analyze -v = dump파일을 열어서 분석할때 쓰이는 명령어다. 괜찮은듯
!address [변수or주소] = 메모리 속성을 출력한다.
.srcpath = 설정된 소스 경로를 보여준다. 추가하고 싶을때는 .srcpath+
.restart = 만약 실행파일로 테스트 중이라면 처음부터 다시 로드해서 시작한다.
~[thread number]s = 해당 쓰레드로 제어를 옮긴다. ex) ~2s = 2번 쓰레드로 이동
~* = 모든 쓰레드 출력
~*k = 모든 쓰레드의 콜스택정보 출력
~*kb = ~*k응용 (콜스택정보를 모두 출력한다. 바이트단위)
!handle [핸들] f = 핸들 정보 출력
dt [data type] [address] = address 에 있는 데이타를 data type 형태로 출력한다.
특정 데이타를 표현할 때 자주 쓰이는 명령어다. display type
!locks = CriticialSection 과 같은 동기화객체를 출력한다. 어떤 쓰레드에서 소유하고 있는
지도 나오니 Thread Hang 버그를 디버깅할 때 유용하다.
!htrace -enable = handle 이 생성되고 삭제되는 것을 추적한다. disable도 가능
!htrace -snapshot = 현재 handle 상태를 저장한다. 나중에 비교하기 위해서
!htrace -diff = 전에 snapshot으로 저장했던 내용과 지금의 내용과 비교한다. 비교한
내용 중, 닫힌 handle은 제외하고 남아있는 handle을 출력한다.
즉, 비교해서 다른 부분 중, 열려있는 것만 출력한다는 의미.
u [address] =
uf [함수이름] = 함수이름의 위치로 이동해 어셈블리코드로 출력한다.
s [-type] range patter = 메모리 내용을 검색하는 명령어
ex) s 0012ff40 0012ff60 'h' 'e' 'l' 'l' 'o'
ex) s -a 0012ff40 L20 "hello"
dds [Address] = (diplay word and symbols) 지정한 메모리에서 dword값을 읽어서 보여주고
그 값이 어떤 심볼과 연결된다면 심볼을 출력한다. 도움되는 명령어다.
x module!symbol = 함수나 전역변수의 이름을 입력하면 일치하는 심볼과 주소를 표시한다.
.dump option filename = 덤프파일 생성 option=/f, /m
.hh [text] = winDbg 도움말을 띄운다. text는 색인의 에디트창에 나온다. 엔터만 누르면 검색하게+
(open hiper text help)
!object [Address/path/name] = 객체의 정보를 보여준다.
!poolfind = 특정 메모리 태그를 가진 메모리를 찾는다.
ex) !poolfind ddk 0 : ddk 메모리 태그를 비페이징 풀에서 검색한다.
ex) !poolfind * 0 : 모든 태그의 메모리를 비페이징 풀에서 검색한다.
IDA
Quick View : Ctrl + 1 (문자열 검색시에 용의하다)
'System_Hacking' 카테고리의 다른 글
[ ROP gadget finder ] ROP 가젯 찾아주는 소스코드 (ARM MIPS x64 등등 지원) (0) | 2014.04.21 |
---|---|
Shellcode Database (0) | 2013.12.12 |
[gdb] gdb find 의 활용 (원하는 메모리 값 찾기) (0) | 2013.10.09 |
[Shellcode] open-read-write(stdout) (0) | 2013.07.27 |
32bit unistd.h System call Number (0) | 2013.07.21 |