2014. 1. 8. 17:57 :: 리버싱

보안과 프로그램을 공부하면서

처음으로 공부하기 시작한 리버싱.

기초 및 이론은 "이승원님 / 리버싱 핵심 원리" 책을 참고하여 작성 하겠습니다.

저 역시 "리버싱 핵심 원리" 책으로 공부중입니다.

 

그럼 리버싱이란 무엇일까요?

 

 

1. 리버스 엔지니어링(Reverse Engineering)

 

  일반적인 의미에서는 '역공학'이라고 하며 어느 특정 물건, 장치 등이 있으면 그것에 대한 구조, 기능, 동작 등을 역으로 따라가며 분석하고 그 원리를 이해하며 부족한 부분을 보완하며 새로운 기능 등을 추가하는 작업입니다.

 

 

2. 리버스 코드 엔지니어링(Reverse Code Engineering)

 

  RCE(Reverse Code Engineering)는 소프트웨어 분야의 리버스 엔지니어링 이라고 생각하시면 될것같습니다. 제가 공부하는 것 역시 소프트웨어 분야의 작업이기 때문에 위에서 말한 리버싱(Reversing)이 여기에 해당하겠습니다.

 

 

#리버싱# : 소프트웨어 분야에서 해당 프로그램의 구조, 기능, 동작 등의 원리를 역으로 따라가며 이해하고 분석하여 부족한 부분이 있거나 추가 되었으면 하는 새로운 기능 등을 추가하는 전체적 행위가 되겠습니다.

 

 

3. 리버싱 방법

 

  - 정적분석 : 파일의 겉모습을 관찰하여 분석하는 방법입니다. 파일을 실행하지 않고 파일의 종류(exe,dll, doc, zip 등), 크기, 헤더정보, 실행 압축 여부, 등록 정보, 디지털 인증서 등의 내용을 확인하는 것입니다. 또한 디스어셈블러를 이용해서 내부코드와 그 구조를 확인하는 방법입니다.

 

  - 동적방법 : 파일을 직접 실행시켜서 그 행위를 분석하고, 디버깅을 통하여 코드의 흐름과 메모리의 상태 등을 자세히 살펴보는 방법입니다. 레지스트리, 네트워크 등을 관찰하면서 프로그램의 행위를 분석하고 디버거를 이용하여 프로그램 내부 구조와 동작 원리를 분석하기도 합니다.(디버깅은 리버싱에서 비중이 큰 작업이지만 리버싱의 하위 개념입니다.)

 

 

4. Source Code, Hex Code, Assembly Code

  리버싱에서는 보통 실행파일을 취급합니다.

 

  - Source Code

    Visual C++에서 소스코드(HelloWorld.cpp)를 실행 시킨 사진입니다.

 

 

  - Hex Code

    위에 소스코드에서 Visual C++에서 빌드하여 생성된 실행 파일은 컴퓨터가 이해할 수 있는 2진수 형식으로 되어 있는데 그것을 16진수인 Hex Code로 변환된 사진입니다.

 

 

  - Assembly Code

    솔직하게 Hex Code역시 보기 쉬운 형태는 아닙니다. 따라서 사람이 이해하기 쉬운 어셈블리코드 형태로 보기 위해 디버거 프로그램(OllyDbg)으로 위 소스코드를 빌드해서 생성한 실행파일 HelloWorld.exe를 디버거한 사진입니다.

 

이렇게 어셈블리 코드를 가지고 해당 실행파일을 분석하게 됩니다.

 

 

 

 

 

저도 보안공부와 프로그램공부를 하면서 역공학, 리버싱이란 단어만 들었지 그것이 무엇을 하는지 정확히 모르고 있었습니다.

이제부터 자세히 공부해보록 하겠습니다.^^

 

 

 

 

참고서적 : 리버싱 핵심 원리 / 저자 : 이승원

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

Red_Seek :: 스택 프레임  (0) 2014.01.29
[Red_Seek] abex' crackme #1 (크랙미 #1)  (0) 2014.01.23
[Red_Seek] 스택  (0) 2014.01.22
[Red_Seek] IA-32 Register  (0) 2014.01.14
[Red_Seek] 엔디언 표기법  (0) 2014.01.09
posted by Red_Seek