[Stage 1]
#서론
- 리버스 엔지니어링(Reverse Engineering, 리버싱, 역공학) : 완성된 제품을 해체하고 분석하여 구조와 기능, 디자인을 파악하는 것
- 리버싱의 용도
> Good Case
1. 프로그램의 보안성 평가
2. 악성코드 분석
> Bad Case
1. 프로그램 불법 크랙
2. 게임핵
[Stage 2]
#바이너리 #컴파일
- 프로그램 : 연산 장치가 수행해야 하는 동작을 정의한 일종의 문서
- 바이너리(프로그램) : Stored-Program Computer에서 프로그램을 이진(Binary) 형태로 저장하므로 프로그램을 바이너리라고 하기도 함.
- 프로그래밍 언어(Programming Language) : 프로그램을 개발하기 위해 사용하는 언어
> 고급 언어
C, C++, Go, Rust 등
> 저급 언어
어셈블리어, 기계어 등
- 컴파일러(Compilter) : 소스코드를 컴퓨터가 이해할 수 있는 기계어 형식으로 번역해주는 소프트웨어
ex. GCC, Clang, MSVC 등
- 인터프리터(Interpreter) : 사용자의 입력, 또는 사용자가 작성한 스크립트를 그때 그때 번역하여 CPU에 전달하는 프로그램
- 컴파일 과정
1) 전처리(Preprocess) : 소스코드를 어셈블리어로 컴파일하기 전에 필요한 형식으로 가공하는 과정
add.c → add.i
- 주석 제거
- 매크로 치환
- 파일 병합
2) 컴파일(Compile) : C로 작성한 소스코드를 어셈블리어로 번역하는 것.
add.i → add.S
- 소스코드의 문법 검사
- 문법적 오류가 있다면 컴파일 멈추고 에러 출력
3) 어셈블(Assemble) : 컴파일로 생성된 어셈블리어 코드를 ELF 형식의 목적 파일로 변환하는 과정.
add.S → add.o
- 어셈블리어 코드가 기계어로 변환되어 더이상 사람이 해석하기 어려워짐
4) 링크(Link) : 여러 목적 파일들을 연결하여 실행 가능한 바이너리로 만드는 과정.
add.o → add
- 실행할 수 있는 프로그램 완성
- 디스어셈블(Disassemble) : 기계어로 컴파일된 코드를 어셈블리어로 재번역하는 것
- 디컴파일(Decompile) : 규모가 큰 바이너리를 쉽게 이해하기 위해 어셈블리어보다 고급언어로 바이너리를 번역하는 것
> 디컴파일러 : Hex Rays, Ghidra 등
'드림핵' 카테고리의 다른 글
[드림핵 Reverse Engineering] Stage 4 (0) | 2023.11.07 |
---|---|
[드림핵 Reverse Engineering] Stage 3 (0) | 2023.09.20 |
[드림핵 워게임] Apache htaccess (0) | 2023.09.01 |
[드림핵 워게임] baby-sqlite (0) | 2023.08.30 |
[드림핵 워게임] random-test (0) | 2023.08.30 |