본문 바로가기
리버스 코드 엔지니어링

[리버스 엔지니어링] 리버스 엔지니어링이란?

by 손정빈 2018. 10. 30.
728x90
반응형

지금까지 리버스 엔지니어링에 대해 수박 겉핡기씩으로 공부 해왔지만 이번 기회에 제대로 공부해보고자 하여 리버스 엔지니어링에 대해 공부한 내용을 공유하고자 합니다.

제가 주로 공부하는데 참고하는 책은 "리버싱 핵심 원리"라는 서적이며  외에도 인터넷 서칭을 통해  많은 내용을 찾아 공부하려고 합니다.

 

게시글을 보시고 질문이나 지적할 내용이 있다면 댓글로 달아주시면 감사하겠습니다.

 

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

제가 처음으로 리버스 엔지니어링에 대해 알게 된건 대학교 1학년 시절 어떠한  전적 검색 사이트에  전적 검색 원리가 너무 궁금해 문의 메일을 넣었던 것으로부터 시작했습니다.

 전적 검색 사이트는 저에게 답변으로 리버스 엔지니어링을 통해 이루어진다라는 답변을 주었습니다.

하지만 1학년이던 저에게는 리버스 엔지니어링은 너무나 어려운 내용이였기에 군대를 다녀온  3학년 때부터 조금씩 관련 서적에 대해서 읽기 시작했습니다.

많은 내용을 알진 못했지만 프로그램 개발자로써 프로그램의 내부가 어떻게 이루어졌는지   있다는 것에 많은 매력을 느꼈고 개발자라면 충분히 알아야 하는 내용이라고 생각이 들었습니다.

 

그러기에 이렇게 공부하는 내용을 보시는 여러분들과 공유하고자 합니다여러분들도 개발자로써  내용에 대해서 이해하신다면 많은 도움이  것이라고 생각 됩니다.

 

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

리버스 엔지니어링이란?

  • 소프트웨어의  분야로이미 만들어진 시스템을 역으로 추적하여 처음의 문서나 설계기법 등의 자료를 얻어내는 
  • 장치 또는 시스템의 기술적인 원리를  구조분석을 통해 발견하는 과정
  • 물건이나 기계장치 혹은 시스템 등의 구조기능동작 등을 분석아혀  원리를 이해하며 단점을 보완하고 새로운 아이디어를 추가하는 일련의 작업

 

 많은 정의가 있겠지만 프로그래머의 입장에서 리버스 엔지니어링은 이미 컴파일이  프로그램을 소스코드 없이 분석하는 작업이라고 생각합니다.

 

이러한 리버싱 엔지니어링의 실행파일 분석 방법은 크게 2가지로 나누어집니다.

 

  1. 정적 분석
  2. 동적 분석

 

정적분석은 실제 실행 없이 컴퓨터 소프트웨어를 분석하는 것을 의미합니다파일의 종류크기헤더 정보Import/Export API, 내부 문자열실행 압축 여부등록 정보디버깅 정보 등의 다양한 내용을 확인하는 것입니다또한 디스어셈블러를 이용해서 내부 코드와  구조를 확인하느 그것도 정적 분석의 범주에 들어갈  있습니다.

동적분석은 실제 또는 가상 프로세서에서 프로그램을 실행함으로써 수행하여 분석하는 것을 의미합니다파일을 직접 실행시켜서  행위를 분석하고디버깅을 통하여  흐름과 메모리 상태 등을 자세히 살펴보는 방법입니다파일레지스트리네트워크 등을 관찰하면서 프로그램의 행위를 분석합니다또한 디버거를 이용하여 프로그램 내부 구조와 동작 원리를 분석   있습니다.

 

 

프로그래밍 공부를  시작하게 되면 C/Python/JAVA/C++ 등의 언어를 통해 프로그램을 작성하고 컴파일을 하여 실행파일을 만들게 되는데앞으로 리버싱을 하게 되면서 자주보게  3가지 종류의 코드가 존재합니다.

 

  1. Source Code
  2. Hex Code
  3. Assembly Code

 

Source Code 프로그래밍 언어를 통해 작성한 코드를 의미합니다.

  컴파일을 통해 생성된 실행 파일은 컴퓨터가 이해할  있는 2진형식으로 되어 작성되게 됩니다. 0 1 이루어진 binary파일을 통해서는 아무리 대단한 리버싱 전문가라도 직접 보고 의미를 해석하는데 어려움이 있습니다따라서 2진수를 16진수 형식으로 변환시켜 확인하는 hex Code 존재합니다.

 


 프로그램은 hex Editor 입니다.

 

하지만 Hex Code 역시 사람에게는 직관적인 형태가 아닙니다따라서   사람이 이해하기 쉬운 어셈블리 코드 형태로 보기 위해 디버거를 이용합니다아래의 사진처럼 디버거 이용시 어셈블리어 코드를 확인   있습니다.


 

 

위의 3가지 코드를 앞으로 자주 보게  것입니다.

 

저는 "리버싱 핵심 원리" 참고하여 작성하지만 예제에 대해서는 언급하지 않을 예정입니다.

혹시 궁금사항이 있으시면 댓글로 달아주시면 최대한 답변 드리도록 하곘습니다

반응형

댓글