본문 바로가기

Hacking & Security/Reverse Engineering

Reverse Engineering

(이 글은 나뭇잎을 참고했습니다 .  )

리버스 엔지니어링 ( 역공학 )
일반적인 의미에서 리버스 엔지니어링 ( Reverse Engineering ) 이라고 하며 기계장치 혹은 시스템의 구조 , 기능 , 동작등을 분석하고
그 원리를 이해하며 단점을 보완하고 새로운 아이디어를 추가하는 일련의 작업이다.

리버싱에는 크게 두가지 분석방법이있다.


1 ) 정적 분석

파일의 겉모습을 관찰하여 분석하는 방법으로 정적 분석 단계에서는 파일을 실행하지 않는다.
파일의 종류( EXE , DLL , DOC , ZIP 등 ) , 크기 , 헤더 ( PE )정보 , 내부문자열  , 디버깅 정보등 다양한 내용을 확인하는것이다.
또한 디스어셈블러를 이용하여 내부 코드와 그 구조를 확인하는 것 또한 정적분석의 범주에 들어갈 수 있다.
이러한 정적 분석 방법으로 얻어낸 다양한 정보는 동적 분석 방법에 좋은 참고 자료로 활용된다.


2 ) 동적 분석
    파일을 직접 실행시켜서 그 행위를 분석하고 , 디버깅을 통하여 코드 흐름과 메모리 상태 등을 자세히 살펴보는 방법.

    파일 , 레지스트리 ,네트워크 등을 관찰하면서 프로그램의 행위를 분석 .
    또한 디버거를 이용하여 프로그램 내부 구조와 동작 원리를 분석할 수 있다.

Hex Code
    생성된 실행 파일은 컴퓨터가 이해할 수 있는 2진수 형식으로 되어있다.

    그러나 아무리 전문가라 하더라도 binary 파일을 직접 보고 의미를 해석하는 것은 매우 힘든일이다.
    따라서 2진수를 16진수 ( Hex ) 형식으로 변환시켜서 좀더 보기 수월하게 한다.

    Hex Editor를 통해 binary 형식의 파일을 hex형식으로 변환이 가능하다.
    사실 Hex Code 또한 사람이 직관적으로 이해하기는 힘들다.
    따라서 좀 더 사람이 이해하기 쉬운 어셈블리 코드 형태로 보기 위해 디버거를 이용한다.


    디버거를 통해 한 exe 프로그램을 열어보겠다.




다음과 같은 창을 확인할수 있다.


각 윈도우의 명칭과 기능을 기억해놓자.

 Code Window

기본적으로 디스어셈블리 코드를 표시하여 각종 comment , label을 보여주며 , 코드를 분석하여 loop . jump위치 등의 정보를 표현한다. 

 Register Window 

CPU register 값을 실시간으로 표시하며 특정 register들을 수정도 가능하다. 

 Dump Window 

프로세스에서 원하는 memory 주소 위치를 Hex와 아스키/유니 코드 값으로 표시하고 수정 가능 

 Stack Window 

ESP register가 가리키는 프로세스 stack memory를 실시간으로 표시하고 수정도 가능하다. 



패치와 크랙


패치 :프로그램의 파일 혹은 실행중인 프로세스 메모리의 내용을 변경하는 작업


크랙 : 패치와 같은 개념이지만 그 의도가 비합법적이고 비도덕적인 경우를 구분하여 말한다.

일반적인 패치의 예는 마소의 WIndows 업데이트를 들 수 있다.

패치의 주된 목적 : 프로그램의 취약점 수정과 기능 개선

크랙의 목적 : 주로 저작권을 침해하는 행위 ( 불법 복제 / 사용 ) 



'Hacking & Security > Reverse Engineering' 카테고리의 다른 글

Stolen Bytes  (0) 2019.09.26
x86 그리고 x64  (0) 2019.09.26
#1. Reverse Engineering  (0) 2018.09.21
Reverse Engineering 2  (0) 2017.11.23
디버깅 단축키 , 기본 어셈블리어  (0) 2017.11.19