1장 리버싱 스토리
리버스 엔지니어링이란 시스템이나 구조 등을 분석하여서 원리를 이해하고 그 구조 분석을 통해 발견하는 과정입니다.
이런 리버싱(분석) 방법에는 정적 분석과 동적 분석으로 구분됩니다.
- 정적 분석: 실행 파일을 실행시키지 않고 분석하여 파일의 종류, 내부 문자열, 헤더 정보 등의 정보를 얻는 것입니다. 또한 디스 어셈블러를 통해 내부 코드 및 구조를 확인하는 것 또한 정적 분석에 포함됩니다.
- 동적 분석: 실행 파일을 실행시키면서 프로그램의 행동과 동작원리를 분석하는 것입니다.
소스코드, 바이너리 코드의 관계
대학교 1학년 때 C언어를 배우면서 컴파일러에 대해 간단히 짚고 넘어갔을 겁니다.
1장 마지막에서는 이후 리버싱을 할 때 사용할 소스코드와 바이너리 코드 그리고 추가로 어셈블리 코드에 대해 간단히 설명하고 1장을 마무리하겠습니다.
위에 보이는 것이 소스코드입니다.
프로그램의 제작에 사용되는 설계도라고 정의하지만 그냥 우리가 컴퓨터와 대화하기 위한 언어 정도로 알고 있으면 될 것 같습니다.
바이너리 코드 같은 경우 컴퓨터가 이해할 수 있는 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 |