본 글은 '리버싱 핵심원리' 서적을 바탕으로 공부한 내용을 바탕으로 서술한 포스팅입니다.
1.1리버스 엔지니어링(Reverse Engineering, RE:역공학)
물건이나 기계장치 혹은 시스템 등의 구조, 기능, 동작 등을 분석해 원리를 이해하며 단점을 보완하고 새로운 아이디어를 추가하는 일련의 작업
1.2리버스 코드 엔지니어링(Reverse Code Engineering, RCE)
소프트웨어 분야의 리버스 엔지니어링
1.2.1 리버싱 분석방법
1) 정적 분석
파일의 겉모습을 관찰하여 분석하는 방법으로, 파일을 실행하지 않는 분석방법입니다.
파일의 종류(EXE, DLL, DOC, ZIP 등), 크기, 헤더(PE), 정보, Import/Export API, 내부 문자열, 실행 압축 여부, 등록 정보, 디버깅 정보, 디지털 인증서 등의 내용을 확인합니다.
정적 분석 도구의 예시로는 pmd, SonarQube, cppcheck, checkstyle 등이 있습니다.
2) 동적 분석
파일을 직접 실행시켜 프로그램이 돌아가는 메커니즘을 분석하고, 디버깅을 통해 코드 흐름과 메모리 상태 등을 자세히 살펴보는 방법입니다. 파일, 레지스트리(registry), 네트워크 등을 관찰하여 프로그램을 분석합니다.
동적 분석 도구의 예시로는 Process Monitor, Process Explorer, Dependency walker, Regshot 등이 있습니다.
*리버싱!=디버깅
디버깅은 리버싱의 하위 개념입니다.
1.2.2 Source Code, Hex Code, Assembly Code
Source Code
대개 c나 java, python 등으로 언어를 작성해서 빌드(build)했을 때 '소스 코드'를 작성해서 빌드했다고 표현합니다. 여기서 '소스 코드'는 컴퓨터 프로그램을 사람이 읽을 수 있는 프로그래밍 언어로 기술한 텍스트 파일을 의미합니다.

Hex Code
생성된 실행파일은 컴퓨터가 이해할 수 있는 2진수(Binary) 형식으로 되어 있습니다. 그러나 사람이 2진수 파일을 보고 해석하는 것은 꽤 어려운 일이므로, 2진수를 16진수(Hex)로 변환시켜 사람이 파악하기 쉬운 구조로 만듭니다.
바로 이런 hex Editor는 binary형식의 파일을 hex형식으로 보여주는 유틸리티입니다.

Assembly Code
사실 위 Hex Code도 사람이 직관적으로 이해하기에 쉬운 형태는 아니기에, 더 직관적이고 이해하기 쉬운 어셈블리(Assembly) 코드가 있습니다.

위 디버거의 화면을 보면 Hex Code를 디스 어셈블(Disassemble) 과정을 거쳐 어셈블리 코드로 변환하여 보여주고 있습니다.
개발자 혹은 엔지니어 입장에서 접근성이 좋은 코드를 순서대로 그림으로 표현하면 다음과 같습니다.

1.2.3 패치와 크랙
패치(patch):프로그램의 파일 혹은 실행 중인 프로세스 메모리의 내용을 변경하는 작업
크랙(crack):패치와 같은 개념이지만 특별히 그 의도가 비합법적이고 비도덕적인 경우를 따로 구분하여 말합니다.
패치의 예시로는 Microsoft나 Windows업데이트를 예로 들 수 있고, 주목적은 프로그램의 취약점 수정과 기능 개선입니다.
크랙의 예시와 목적은 주로 저작권을 침해하는 행위(불법 복제/사용 등)로 볼 수 있습니다.
'Hacking&Security > Reversing' 카테고리의 다른 글
| [Reversing] x64dbg 변수 추정, 간단한 코드분석 (0) | 2021.09.08 |
|---|---|
| [Reversing] 레나 튜토리얼 04 - pixtopianbook파일 registered version으로 변경 (0) | 2021.08.30 |
| [Reversing]Ollydbg UDD Directory Absent, UDD 경로 오류 (0) | 2021.08.30 |