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 이다!
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가 호출되도 "메모장" 대신 "사람인"으로
출력되겠다. 이상!