저번에 배웠던 MessageBox 코드 삽입을 이용해서 이번에는 기본 프로그램인 노트패드를 이용해 보자.

테스트 환경은 Windows 7 SP1에서 테스트 하였다.

윈도우7에서는 기본적으로 ASLR을 사용하므로 기본 베이스 주소가 랜덤하게 바뀐다. 그렇기 때문에 일단, 이 옵션을 제거하고 시작한다. 제거하는 방법은 http://www.reversecore.com/69 여기를 참고하였다.


노트패드의 원본 DLL Characteristics 값은 8140이다. 이 값을 8100 으로 만들어 줘야 ASLR 기능을 끌 수 있다.

Hex Editor를 이용해서 파일 오프셋 13E 위치에서 8140 값을 8100으로 바꿔주면 된다.

그다음 Impoart Address Table을 참고해서 MessageBox 주소를 얻으면 된다.


MessabeBox 함수는 USER32.dll 에 있고 user32.dll 이 로드되는 메모리의 위치는 11A8이 된다. 노트패드의 ImageBase 주소는
0x01000000 가 되므로 user32.dll 이 로드되는 위치는 0x010011A8 이 된다.

user32.dll 의 맨 첫번째 함수는 SetActiveWindow 의 파일 오프셋 주소는 5A8이 되고, MessageBoxW의 파일오프셋은 668이다.

이걸로 계산해보면 MessageBoxW의 위치는 0x01001268 이 된다는 것을 알 수 있다. MessageBoxW함수는 유니코드를 입력받는 함수이므로 텍스트 문자열을 유니코드로 맞춰줘야 한다. 유니코드로 만든 문자열을 추가하고 앞서 소개했던 코드를 넣으면 메모장이 실행되기 전에 먼저 원하는 메세지 박스를 먼저 띄울 수 있다.



+ Recent posts