리버싱

:: 소프트웨어 공학의 한 분야로, 이미 만들어진 시스템을 역으로 추적하여

처음의 문서나 설계기법 등의 자료를 얻어내는 일

 

즉, 사람이 인식하기 어려운 기계어를 재번역하고, 재번역된 코드를 읽어서 기능과 역할을 알아낸다고 보면 된다.

 

 

소스코드

 

Visual Studio 와 같은 개발 툴을 이용해서 코드를 작성하고 컴파일을 하면 실행 파일이 만들어진다.

TEST.exe 파일 확인

 

실행파일이 만들어졌다는 것은 우리가 작성한 코드가 기계어로 변환되었음을 의미한다.

 

기계어로 번역된 main()코드의 일부

 

그리고 이 기계어를 CPU가 읽어서 문자열을 출력시킨다.

TEST.exe 파일 실행

------------------------------------------------------------------------------------------------------------------------------

 

이제 실행 파일을 리버싱해보자

앞서 언급했듯이 실행 파일에는 기계어로 번역된 main() 함수 코드가 있다.

하지만 우리는 기계어를 읽을 수 없다.

 

따라서 리버싱 작업은 보통 WinDBG나 IDA, OllyDBG와 같은 디버깅(디컴파일러) 툴을 사용해서 이루어진다.

이러한 툴들은 사람이 인식하기 어려운 기계어를 재번역하는 데 일차적인 목적이 있다.

 

OllyDBG.exe와 같은 툴로 TEST.exe 파일을 확인하면 

기계어에서 어셈블리어로 재번역된 main()함수 코드를 확인할 수 있다.

 

TEST.exe 메인코드

 

리버싱은 한 마디로, "디버거에서 재번역해 준 어셈블리 코드를 잘 읽고, 기능과 역할을 도출하는 것"이다.

 

------------------------------------------------------------------------------------------------------------------------------

 

리버싱(분석) 방법

 

ⓐ 정적 분석(Static Analysis)

:: 파일을 실행하지 않고 파일의 겉모습을 관찰하여 분석하는 방법

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

  -- 디스어셈블러(ex; IDA)를 이용해 내부 코드와 구조를 확인할 수 있다.

 

==> 실행 파일을 구성하는 모든 요소, 대상 실행 파일이 실제로 동작할 CPU 아키텍처에 해당하는 어셈블리 코드를 이해하는 것이 필요

 

ⓑ 동적 분석(Dynamic Analysis)

: 파일을 실행시켜 행위를 분석하고, 디버깅하여 코드 흐름과 메모리 상태를 살펴보는 방법

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

  -- 디버거(ex; OllyDBG)를 이용하여 프로그램 내부 구조와 동작 원리를 분석한다.

 

==> 실행 단계별로 자세한 동작 과정을 살펴봐야 하므로, 환경에 맞는 디버거를 이용해 단계별로 분석하는 기술을 익혀야함

'Study > Reversing' 카테고리의 다른 글

main 함수 찾기  (0) 2021.03.23
OllyDBG, 어셈블리어  (0) 2021.02.04
IAT & EAT  (0) 2021.01.25
PE 헤더  (0) 2021.01.24
PE File Format 이해  (0) 2021.01.23

+ Recent posts