-
리버싱(Reversing) - 만들어진 프로그램을 역으로 해체하여 코드 단에서 분석
Binary
Compiler : 고급언어를 목적 코드(Object Code)로 번역하는 프로그램 - GCC, Clang, MSCV
Compile : 소스코드를 목적 코드(Object Code) 형식으로 번역하는 동작
Assembler : Assembly Language를 기계어로 번역하는 프로그램
Binary : 프로그램과 동의어 (Stored-Program Computer에서 프로그램이 저장장치에 이진 형태로 저장되기 때문)
Interpreting : 사용자의 입력, 스크립트를 바로바로 번역하여 CPU에 전달하는 동작 - Python, Javascript
Interpreter : 인터프리팅을 하는 프로그램
더보기컴파일
장점:
1. 속도: 실행 속도가 빠름.
2. 오류 발견: 컴파일 시 문법 오류를 찾음.
3. 배포 용이성: 실행 파일 형태로 배포 가능.
단점:
1. 개발 속도 느림: 수정 후 다시 컴파일해야 함.
2. 환경 의존성: 특정 플랫폼에 종속적.
3. 디버깅 어려움: 최적화로 인해 복잡해질 수 있음.
인터프리팅
장점:
1. 개발 속도: 즉시 실행 가능.
2. 플랫폼 독립성: 모든 환경에서 실행 가능.
3. 디버깅 용이성: 실시간 오류 수정 가능.
단점:
1. 속도 느림: 한 줄씩 해석하므로 느림.
2. 런타임 오류: 실행 중에만 오류 발견.
3. 자원 소모: 더 많은 메모리와 CPU 사용.컴파일 과정 (Linux / GCC)
- 전처리
- 주석 제거
- 매크로 치환 (#define 으로 정의된 값들을 전부 치환)
- 파일 병합
- 컴파일
- 소스 코드를 어셈블리어로 번역
- 문법 오류가 있다면 컴파일을 멈추고 에러 출력
- 어셈블
- 컴파일로 생성된 어셈블리어 코드를 ELF형식의 목적 파일(Object file)로 변환
- ELF는 리눅스의 실행 파일 형식 (윈도우라면 PE)
- 어셈블 후에는 기계어로 번역되며 해석하기 어려워짐
- 링크
- 여러 목적파일들을 연결하여 실행 가능한 바이너리로 만드는 과정
- 다른 라이브러리에 있는 함수들을 호출할 때 필요한 파일들을 링크함
- 링크 후에 실행 할 수 있는 프로그램이 완성됨
Disassemble
기계어를 다시 어셈블리어로 번역 - 거의 일대일로 대응되어 오차가 없음
Decompile
어셈블리어를 고급 언어로 번역 - 대응 관계가 없어 변수,함수명은 전부 사라지고 일부 코드는 변형됨
'해킹 > 리버싱 이론' 카테고리의 다른 글
IDA 사용법 및 문법 (0) 2024.10.07 03 - x86 Assembly (1) 2024.10.06 02 - 컴퓨터 구조 / Window memory layout (2) 2024.10.06 - 전처리