-
1 리버싱 엔지니어링리버싱 엔지니어링/리버싱 핵심 원리 2022. 1. 7. 20:31
1. 리버스 엔지니어링 (Reverse Engineering, RE : 역공학)
: 장치 또는 시스템을 분석하여 기술적인 원리를 이해하며 단점을 보완하고 새로운 아이디어를 추가하는 일련의 작업.
- 거꾸로 해석하는 기술
- 컴파일 과정을 거꾸로 하는 것
- 리버싱(reversing)이라고도 함
2. 리버싱 방법
- 정적 분석 : 파일의 겉모습을 관찰하여 분석하는 방법
- 파일을 실행하지 않고 파일의 종류(exe, doc 등), 헤더, 실행 압축 여부 등의 다양한 내용을 확인
- 디스 어셈블러를 이용해 내부 코드와 구조 확인
- 동적 분석 방법에 참고자료가 됨
- 동적 분석 : 파일을 직접 실행시켜 분석하고, 디버깅을 통하여 코드 흐름과 메모리 상태 등을 자세히 살펴보는 방법
- 파일, 레지스트리, 네트워크 등을 관찰하며 프로그램 행위 분석
- 디버거를 이용하여 프로그램 내부 구조와 동작 원리 분석
- 디버깅 : 프로그램이 정확한지 조사하는 과정
- 디버거 : 프로그램의 에러를 찾아내고 수정할 수 있도록 도와주는 툴. 사용자에게 CPU의 레지스터 상태와 메모리 내용, 스택영역의 내용을 보여줌
3. Code
- Source Code
- 소스코드를 빌드하면 실행파일이(exe) 생성
- 실행파일(exe) 형식 : 2진수(binary)
- Hex Code
- 2진수 형식의 파일을 해석하기 어려워 2진수를 16진수(Hex) 형식으로 변환시킴
- Assembly Code
- Hex Code를 직관적인 형태로 만들기 위해 디버거를 사용함
-> 디버거 화면에서 Hex Code를 디스 에셈블리 과정을 거쳐 어셈블리 코드로 변환하여 보여줌
- (참고) 어셈블리어(assembly language)
- 인간의 관점에서 사용이 불편한 기계어를 보완해 나온 언어
- 기계어와 명령어가 1:1 대응되어 구성됨
- 디스 어셈블리어 : 기계어를 어셈블리어로 변환
4. 패치와 크랙
- 패치(patch) : 프로그램의 파일 혹은 실행 중인 프로세스 메모리의 내용을 변경하는 작업
- 주 목적 : 프로그램의 취약점 수정과 기능 개선
- ex) 윈도우 업데이트
- 크랙(crack) : 패치와 같은 개념이지만 그 의도가 비합법적이고 비도덕적인 경우
- 주로 저작권을 침해하는 행위에 사용됨
'리버싱 엔지니어링 > 리버싱 핵심 원리' 카테고리의 다른 글
5 스택 (0) 2022.02.06 2 Hello World! 리버싱(2) - 문자열 패치 (0) 2022.02.06 4 IA-32 Register 기본 설명 (0) 2022.02.06 3 리틀 엔디언 표기법 (0) 2022.02.06 2 Hello World! 리버싱(1) (0) 2022.02.05