최신목록

2015년 8월 7일 금요일

[WinDbg] 조건부 브레이크포인트 (breakpoints with commands)

windbg로 rdp 리버싱중 rdpwsx!WsxIcaStackIoControl의 38009b 파라미터를 넣었을때만 리버싱을 진행하고 싶었다.
하지만 StackIoControl은 입력 파라미터에 따른 output 데이타가 다른 함수로 많은 정보를 이 함수로 얻어내고 있는 듯 보였다. 하지만 나는 38009b 일때의 정보만이 관심이 있을뿐...
조건을 걸어 브레이크를 걸수 있으면 좋을거 같단 생각이 들었다.

아래 사이트는 common windbg commands 이다.
http://windbg.info/doc/1-common-cmds.html

windbg에는 breakpoints를 걸때 사용할 수 있는 options 및 commands를 지원하여 확장성 및 편의성을 높이고 있었다.

bp [Addr][Options]
bp [Addr]["CmdString"]


단순히 hitting 수로 거는 옵션을 제공하고 조건문을 넣을수 있는 cmdstring을 지원했다.

나는 bp rdpwsx!WsxIcaStackIoControl ".if(r9==0x38009b){} .else{gc}" 로 원하는 조건에 맞는 순간을 잡을 수 있었다.
시스템 리버싱할때는 레지스터값을 주로 보겠지만 드라이버에서 변수값을 조건에 넣고 싶을때는 아래와 같이 사용한다.
bp Function ".if@@(변수==값){} .else{gc}"


좀 더 자세한 조건부 사용법은 아래 사이트를 참고하자.
https://msdn.microsoft.com/en-us/library/windows/hardware/ff556853(v=vs.85).aspx

좀 더 많은 조건부를 사용해보고 다시 정리하도록 해야겠다.

댓글 없음:

댓글 쓰기