레이블이 Debugging & Reversing인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Debugging & Reversing인 게시물을 표시합니다. 모든 게시물 표시

2015년 3월 15일 일요일

[Windbg] e 명령어 활용

오늘은 e 명령어에 대해 알아보자.
e 명령은 메모리에 들어있는 값을 바꾸는 enter 명령어다.
프로세스가 실행 중인 레지스터 값도 바꿀 수 있고, 메모리 변수 값도 바꿀 수 있다.

그럼 바로 실습 들어가시겠다.
 (1) Windbg를 실행한다.
 (2) Ctrl+E 누르고 C:/windows/system32/notepad.exe를 실행

자 여기까지 했으면 메모장이 실행됨과 동시에 Windbg가 제어권을 가지고 있을 것이다.
이제 메모장이 출력하는 MessageBoxW의 title 스트링을 바꿔보자.
아래 메시지 박스의 타이틀을 "메모장"에서 "사람인"으로 바꿀 것이다.


우선 메모장이 MessageBoxW를 호출할 때 break point가 잡혀야 하므로,
windbg에서 bp user32!MessageBoxW 한다.

         bp user32!MessageBoxW

이제 메시지 박스가 호출되도록, 메모장 - 편집 - 바꾸기를 클릭하고,
찾을 내용에 "fewf" 아무거나 입력한 후 [다음 찾기]를 클릭하면
MessageBoxW가 호출 되기 직전에 windbg로 제어권이 넘어갈 것이다.

자 이제 "메모장" 이란 타이틀은 MessageBoxW(hwnd, pwcsTitle, pwcsMsg, ..)
2번째 인자로 넘어간 다는 것을 알 수 있다.

그럼 확인해 보자.

0:000> ddu ebp+0n8
0009f360  002b09ea "ﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮ"
0009f364  03de6dd8 ""ff"을(를) 찾을 수 없습니다."
0009f368  0031f218 "메모장"
0009f36c  00000040

ebp+8이   첫번째 인자 : hwnd 이고,
ebp+12가 두번째 인자 : pwcsTitle
ebp+16이 세번째 인자 : pwcsMsg 이다.

그럼 ebp+12가 가리키고 있는 값을 바꾸면 되겠다.
ebp+12의 값은 0031f218 이다!

0:001> dd ebp+0n12
041dfe94  0031f218 77b99f72 00000000 73731998
041dfea4  00000000 00000000 00000000 00000000

0031f218가 "메모장" 문자열의 [0] 번째 주소다.

0:000> du 0031f218 
0031f218  "메모장"

자 이제 0031f218 주소에 들어있는 값을 바꾸면 되겠다.

ezu : e 변수 값 변경 / zu 유니코드 널 스트링으로!
0:000> ezu 0031f218 "사람인"

du : 유니코드 스트링으로 보여줘
0:000> du 0031f218 
0031f218  "사람인"

자 이제 MessageBoxW로 들어온 값을 아래와 같이 바꿨으니 g 실행하면!!
메시지박스가 출력되면서  MessageBoxW(hwnd, "사람인", ..., ...) 으로 출력된다!





메모리가 변경됐으니, 다시 MessageBoxW가 호출되도 "메모장" 대신 "사람인"으로 
출력되겠다. 이상!




Advanced Windows Debugging [1] - 디버깅 툴 소개

팀에서 막내와 함께 윈도우 디버깅 스터디를 해보자고 시작한 책이 바로 이 책이다.

"모르는 것은 죄가 아니다 하지만 알려고 하지 않는 것은 대죄다."

 


1. 각종 디버깅 툴 소개
이 장에서는 이 책에서 사용하는 디버깅 툴 뿐만 아니라, 유용한 디버깅 관련 툴을 간단히 소개하고 넘어간다. 그 내용을 정리하면, 크게 세가지로 분류할 수 있다.

  • 메모리 누수 관련 툴
    • Leak Diagnosis Tool : LD Graph와 함께 사용한다.
  • 디버깅 툴
    • Windbg : GUI 기반 유저/커널모드 디버깅 툴.
                   x64버전 Windbg는 x86 프로세스도 디버깅 된다.
    • CDB      : Console 기반 유저모드 디버깅 툴.
                   부팅시 그래픽 서브시스템이 초기화 되기 전 꼭 필요한
                   OS 서브 시스템 프로세스에 어테치가 가능하다.
    • NTSD   :
    • KD       : Console 기반 커널 모드 디버깅 툴.
  • 프로세스/네트워크 룩업 툴
    • Process Explorer
    • Wireshark