| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
- 리치헤더
- ABI
- Rich Header
- 함수 호출 규약
- 리버싱
- x32
- RVA
- 크랙미
- x64
- Python
- crackme
- 코드엔진
- CodeEngn
- image section header
- rev
- Dos Stub
- pe format
- 32bit
- 실행파일
- 프로그래머스
- Reversing
- __cdecl
- __fastcall
- __vectorcall
- Image dos header
- Programmers
- stack frame
- 파이썬
- __stdcall
- Calling Convention
- Today
- Total
목록Reversing/Definition (16)
kj0on
0. 유래라이브러리는 여러 프로그램에서 공통으로 재사용하려고 묶어 둔 코드의 집합이다. 초창기엔 물리 미디어(천공 카드, 자기선, 펀치 테이프)에 저장된 재사용 가능한 루틴의 모음이었고, 오늘날엔 정적/동적 바이너리, 패키지, 모듈, 프레임워크, 표준 라이브러리 등으로 발전했다. 0-1. 타임라인 0-1-1. 1837 ~ 1889: 해석 기관Each formula would require its own set of cards, and by degrees the engine would have a library of its own.찰스 배비지의 해석기관(The Analytical Engine)의 설계는 연산(operations) 카드와 숫자(cards of numbers)를 분리해 조합하는 방식을 전제했고..
1. 정의 ABI (Application Binary Interface)는 어플리케이션과 운영체제 또는 컴파일된 코드 간의 상호작용 방식을 정의한 이진 수준의 규약이다. 쉽게 말해, 컴파일된 바이너리들이 서로 호환되도록 하는 규칙 모음을 뜻한다.2. x64 ABI규칙역할필수 규칙(ABI)조건부 규칙스택 정렬 규칙Alignment(정렬)프롤로그, 에필로그을 제외한 모든 구간에서 RSP ≡ 0 (mod 16)을 유지해야 한다.Leaf 함수는 정렬을 다시 맞출 필요가 없다.이후의 단계에서 정렬이 보장되어 있는 경우는 제한적으로 정렬을 유지하지 않아도 된다.섀도우 스페이스 규칙Call Setup(호출 준비)Caller(호출자)는 언제나 32byte Shadow Space를 확보한 상태에서 함수를 호출해야 한다...
1. 정의 ABI (Application Binary Interface)는 어플리케이션과 운영체제 또는 컴파일된 코드 간의 상호작용 방식을 정의한 이진 수준의 규약이다. 쉽게 말해, 컴파일된 바이너리들이 서로 호환되도록 하는 규칙 모음을 뜻한다.2. x32 ABI규칙역할필수 규칙(ABI)조건부 규칙스택 정렬 규칙Alignment (정렬)모든 구간에서 ESP ≡ 0 (mod 4)를 유지해야 한다.16byte 정렬을 요구하는 SIMD 명령을 사용 할 경우, 함수 내부에서 추가 정렬을 보장해야 한다.레지스터 보존 규칙Register Save (레지스터 보존)Callee(피호출자)에서 비휘발성 레지스터를 사용했다면 함수 내부에서 원래 값으로 복구해야 한다.비휘발성 레지스터를 사용하지 않았다면 저장, 복구 코드가..
0. 64비트 스택 프레임 (64bit Stack Frame)64비트 스택프레임에 대한 자세한 설명은 https://kj0on.tistory.com/43 참고1. 정의함수와 호출자 간에 인수를 전달하고 값을 반환하기 위한 규칙 프로시저(함수) 호출 시 인자를 어디에 어떤 순서로 전달하고, 누가 스택을 정리하며, 레지스터를 보존할지, 어느 레지스터로 값을 반환할지 등을 규정한 저수준 인터페이스 계약이다. 컴파일러, 언어, OS, CPU가 서로 다른 오브젝트 코드를 같은 ABI 안에서 링크 및 호출할 수 있게 해준다.2. Caller(호출자)와 Callee(피호출자)Caller는 함수를 호출하는 쪽이고, Callee는 호출된 함수이다. Caller는 인자를 준비하고 제어를 Callee에게 넘기며, Calle..
0. x64 ABI x64 ABI는 https://kj0on.tistory.com/47 참고1. 정의 스택 프레임(Stack Frame)은 함수가 호출될 때 스택에 형성되는 하나의 논리적 메모리 블록으로, 해당 함수 실행에 필요한 정보를 일시적으로 보관해 주는 단위이다. 32비트 때와 유사한 목적을 가지지만, 64비트 함수 호출 규약과 CPU 설계 변화에 맞추어 구조와 규칙이 달라졌다.2. 함수 프레임 (Function Frame)함수의 시작에 붙는 패턴은 프롤로그(prologue), 끝 부분에 붙는 패턴은 에필로그(epilogue)로 구분할 수 있으며, 직접 작성한 코드의 로직은 두 패턴 사이의 바디(body)에 위치하게 된다. 이러한 공통된 틀은 컴파일 단계에서 컴파일러가 자동으로 삽입한다. 덕분에 ..
0. 32비트 스택 프레임 (32bit Stack Frame)32비트 스택프레임에 대한 자세한 설명은 https://kj0on.tistory.com/41 참고1. 정의함수와 호출자 간에 인수를 전달하고 값을 반환하기 위한 규칙 프로시저(함수) 호출 시 인자를 어디에 어떤 순서로 전달하고, 누가 스택을 정리하며, 레지스터를 보존할지, 어느 레지스터로 값을 반환할지 등을 규정한 저수준 인터페이스 계약이다. 컴파일러, 언어, OS, CPU가 서로 다른 오브젝트 코드를 같은 ABI 안에서 링크 및 호출할 수 있게 해준다. https://learn.microsoft.com/ko-kr/cpp/cpp/calling-conventions?view=msvc-1702. Caller(호출자)와 Callee(피호출자)Call..
0. x32 ABI x32 ABI는 https://kj0on.tistory.com/46 참고1. 정의스택 프레임(Stack Frame)은 함수가 호출될 때 스택에 형성되는 하나의 논리적 메모리 블록으로, 해당 함수 실행에 필요한 정보를 일시적으로 보관해 주는 단위이다.2. 함수 프레임 (Function Frame)#include int fun3(void) { return 3;}int fun2(void) { fun3(); return 2;}int fun1(void) { fun2(); return 1;}int main(void) { printf("Hello World!\n"); // Hello World! fun1(); return 0;} 위 이미지는 main→printf→fun1→fun2→fun3로 깊어졌..
1. 정의표준정의ISO/IEC 15145:1997(en), 2.1.10To transform source code into dictionary definitions.ISO/IEC 20060:2010(en), 3.9transform higher-level specifications of software and/or data into executable formISO/IEC 2382:2015(en), 2121864translate all or part of a program expressed in a high-level language into a program expressed in an intermediate language, an assembly language, or a machine language..
0. VA & RVA & RAWVA, RVA, RAW에 대한 개념은 https://kj0on.tistory.com/29 참고1. RVA to RAW 변환의 필요성RVA to RAW 변환은 PE 파일을 메모리에 로드하지 않고 디스크 상의 파일 자체의 구조를 확인하거나 값을 수정할 때(RVA를 실제 디스크 파일 내 위치로 바꿔야 할 때) 사용된다. 특히 헤더나 디렉터리 정보들은 대부분 RVA로 표현된다. 파일 자체를 디스크 상에서 다루는 작업을 할때 해당 데이터가 실제로 파일 내 어느 위치에 있는지를 알아야 하므로 RVA를 RAW(파일 오프셋)로 변환해야 한다. 1-1. 윈도우 로더윈도우 로더는 PE 파일을 실행할 때 RVA를 RAW로 변환하지 않는다. 각 섹션의 PointerToRawData와 Virtua..
0. 참고사항이 글은 VA, RVA, RAW의 개념에 대한 설명이므로 스왑 메모리 방식이나 페이징 기법은 개념 설명과는 목적이 다르기 때문에 여기서는 다루지 않는다.1. 디스크와 메모리디스크는 비휘발성 저장장치로 전원이 꺼져도 데이터가 그대로 유지된다. HDD(하드디스크)나 SSD 같은 장치들이 여기에 해당하며 프로그램 파일이나 문서 등이 이곳에 저장된다. 반면 메모리는 휘발성 저장장치로 전원이 꺼지면 저장된 데이터가 모두 사라진다. RAM 같은 장치가 여기에 해당하며 실행 중인 프로그램이나 작업 데이터가 일시적으로 저장된다. 운영체제는 프로그램 실행 시 디스크에 있는 파일을 메모리로 불러와 실행한다. PE 파일은 디스크에 저장될 때와 메모리에 로드될 때 구조와 주소 체계가 달라진다. 디스크에서는 파일의..