EASY7
스택과 레지스터 실습 (010 editor, OllyDbg, IDA 이용) 본문
C언어로 작성된 두 수를 더해서 리턴해주는 함수를 분석해보자.
|
#include<stdio.h> int sum(int a, int b){ return a + b; } int main{ int result; result = sum(9 + 4); printf(result); } |
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함수 주소 확인하기


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 |