[Reversing] 리버스 엔지니어링이란?

 

리버스 엔지니어링


(1) 리버스 엔지니어링이란 무엇인가?

1-1. 리버스 엔지니어링 개념

 

1-1-1. 리버스 엔지니어링

  • 물건, 기계장치 혹은 시스템 등의 구조, 기능, 동작 등을 분석하며 그 원리를 이해하고 단점을 보완하며 새로운 아이디어를 추가하는 일련의 작업

 

1-1-2. 리버스 코드 엔지니어링

  • 소프트웨어 분야의 리버스 엔지니어링으로 소프트웨어를 리버싱 관점에서 상세하게 분석한다는 뜻


(2) 리버싱 분석 방법

2-1. 정적 분석

  • 파일의 겉모습을 관찰하여 분석하는 방법

  • 정적 분석 단계에서는 파일 실행하지 않음

  • 파일의 종류(DLL, EXE, DOC, ZIP등), 크기, 헤더(PE)정보, Import/Export API, 내부 문자열, 실행 압축 여부, 등록 정보, 디버깅 정보, 디지털 인증서 등 다양한 내용 확인

  • 디스어셈블러를 이용하여 내부 코드와 그 구조를 확인하는 것

 

2-2. 동적 분석

  • 파일을 실행시켜 그 행위를 분석하는 방법

  • 디버깅을 통하여 코드 흐름과 메모리 상태 등을 자세히 살펴보는 방법

  • 파일 레지스트리, 네트워크 등을 관찰하면서 프로그램의 행위 분석

  • 디버거를 이용하여 프로그램 내부 구조와 동작 원리를 분석

 

두 가지 방법을 잘 활용하면 프로그램을 리버싱할 때 시간 단축과 효과적인 분석이 가능하다.

 

디버깅은 리버싱 방법 중 비중이 크고 재미있는 분야이긴 하지만 리버싱의 하위 개념이다.


(3) Source Code, Hex Code, Assembly Code

  • 리버싱에서 취급하는 대상은 보통 실행 파일인 경우가 많은

  • 소스코드 없이 실행 파일의 바이너리 자체를 분석

 

3-1. Source Code

 

[그림 1] Source Code

  • [그림 1]과 같이 개발 도구(Visual C++)에서 소스 코드를 빌드하면 실행 파일 생성

 

 

3-2. Hex Code

 

[그림 2] Hex Code

  • 생성된 실행 파일은 컴퓨터가 이해할 수 있는 2진수(Binary) 형식으로 되어 있음

  • 리버싱 전문가라도 0과 1로만 구성되어 있는 binary 파일을 직접 보고 의미를 해석하는 것은 매우 힘듦

  • 2진수를 16진수(Hex)형식으로 변환시키는데, 자릿수가 줄어들면서 보기 수월하기 때문

 

 

3-3. Assembly Code

 

[그림 3] Assembly Code

  • 사실 Hex Code는 사람에게 직관적인 형태가 아님

  • Hex Code를 디스어셈블(Disassemble) 과정을 거쳐서 어셈블리 코드로 변환하여 보여줌

  • 일반적인 리버시 과정에서는 어셈블리 코드를 분석하곤 함


(4) 패치와 크랙

 

4-1. 패치

  • 프로그램의 파일 혹은 실행 중인 프로세스 메모리 내용을 변경하는 작업

  • 주된 목적은 프로그램 취약점 수정과 기능 개선

 

4-2. 크랙

  • 패치와 같은 개념이지만 특별히 의도가 비합법적이고 비도덕적인 경우를 구분하여 뜻함

  • 주된 목적은 저작권을 침해하는 행위(불법 복제/사용 등)에 주로 사용


# Reference

 

http://www.yes24.com/Product/Goods/7529742

'Reversing' 카테고리의 다른 글

[Reversing] Process Explorer  (0) 2020.03.26
[Reversing] 스택  (0) 2020.03.25
[Reversing] IA-32 Register  (0) 2020.03.25
[Reversing] 리틀 엔디언 표기법  (0) 2020.03.24
[Reversing] OllyDbg 사용법  (0) 2020.03.24

+ Recent posts