EASY7

스택과 레지스터 실습 (010 editor, OllyDbg, IDA 이용) 본문

보안 공부/리버싱

스택과 레지스터 실습 (010 editor, OllyDbg, IDA 이용)

E.asiest 2019. 10. 28. 17:56

C언어로 작성된 두 수를 더해서 리턴해주는 함수를 분석해보자.

#include<stdio.h>

int sum(int a, int b){

  return a + b;

}

int main{

  int result;

  result = sum(9 + 4);

  printf(result);

}

SumFunction.exe
0.03MB

 

 

 

1. HxD 또는 010 editor를 이용해 사전 조사하기

ImageBase 0x00400000
entrypoint 0x00401061
.text, rdata의 virtual address(RVA)?

.text 의 RVA 1000

.rdata 의 RVA 5000

메모리에 실제 로드되는 주소는?

.text의 실제 메모리에 로드되는 주소 0x00401000

.rdata의 실제 메모리에 로드되는 주소 0x00405000

RegisterExample.exe가 컴파일된 날짜는 언제인가? 12/12/2016 13:43:01 (NT_Header에 time stamp)

 

 

2. IDA에서 F5를 누르면 C언어로 번역해서 보여준다.

2-1. F5 누르기

2-2. sub_401000 함수를 더블클릭하면 해당 함수를 c언어로 번역해준다.

 

3. main함수와 sum함수 주소 확인하기

main함수: 00401010

 

sum 함수 : 00401000

 

4. OllyDbg 열기

4-1 main함수에 breakpoint 표시하기

ctrl + g를 이용해서 00401010으로 이동해서 F2

 

4-2. F9로 실행

4-3. F7를 클릭해가면서 스택과 레지스트리 변화 확인.

 

<스택과 레지스터의 변화 확인>

1.PUSH 4

스택 주소(0012FF80)에 4 저장

ESP 레지스터에 스택 주소(0012FF80) 저장.

 

 

 

2. PUSH 9

스택(0012FF7C)에 9 저장.

ESP 레지스터에 스택 주소(0012FF7C) 저장.

 

3. CALL Register.00401000

sum함수로 이동.

스택에 리턴될 주소 저장됨.

4. MOV EAX, DWORD PTR SS:[ESP+8]

EAX레지스터에 4 대입.


5. MOV ECX, DWORD PTR SS:[ESP+4]

ECX 레지스터에 9 대입.

 

6. ADD EAX,ECX

4+9=13 더한 값을 EAX에 대입

D는 13이다.

7. main함수로 리턴된 후

PUSH EAX

EAX를 스택에 넣기

 

그후론 printf 함수가 나온다!

분석 끝!

 

 

'보안 공부 > 리버싱' 카테고리의 다른 글

Exeinfo PE/PEiD 툴 사용법  (0) 2019.11.17
UPX 패킹 / 언패킹 방법  (0) 2019.11.17
msdn  (0) 2019.10.28
010 editor 툴  (0) 2019.10.28
PE 구조에 대한 이해  (0) 2019.10.27
Comments