기초 리버싱
리버스 엔지니어링
- Reverse Engineering(RE, 역공학)
- 시스템의 구조, 기능, 동작 분석하여 원리 이해하며 단점 보완하고 새로운 아이디어를 추가하는 작업
리버스 코드 엔지니어링
- Reverse Code Engineering(RCE)
- 소프트웨어 분야의 리버스 엔지니어링
- 분석
- 상세분석
- 소프트웨어를 리버싱 관점에서 상세하게 분석
리버싱(분석) 방법
- 실행 파일의 분석 방법
- 정적 분석
- 파일 실행 없이 파일 겉모습 관찰하여 분석
- 정보 수집해 해당 프로그램 구조와 동작 원리에 대해 예측 가능
- 이후 수행될 동적 분석 방법에 대한 아이디어 제공
- 파일 종류(exe, dll, doc, zip 등), 크기, 헤더(PE) 정보, Import/Export API, 내부 문자열, 실행 압축 여부, 등록 정보, 디버깅 정보, 디지털 인증서 등 다양한 내용 확인
- 디스어셈블러(Disassembler) 이용해 내부코드와 구조 확인
- 디스어셈블러
- 기계어(컴퓨터 언어)를 어셈블리어(인간 언어)로 변환하는 컴퓨터 프로그램
- 기계어
- 컴퓨터가 읽을 수 있는 2진 숫자로 이루어진 언어 (0과 1)
- 어셈블리어
- 기계어를 사람이 보기 쉽게 문자를 기호화해서 나타낸 것
- 기계어와 일대일 대응이 되는 컴퓨터 프로그래밍의 저급언어
- 컴퓨터와 가까운 언어이기 때문에 컴파일 시 실행 속도가 빠름
- 디스어셈블러
- 파일 실행 없이 파일 겉모습 관찰하여 분석
- 동적 분석
- 파일을 직접 실행시켜 행위 분석, 디버깅 통해 코드 흐름과 메모리 상태 등을 자세하게 살펴보는 방법
- 파일, 레지스트리(Registry), 네트워크 등 관찰하며 프로그램 행위 분석
- 디버거(Debugger) 이용해 프로그램 내부 구조와 동작 원리 분석 가능
- 디버깅은 리버싱의 하위 개념
- 정적 분석
Source Code, Hex Code, Assembly Code
- 리버싱에서 취급하는 대상 → 보통 실행 파일
- 소스 코드 없이 실행 파일의 바이너리 자체를 분석 ⇒ 소스 코드와 바이너리 코드 사이 관계 살펴보기 중요
Source Code
class="highlight">


