column

Reverse Code Engineering (1)

reversecore 2009. 2. 25. 06:05
반응형



Reverse Engineering (RE)



일반적인 의미에서 Reverse Engineering (RE : 역공학)이라고 하면,
물건이나 기계장치 혹은 시스템 등의 구조, 기능, 동작등을 분석하여
원리를 이해하며 단점을 보완하고 새로운 아이디어를 추가시키는
일련의 작업이라고 할 수 있습니다.


Reverse Engineering(이하 리버싱) 의 개념은 여러분의 일상생활 속에서도 찾아 볼 수 있습니다.

회사에서 리버싱이 사용되는 예를 들어 보겠습니다.
가령 경쟁사에서 신제품을 출시했다고 해봅시다.
R&D 부서에서는 얼른 구입해서, 어떤 새로운 기능이 있으며 어떻게 만들었는지 살펴볼 것입니다.

구현 능력이 엇비슷 하다면 금방 따라 만들 수 있을것입니다.
혹은 원래 기능의 단점을 보완하고 더 새로운 기능을 추가시킬 수 있을지도 모릅니다.



Reverse Code Engineering (RCE)



소프트웨어 역공학의 의미는 일반적인 의미의 역공학과 기본적으로 같은 개념이지만,
분야를 소프트웨어로 한정지어 놓았다고 이해하시면 되겠습니다.

우리나라에서는 아직 정확한 용어의 통일이 되지 않아서 여러가지 용어들이 같이 사용되고 있습니다.
많은 분들께서 Reverse Code Engineering, Reverse Engineering, 역공학, 리버싱등의 용어를 마구 섞어서 쓰고 계십니다.

제 블로그에서도 'RCE', 'RE' 혹은 편하게 '리버싱' 이라고 표현하겠으며,
제가 가장 좋아하는 단어인 '분석'  또는 '상세분석' 이라는 말을 많이 쓰도록 하겠습니다.
말 그대로 소프트웨어를 리버싱 관점에서 상세하게 분석한다는 뜻입니다.


일반적인 소프트웨어 혹은 프로그램들의 제작방법을 보면,
먼저 소스 코드를 작성하고 컴파일/링크 과정을 거쳐서 실행가능한 binary 형태의 파일로 만들어 집니다.

여기서 실행가능하다는 말은 컴퓨터가 그 binary 를 이해할 수 있어서
프로그램을 제작자의 의도대로 실행 시킬 수 있다는 뜻입니다.

컴퓨터를 잘 이해하고 있는 사람 또한 같은 바이너리 코드를 보고 이해할 수 있습니다.
(물론 이해 속도는 떨어지겠지만요.)

일반인들이 실행가능 binary 파일의 내용을 보면 마치 고대의 해독 불가능한 상형문자를 보는 것과 마찬가지로 그 내용을 이해할 수 없지만, 소프트웨어 역공학 전문가들의 눈에는 그 내용이 훤히 보이게 되는 것입니다.

어떻게 그런 일이 가능할까요?
컴퓨터의 구조와 언어를 능숙하게 익히면 가능합니다.

어떤 리버싱 전문가는 농담삼아(?) 이렇게 이야기 하기도 합니다.
“남들이 작성한 지저분한 C 소스코드 보는 것보다, 그 실행파일의 disasm 코드를 보는게 더 편해.”



RCE 방법



크게 두가지 방법이 있습니다. 정적분석동적분석입니다.

1) 정적분석
: 파일을 실행 시켜 보지 않고 분석하는 방법입니다.
  파일의 종류(EXE, DLL, DOC, ZIP, etc), 크기, 헤더(PE)내용, 내부 문자열, 실행압축여부, 등록정보, 디버깅정보,
  디지탈 인증서 등을 확인하는 것입니다.
  또한 디스어셈블러(Disassembler)를 이용해서 내부 코드와 그 구조를 확인 할 수 있습니다.

2) 동적분석
: 파일을 직접 실행 시켜서 분석하는 방법입니다.
  실행 증상(파일, registry, 네트워크 등)을 모니터링 하고,
  디버깅(debugging) 하여 기능, 동작, 메모리 상태, 레지스터 값, 코드 흐름을 살펴보는 것입니다.

두 가지 분석 방법 모두 편리한 유틸리티들을 사용하여 분석이 이루어지며,
경우에 따라서 두 가지 방법 중에서 한가지 혹은 두가지 모두를 사용하여 분석을 완료합니다.

제 경우에는 보통 정적분석으로 최대한의 정보를 수집하고 해당 파일에 대한 감을 잡은 후에 동적분석을 해봅니다.
Debugging 은 가장 마지막에 쓰거나 경우에 따라서는 아예 쓰지 않습니다.



패치(patch) 또는 크랙(crack)




프로그램의 파일 혹은 실행중인 프로세스의 메모리 내용을 변경시키는 작업을 패치(patch) 라 하고,
그 중에서도 의도적으로 저작권을 침해하기 위하여 변경시키는 작업을 크랙(crack) 이라고 합니다.

이러한 예는 일상생활에서 많이 접할 수 있습니다.

iPhone 을 크랙하여 쉘을 띄우고, 게임기를 크랙하여 복제 CD 를 사용할 수 있도록 하며
각종 SW 를 크랙하여 불법 복제를 가능하도록 하는등 셀 수 없이 많은 크랙을 볼 수 있습니다. 

제 블로그에서는 정품 소프트웨어의 크랙 방법을 다루지 않습니다.
어디까지나 리버싱의 원리와 OS 내부구조에 대한 깊이있는 공부가 주된 관심사 입니다.



ReverseCore



리버싱 방법과 그 원리에 대해서 설명하는 블로그로 만들겠습니다.

ReverseCore 접속 준비물은 적당한 의욕  구글(Google) 입니다. 


- 적당한 의욕 

    과욕을 부리시면 안됩니다.
    리버싱은 인내, 인내, 인내의 연속입니다.
    과욕을 부리시다가 생각대로 안되면 중도 포기하게 됩니다.
    "안돼면 내일 하지 뭐~" 이런 자세가 좋은것 같습니다.


- 구글(Google) 

    뭐든지 다 있다고 그냥 믿으십시요.
    내가 궁금한 내용이 다 있다 라고 그냥 순수하게 믿고 찾으시기 바랍니다. 
    지금부터 배우려는 내용은 이미 수년전에 누군가가 했었던 것들이며,
    수년동안 많은 사람들이 따라 해봤던 내용들입니다.
    만약 찾는게 진짜로 없다면... 
    축하드립니다.
    드디어 당신은 리버싱 guru 의 경지에 도달하신겁니다. ^^


제가 강조하고 싶은 내용은
리버싱이란 컴퓨터와 OS 내부구조에 정통해야 좋은 성과를 얻을 수 있다
는 것입니다. 


 

반응형