리버스 엔지니어링

리버싱 연습 2 - 직접 문자열 패치

Injel me 2020. 6. 30. 19:41
리버싱 핵심원리(부제:나뭇잎책)의 앞부분을 읽으면서 Hello World 프로그램을
문자열 패치 시키는 부분이 있어 실습해봄.

1
2
3
4
5
6
7
#include <Windows.h>
int WINAPI WinMain(HINSTANCE hinst, HINSTANCE pinst, LPSTR Cmdline, int cmdshow)
{
    MessageBox(NULL, L"Hello World!", L"Hello", MB_OK);
    return 0;
}
cs
왜인지 책이랑 똑같이하면 오류나길래 기억나는 대로 WinMain으로 짰다.

WinMain을 찾아 가 보는 과정은 스킵
f8로 실행시켜가다가 MessageBox가 뜨는 곳에서 bp걸고 다시 실행해 가면서 따라갔다.
슬슬 stub code가 눈에 익어야 하는데.

IMAGE DOS HEADER 등을 인자로 넣고 부른 주소에는

WinMain의 위치를 부르는 코드가 있다.(주소에 라벨을 붙였다)

점프문을 따라가면 딱 보이는 메인 형태이다.

함수 프롤로그가 보이고 MessageBoxW API를 호출하기 위해 인자를 넣고
API를 호출하는 모습이 보인다.
저 문자열의 주소가 직접 보이니 Hex 창에서 따라가서
직접 바꾸는 간단한 실습이다.


성공이다. 문자열 패치.

'리버스 엔지니어링' 카테고리의 다른 글

리버싱 공부 - 레지스터  (0) 2020.06.30
리버싱 연습 - 점프에 관하여  (0) 2020.06.30
리버싱 연습 2-2 NULL 패딩에 패치  (0) 2020.06.30
리버싱 연습 1  (0) 2020.06.30
올리 디버거 단축키  (0) 2020.06.30