리버싱 스터디 3주차에는 유튜브 영상을 통해 리버싱 기초 지식을 학습했다.
8-10강을 듣고 내용을 정리한 후 어려웠던 부분을 공유하며 질문을 통해 해결하는 시간을 가졌다.
참고한 유튜브 영상:
https://www.youtube.com/playlist?list=PLY12b4RRLcSdsxgVvTW3mnNzMjVrd8JhO
8강 함수 호출 규약
함수 호출 규약(Calling Convention)이란?
함수를 호출할 때 매개변수(파라미터)를 어떤 식으로 전달하는가? 에 대한 일종의 약속
용어
○ Caller(호출자) : 함수를 호출한 애
○ Callee(피호출자) : 함수 호출 당한 애
함수 호출 규악은 크게 3가지로 분류할 수 있다.
1. Cdecl 호출
- C언어에서 사용되는 방식
- Caller 스택을 정리하는 특징이 있음
Visual Code에서 다음과 같은 C언어 코드를 작성한다.
x64dbg에서 main함수를 찾는다.
add 함수 내부에 cdecl이 있는 것을 확인할 수 있다.
2. Stdcall 호출
- add 함수에서 정리함
- Win32 API에서 사용됨 Callee
Visual Code에서 다음과 같은 C언어 코드를 작성한다.
x64dbg에서 main함수 찾는다. 코드를 Cdecl과 다르게 바꿨는데 x64dbg에서 나오는 결과가 같아 강의 내에서 실습이 중단되었다. ( --> 실행 시키지 않고 바로 x64dbg로 확인한 것이 이유이지 않을까? 라고 추측함)
3. fastcall 호출
- Stdcall의 특징 모두 가짐
- x64 매개변수 4개
- ex) 최대 2개까지 ECX EDX RDX RCX로 이용하여 전달. 나머지는 스택으로 보냄
- 장점 : Register 이용해서 호출이 더 빠름 = 프로그램 속도가 빨라짐
[정리]
Cdel는 Caller에서 스택 정리
: C언어에서 사용됨
Stdcall Callee에서 스택 정리
: Win32 API 사용
fastcall std 동일하지만
: 매개변수를 최대 2개까지 레지스터를 이용하여 전달하고 나머지는 스택으로 정리
: x64 아키텍처에서 사용됨
9강 PE file Format(양식, 체제)
PE 파일
- windows OS 실행 가능한 파일을 의미
- 32bit PE 용어 : PE file 32bit
- 64bit PE 용어 : PE+ 또는 PE32+ (PE64 아님 주의)
PE file 종류
○ 실행 계열 : EXE, SCR
○ 드라이브 계열 : SYS, VXD
○ Library 계열 : DLL, OCX, CPL, DRV
○ Obj 계열 : OBJ (리버서한테는 관심이 필요없음)
○ object : 파일은 실행이 애초에 절대 불가능
PE file 헤더 부분에는 수많은 정보가 있다.
구조체 형태, 즉 PE File Format을 공부하는 것은 PE Header 구조체를 공부한다는 것과 같다.
10강 DOS Header
VA & RVA
○ VA : Virtual Address
- 절대 주소 (고유한 경로)
- 잘 쓰지 않음 (→ 변경할 수 없기 때문)
○ RVA : Relative Virtual Address
- 상대 주소
- 현재 위치를 기준으로 파일의 상대적인 경로를 입력하는 방식
- 현재위치 = 변수 = ImageBase
RVA + ImageBase = VA
ex) 어떤 PE 파일이 메모리에 로드되어야 하는데 특정 위치1에 가보니까 다른 파일이 있음
→ 다른 빈 공간을 찾아야한다 (= 재배치 Relocation)
재배치 : 상대 주소일 때만 가능함 (재배치가 발생했을 때 위치를 쉽게 옮길 수 있기 때문이다.)
DOS Header
MS-DOS (옛날 운영체제)
IMAGE_DOS_HEADER 구조체 : 모든 프로그램의 맨 앞에 있음
필수적으로 필요함!
○ e_magic : DOS Signature (아스키 코드 값 MZ, 4D 5A), IMAGE_DOS_HEADER의 맨 앞부분
○ e_ Ifanew : NT header 오프셋(= 떨어져있는 거리의 정) 표시 (NT header의 위치 나타냄)
ex) 4D 5A
5A 4D (ZM)-리틀엔디언 저장방식으로 반대로 저장된다
'2. Reversing (리버싱)' 카테고리의 다른 글
[2024.05.11] 리버씽씽카 5주차 활동 (0) | 2024.05.13 |
---|---|
[2024.04.06] 리버씽씽카 4주차 활동 (0) | 2024.05.04 |
[2024.03.23] 리버씽씽카 2주차 활동 (1) | 2024.03.23 |
[2023.11.04] 리버싱 5주차 팀활동 (0) | 2023.11.10 |
[2023.10.07] 리버싱 3주차 팀활동 (0) | 2023.10.13 |