전처리(Preprocessing)
컴파일러가 소스 코드를 어셈블리어로 컴파일하기 전에, 필요한 형식으로 가공하는 것
add.c를 add.i로 전처리
$ gcc -E add.c > add.i
$ cat add.i
컴파일(Compile)
C로 작성된 소스 코드를 어셈블리어로 변역하는 것
소스 코드를 어셈블리 코드로 컴파일: "-S" 옵션
$ gcc -S add.i -o add.S
$ cat add.S
어셈블(Assemble)
컴파일로 생성된 어셈블리어 코드를 ELF 형식의 목적 파일(Object file)로 변환하는 과정
* ELF: 리눅스 실행파일 형식, PE: 윈도우 목적 파일 형식
목적 파일 변환 - 어셈블리 코드가 기계어로 번역되므로 더이상 사람이 해석하기 어려워짐
gcc "-c" 옵션을 통해 add.S를 목적 파일로 변환하고, 결과로 나온 파일을 16진수로 출력한 것
링크(Link)
여러 목적 파일들을 연결하여 실행 가능한 바이너리로 만드는 과정
디컴파일러(Decompiler)
-
정적 분석(Static Analysis), 동적 분석(Dynamic Analysis)
정적 분석
장점
1. 프로그램의 전체 구조를 파악하기 쉬움
2. 분석 환경의 제약에서도 비교적 자유로움
3. 바이러스와 같은 악성 프로그램의 위협으로부터 안전함
단점
1. 난독화(Obfuscation)가 적용되면 분석이 매우 어려워짐
2. 다양한 동적 요소를 고려하기 어려움
동적 분석
장점
1. 코드를 자세히 분석해보지 않고도 프로그램의 개략적인 동작을 파악할 수 있음
단점
1. 분석 환경을 구축하기 어려울 수 있음
2. 안티 디버깅(Anti Debudding)
if (is_debugging())
exit(-1);
Func();
컴퓨터 구조(Computer Architecture)
컴퓨터가 효율적으로 작동할 수 있도록 하드웨어 및 소프트웨어의 기능을 고안하고, 이들을 구성하는 방법
폰 노이만 구조, 하버드 구조, 수정된 하버드 구조
명령어 집합구조(Instruction Set Architecture, ISA)
CPU가 처리해야하는 명령어를 설계하는 분야
(e.g., ARM, MIPS, AVR, 인텔의 x86 및 x86-64 아키텍처)
마이크로 아키텍처(Micro Architecture)
정의된 명령어 집합을 효율적으로 처리할 수 있도록, CPU의 회로를 설계하는 분야
> 폰 노이만 구조와 명령어 집합 구조(Instruction Set Architecture) 중 x86-64 아키텍처
폰 노이만: 초기 컴퓨터 과학자 중 컴퓨터에 연산, 제어, 저장의 세 가지 핵심 기능이 필요하다고 생각함
근대의 컴퓨터는 연산과 제어를 위해 중앙처리장치(Central Processing Unit, CPU)를, 저장을 위해 기억장치(memory)를 사용함
장치간에 데이터나 제어 신호를 교환할 수 있도록 버스(bus)라는 전자 통로를 사용함
중앙처리장치
산술논리장치(Arithmetic Logic Unit, ALU): CPU의 산술/논리 연산 처리
제어장치(Control Unit): CPU 제어
레지스터(Register): CPU에 필요한 데이터 저장
기억장치
컴퓨터가 동작하는데 필요한 여러 데이터를 저장하기 위해 사용됨
주기억장치: 프로그램 실행과정에서 필요한 데이터들을 임시로 저장하기 위해 사용 (e.g., 램(Random-Access Memory, RAM)
보조기억장치: 운영 체제, 프로그램 등과 같은 데이터를 장기간 보관하고자 할 때 사용 (e.g., 하드 드라이브(Hard Disk Drive, HDD), SSD(Solid State Drive))
버스
컴퓨터 부품과 부품 사이 또는 컴퓨터와 컴퓨터 사이에 신호를 전송하는 통로
데이터 버스(Data Bus): 데이터 이동
주소 버스(Address Bus): 주소 지정
- 범용 레지스터(General Register)
- 세그먼트 레지스터(Segment Register)
- 플래그 레지스터(Flag Register)
- 명령어 포인터 레지스터(Instruction Pointer Register, IP)
'Security & Analysis > Analysis' 카테고리의 다른 글
[Dreamhack] Reverse Engineering#3 - Assembly (0) | 2023.12.18 |
---|---|
[Dreamhack] Reverse Engineering#2 - Assembly & Architecture (0) | 2023.12.11 |
[ASCII Table] 아스키 코드표 (0) | 2023.01.12 |
[DHCP] 개념 - 원리 - 기능 - 취약점 - Relay Agent (0) | 2022.11.02 |
[APK] 안드로이드 앱 난독화 해제 및 소스코드 분석 (0) | 2022.09.15 |