본문 바로가기

정보보안/리버싱

reverse_assembly 기본명령어 MOV

17_어셈블리(MOV)

 

 - 분석 환경 : WindowsXP(32bit)

 - 분석 도구 : OllyDbg, VS2008

 

 

1. MOV

 

 - 형식 : MOV [Destination] [Source]

 - 내용 : [Source]를 [Destination]로 대입/이동한다. 이때, [Source] 값은 변경되지 않는다.

 - 예제 : MOV ECX, EAX

 

 

 1) VS 2008을 이용하여 'mov.exe' 파일을 제작한다.

- 파일 -> 새로 만들기 -> 프로젝트 -> 빈 프로젝트 -> 위치(04_테스트) & 이름(mov) -> 확인  - '소스 파일' 우클릭 -> 추가 -> 새 항목 -> 'C++ 파일(.cpp)' 선택 -> 이름(mov) -> 추가 / - 파일 -> 모두 저장 -> 닫기

 2) 'cl' 명령어를 이용한 최적화 컴파일 실시

3. 올리디버거를 이용한 'mov.exe' 분석

 

 - 메모리 주소, 레지스터 저장 값, 스택 내용, 메모리 덤프 내용 확인

 

1) Main함수 찾기(F8)

2) Main함수 진입(F7) – 함수 프롤로그, 함수본체, 함수 에필로그 확인

< Main함수 >

 

< 함수 프롤로그 >

00401000  /$  55            PUSH EBP

00401001  |.  8BEC          MOV EBP,ESP

 

< 함수 본체 >

함수 본체의 모습

00401003  |.  83EC 08       SUB ESP,8

-      우선, int형 지역변수 num1,num2를 위한 공간을 할당하기 위해 SUB ESP,8 을 통해 4byte * 2 만큼 스택에 공간을 늘려준다.

-       

00401006  |.  C745 F8 06000>MOV DWORD PTR SS:[EBP-8],6

-      위의 명령어는 정수형 변수 num1에 6이라는 값을 초기화하는 명령어이다.

다음과 같이 [EBP-8]에 6이 저장된 것을 확인할 수 있다.

0040100D  |.  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]

-      [EBP-8]에 있던 6을 EAX에 복사한 후,

00401010  |.  8945 FC       MOV DWORD PTR SS:[EBP-4],EAX

-      EAX의 값을 [EBP-4]에 저장한다. 위의 명령어는 정수형 변수 num2에 num1의 값을 대입하는 num2=num1; 의 정에 해당되는 명령어이다.

 

다음과 같이 num2자리인 [EBP-4]에 num1의 값이 대입된걸 확인할 수 있다.

00401013  |.  33C0          XOR EAX,EAX

     그 후, EAX의 값을 0으로 초기화 한 후 함수 에필로그가 진행된다. 

 

< 함수 에필로그 >

00401015  |.  8BE5          MOV ESP,EBP

00401017  |.  5D            POP EBP

00401018  \.  C3            RETN

함수 에필로그가 진행된 후, Main함수는 POP EBP를 통해 소멸된다.