ii4gsp

[Reversing] Hello World 문자열 패치 본문

리버싱

[Reversing] Hello World 문자열 패치

ii4gsp 2020. 8. 20. 22:32

HelloWorld.exe
0.78MB

#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
Comments