참조 강의: 유튜브 Fin 강의
5강. 스택 (Stack)
스택의 역할
1. 함수 내 변수 임시저장
2. 함수 호출 시 매개변수(파라미터) 전달
3. 복귀 주소 저장
스택의 특징
FILO (First - In - Last - Out) 선입후출 방식

Push: 스택에 데이터를 넣는 작업
Pop: 스택에 마지막으로 들어온 데이터를 빼는 작업
Top: 스택의 가장 위에 들어있는 값
Bottom: 스택의 가장 아래에 들어있는 값
스택에서 중요한 레지스터
ESP: 스택 포인터, 유동적으로 값이 바뀜
EBP: ESP의 값을 저장해 둠, 부동적인 레지스터
6강. 스택 프레임 (Stack Frame)
EBP를 이용하여 스택 내의 변수 파라미터 복귀 주소에 접근하는 기법
예시 어셈블리 코드)
Push EBP // EBP 스택에 백업
MOV EBP, ESP // (EBP = ESP) ESP를 EBP에 저장함으로써 ESP 백업
. // 함수가 실행되는 부분
. // 실행 부분에서 ESP 값 변경돼도 백업 돼 있기 때문에 상관없다
MOV ESP, EBP // ESP 복원
POP EBP //EBP 복원
ESP 값이 얼마나 변하든 EBP를 기준으로 안전하게 해당 변수나 파라미터, 복귀 주소에 접근이 가능하다.
하지만 스택에 값을 저장해둔다는 점에서 보안상 취약해질 수 있으므로 주의해야 한다.
7강. 크랙미 실습


cmp = if 구문
je, jz = jmp equal
jmp = jmp zero (무조건 jmp 실행시킴)
cmp구문의 zero flag값이 1이 되지 않아 바로 실패 창으로 넘어가는 상황
je 대신 jmp로 메모리 변조를 해줌으로서 바로 성공 화면으로 넘어가게 해 주면 된다.
8강. 함수호출규약
함수를 호출할 때 매개변수(파라미터)를 어떤 식으로 전달하는지에 대한 약속
1. Caller(호출자): 함수 호출
2. Callee(피호출자): 함수 호출 당함
함수 호출 규약
1. Cdecl
C언어에서 사용된다.
Caller(호출자)에서 스택을 정리한다.
2. Stdcall
Win32 API에서 사용된다.
Callee(피호출자)에서 스택을 정리한다.
3.Fastcall
Stdcall과 동일하지만 x64아키텍처에서 사용된다.
ECX, ESX, RDX, RCX 레지스터를 이용해 더 빠른 호출이 가능하다.
매개변수 값이 여러개일때 최대 두 개까지 레지스터를 통해 전달하고 나머지는 스택으로 이동시킨다.
9강. PE FILE FORMAT
PE FILE: windows OS에서 실행 가능한 파일
* PE는 32비트 용어, 64비트 PE FILE표기: PE+, PE32+
PE FILE의 헤더부분은 PE FILE의 핵심 부분으로 수많은 정보가 구조체 형태로 저장돼 있다.
PE FILE 종류
실행 계열: EXE, SCR(소스코드 확장자)
드라이브 계열: SYS, VXD
Library 계열: DLL, OCX, CPL, DRV
OBJ 계열: OBJ ->실행할 수 없지만 PE FILE에 포함돼 있다.
object 파일은 원래 실행이 불가능하다.
10강. DOS HEADER
PE FILE 헤더 구성
DOS Header - DOS Stub - NE Header - Section Header
VA & RVA
VA: Virtual Adress
절대주소(고유한 경로) 변할 수 없는 값이기 때문에 잘 사용하지 않는다.
RVA: Relative-Virtual Adress
상대 주소(현재 위치를 기준으로 파일의 상대적인 경로를 입력)
ImageBase: 변수(현재위치)
RVA + ImageBase = VA
Relocation(재배치): 상대주소가 빈 공간을 찾는 과정
재배치가 발생했을 때 쉽게 주소를 바꿀 수 있기 때문에 RE FILE헤더에서 VA보다 RVA를 많이 사용함
MS-DOS에서 호환성을 위해 만든 헤더
IMAGE_DOS_HEADER 구조체: window의 모든 프로그램 앞에 존재
e_magic: DOS의 Signature, 아스키코드로 MZ(헥사코드로 4D 5A)를 나타낸다.
e_lfanew: NT Header의 오프셋을 표시한다.
'2. Reversing (리버싱) > 2) 개념 정리' 카테고리의 다른 글
[2022.03.19] 어셈블리어, 레지스터 (1) | 2022.03.20 |
---|---|
[2021.11.13] 패킹과 언패킹, UPX, 매뉴얼 언패킹, 코드 인젝션 (0) | 2021.11.15 |
[2021.09.18] abex crackme 1&2, 어셈블러 (0) | 2021.09.18 |
[2021.09.11] 리버싱을 위한 준비, codeengn basic 01 (0) | 2021.09.12 |
[2021.09.11] 코드 분석, PE FILE FORMAT (0) | 2021.09.11 |