ii4gsp
[Reversing] Hello World 문자열 패치 본문
#include "windows.h"
#include "tchar.h"
int _tmain(int argc, TCHAR *argv[])
{
MessageBox(NULL,
L"Hello World!",
L"Reverse",
MB_OK);
return 0;
}
실행파일의 소스코드이다.
먼저 정적분석을 해보면, 프로그램 실행시 "Hello World!" 라는 문자열이 출력되고 프로그램이 종료된다.
목표는 "Hello World!" 라는 문자열을 "Hello Reversing" 으로 바꿔보겠다.
디버거를 열어서 마우스 우클릭 -> Search for -> All referenced text strings 를 클릭해주자.
더블클릭을 하여 "Hello World!" 문자열이 있는 곳으로 이동해주자.
이동을 해보면 PUSH HelloWor.004EDE80 코드가 보인다.
즉, 0x4EDE80 주소에 "Hello World!" 문자열을 넣어주었다.
"Hello World!" 문자열이 있는 주소를 알아냈으니, dump 창에서 단축키 [ctrl+G] 를 눌러 0x4EDE80 주소로 이동해주자.
유니코드는 알파벳 한 글자당 2바이트가 필요하므로 NULL 처리가 되어있다.
드래그 후 단축키 [ctrl+E] 를 눌러주자.
Edit 창에서 원하는 문자열로 수정해주고 OK 버튼을 눌러주자.
MessageBox() 함수의 인자값이 "Hello Reversing" 으로 바뀌었다.
프로그램을 실행시켜 보자.
성공적으로 "Hello World" -> "Hello Reversing" 으로 문자열이 패치되었다.
단점
기존의 문자열보다 더 긴 문자열로 패치 했을때, 뒤에 어떤 데이터가 존재할 수 있기 때문에 기존 문자열의 길이를 넘는 문자열로 덮어쓰는 것은 아주 위험하다.
'리버싱' 카테고리의 다른 글
[Reversing] Hello World (0) | 2020.08.18 |
---|---|
리버싱 (Reversing) 예제 (0) | 2020.01.07 |
FSC_Level1 (0) | 2020.01.06 |