ImFe's study

리버스 엔지니어링이란 본문

Reversing

리버스 엔지니어링이란

ImFe 2020. 5. 14. 01:20

리버스 엔지니어링은 '완성품의 설계도 없이 구조와 동작 과정을 알아내는' 모든 단계를 말합니다.

 

 

소스코드가 없는 상태에서 컴파일된 대상 소프트웨어의 구조를 여러가지 방법으로 분석하고, 메모리 덤프를 비롯한 바이너리 분석 결과를 토대로 동작 원리와 내부 구조를 파악한 다음, 이를 바탕으로 원래의 소스가 어떻게 작성된 것인지 알아내는 과정에 대해 공부합니다.

 

 

리버싱을 통한 분석 방식에는 크게 두 가지의 방법이 쓰입니다.

프로그램을 실행시키지않는 정적 분석방법과 (Stack Analysis)와 프로그램을 실행시켜서 입출력과 내부 동작 단계를 살피며 분석하는 동적 분석 방법(Dynamic Analysis)이 이 두가지에 해당됩니다.

 

졍적 분석을 위해서는 실행 파일을 구성하는 모든 요소, 대상 실행 파일이 실제로 동작할 CPU 아키텍처에 해당하는 어셈블리 코드를 이해하는것이 필요합니다.

 

동적 분석을 하기 위해서는 실행 단계별로 자세한 동작 과정을 살펴봐야 하므로, 환경에 맞는 디버거를 이용해 단계별로 분석하는 기술을 익혀야 합니다.

 

 

 

 

-코드가 컴파일되는 과정

 

 

사람이 이해할 수 있는 코드를 컴퓨터가 이해할 수 있는 형태인 프로그램(이하 바이너리)로 바꾸려면 컴파일을 거쳐야 합니다.

 

이러한 과정에서 사용되는 프로그램을 '컴파일러'라고 부릅니다.

 

원본코드를 컴파일러가 Intermediate Language로 변환하고 어셈블리 코드로 만들어줍니다. 그 후에 어셈블리 코드를 바이너리 코드(이진 코드)로 바꾸어주어 실행 가능한 바이너리가 완성됩니다.

이러한 과정을 거꾸로 하는것을 소프트웨어 리버스 엔지니어링이라고 합니다.

Comments