본문 바로가기

리버싱

리버싱 #01 리버싱 스토리

1장 리버싱 스토리

 

 

 

리버스 엔지니어링이란 시스템이나 구조 등을 분석하여서 원리를 이해하고 그 구조 분석을 통해 발견하는 과정입니다.

 

이런 리버싱(분석) 방법에는 정적 분석동적 분석으로 구분됩니다.

 

  1.  정적 분석: 실행 파일을 실행시키지 않고 분석하여 파일의 종류, 내부 문자열, 헤더 정보 등의 정보를 얻는 것입니다. 또한 디스 어셈블러를 통해 내부 코드 및 구조를 확인하는 것 또한 정적 분석에 포함됩니다.
  2.  동적 분석: 실행 파일을 실행시키면서 프로그램의 행동과 동작원리를 분석하는 것입니다.



소스코드, 바이너리 코드의 관계

대학교 1학년 때 C언어를 배우면서 컴파일러에 대해 간단히 짚고 넘어갔을 겁니다.

1장 마지막에서는 이후 리버싱을 할 때 사용할 소스코드와 바이너리 코드 그리고 추가로 어셈블리 코드에 대해 간단히 설명하고 1장을 마무리하겠습니다.

 

 

C++ 소스코드

위에 보이는 것이 소스코드입니다.

프로그램의 제작에 사용되는 설계도라고 정의하지만 그냥 우리가 컴퓨터와 대화하기 위한 언어 정도로 알고 있으면 될 것 같습니다.

 

바이너리 코드 같은 경우 컴퓨터가 이해할 수 있는 2진수( 1과 0 ) 형식으로 표현되어있습니다.

 

가만... 아까는 제가 위에서 소스코드가 컴퓨터와 대화하기 위한 언어라고 말했습니다. 

하지만 바이너리 코드에서는 컴퓨터가 이해할 수 있는 형식이라고 설명했습니다.

 

어???????

 

우리가 말이 안통하는 외국인과 대화를 하는 과정을 생각해보면 쉽게 이해할 수 있습니다. 

서로의 언어를 이해하며 대화를 이어나가기 위해서는 번역기가 필요 할 것 입니다.

 

다시 사람과 컴퓨터의 대화로 돌아와서 사람이 사용하는 언어는 위에서 프로그래밍 언어를 사용합니다.

이런 프로그래밍 언어를 통해서 만들어낸 코드가 소스코드이구요. 하지만 컴퓨터는 프로그래밍 언어로 된 소스코드를 이해 할 수 없습니다. 

왜냐하면 컴퓨터는 2진수( 1과 0 )형식만을 이해할 수 있기 때문입니다.

그렇기 때문에 중간에 번역기과정, 더 정확히 말하자면 컴파일과정을 통해 우리가 만든 소스코드를 컴퓨터가 이해할 수 있는 1과 0인 바이너리 코드로 변환해 주는 것입니다.

 

'리버싱' 카테고리의 다른 글

리버싱 #04 abex crackme 2 분석  (0) 2021.01.24
리버싱 #03 abex crackme 1 분석  (0) 2021.01.22
리버싱 #02 Hello world 디버깅  (0) 2021.01.19
리버싱 #00 intro  (2) 2020.12.27