안경잡이개발자

728x90
반응형

  OllyDbg는 어셈블리어 수준의 디버깅 도구입니다. 무료로 이용할 수 있으며, 돌아가고 있는 런타임 환경의 프로그램에 붙여서 동적 분석을 진행할 수 있도록 해줍니다. 흔히 프로그램을 분석해야 할 때 단순히 소스코드만 보고, 실행 과정을 파악하기 어려울 수 있는데 그럴 때 쓰기 좋은 도구입니다.

 

  따라서 Dev C++을 이용하여 간단히 Hello World 프로그램을 작성한 뒤에 이를 분석하여, 프로그램을 패치(Patch)하는 실습을 해보겠습니다.

 

#include <stdio.h>

int main(void) {
	printf("Hello World\n");
	return 0;
}

 

  32-bit 프로그램으로 설정한 뒤에 프로그램을 생성하겠습니다.

 

 

  이후에 다음의 경로에 접속하여 OllyDbg를 설치합니다. 아래쪽으로 내려오면 [download] 링크가 있으며, 여기에 들어가서 OllyDbg 1.10 버전을 받으시면 됩니다.

 

  ▶ OllyDbg 홈페이지: http://www.ollydbg.de/ 

 

 

  이후에 다음과 같이 [Download OllyDbg] 버튼을 눌러 OllyDbg를 설치합니다.

 

 

OllyDbg는 기본적으로 [관리자 권한으로 실행] 해주셔야 합니다.

 

 

이후에 [F3]을 눌러서 바로 특정한 프로그램을 열어 디버깅을 진행할 수 있습니다.

 

 

  그럼 다음과 같이 프로그램 창이 실행 되고, 왼쪽 위에 실행 버튼을 눌러서 프로그램을 동작시킬 수 있습니다.

 

 

  실행 버튼을 누른 결과 'Hello World'가 출력됩니다.

 

 

※ 프로그램 디버깅 및 패치 해보기 ※

 

  이제 'Hello World'를 다른 문자열로 바꾸어 출력하도록 해봅시다. 먼저 Ctrl + F2를 눌러서 Restart를 합니다. [Hex dump]를 확인하여 비어 있는 메모리 주소를 클릭한 뒤에 스페이스 바(Space Bar)를 눌러서 DUMP 수정 창을 열 수 있습니다.

 

 

  다음과 같이 정보를 수정 할 수 있습니다. 그냥 바꿀 아스키 코드를 입력하여 [OK]를 누르시면 됩니다.

 

 

  저는 'ABC HELLO!'라고 변경해보았습니다.

 

 

  이후에 "Hello World" 문자열을 참조하는 부분에서 주소 값을 "ABC HELLO!"의 주소 값으로 설정합니다. 저는 주소 값 403310의 위치에 문자열을 넣었으므로 이 주소로 설정했습니다.

  

  

    실행 결과, 정상적으로 변경된 문자열이 출력되었습니다.

  

 

  다른 방법도 존재합니다. 별도의 문자열을 메모리에 기록한 뒤에 그것을 가리켜 출력하도록 하는 것이 아니라,  'Hello World'가 원래 존재하던 메모리 주소에서 값을 변경하는 방법입니다. Hex Dump창에서 [Ctrl + G]를 눌러 "Hello World"의 주소 검색할 수 있습니다.

 

 

  이제 해당 주소 값으로 이동하여 "Hello World"를 "Hell  World"로 변경해보았습니다.

 

 

  이번에 실행해 보시면 마찬가지로 정상적으로 실행됩니다.

 

 

※ 패치된 파일 저장하기 ※

 

  프로그램 패치 후에 저장하는 방법 또한 간단합니다.

 

 

  [Hex Dump]의 내용을 변경한 이후에 바로 우클릭하여 [Copy to executable file]을 누릅니다.

 

 

  이제 열린 창에서 다시 우클릭 하여 [Save File]을 눌러서 저장을 진행하시면 됩니다.

 

 

  저장된 파일을 실행해 본 결과, 정상적으로 변경된 코드 내용으로 출력되는 것을 확인할 수 있습니다.

 

 

728x90
반응형