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 |