본문 바로가기

IT/리버스 엔지니어링(Reverse Engineering)

리버스 엔지니어링(Reverse Engineering)이란?




관련 포스팅

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

2. 리버스 엔지니어링(Reverse Engineering) 0과 1로 이루어진 세계(1)

3. 리버스 엔지니어링(Reverse Engineering) 0과 1로 이루어진 세계(2)




■ 리버스 엔지니어링(Reverse Engineering)이란?


리버스 엔지니어링(Reverse Engineering)이란 주로 역공학이라고 불리우며, 어려운 용어와는 달리 우리에게 있어 다소 친숙한 개념입니다.


인류는 과거부터 자연에 주어진 것들을 이용하여 도구를 만드는 등 무엇인가 가치있는 것을 만들어왔습니다.


예를 들어 자연에 있는 폭포등의 물의 흐름을 활용하여 물레방아를 만들고 물레방아의 움직임을 활용하여 떡을 빻는 등의 다양한 도구를 만들어왔습니다.


그렇다면 리버스 엔지니어링 관점에서 집중하는 것은 무엇일까요?


바로 무엇인가 만들어졌을 때의 원리와 구조입니다.


해당 구조를 활용하고 원리를 이용한다면 무궁무진한 다양한 것들을 할 수 있게 됩니다.


앞서 말한 물레방아의 회전 운동을 이용하여 과거 떡을 찧는 방앗간에서, 현재는 전기를 생산해내는 수력발전의 형태로 이용하게 되는 등


무엇인가의 원리에 집중한다면 다양한 활용이 가능합니다.



정리하자면, 리버스 엔지니어링이란 무엇인가를 분석하고 원리를 파악해 이를 활용하여 새로운 것들을 만들어내는 과정 모두를 이야기합니다.




■ 컴퓨터에 있어서 리버스 엔지니어링(Reverse Engineering)이란?


컴퓨터에 관심이 없는 누구나라도 컴퓨터는 0과 1의 세계로 이루어져 있다는 사실에 대하여 들어보았을 것이라고 생각합니다.


그렇다면 컴퓨터는 구체적으로 1과 0으로 어떻게 복잡한 문제를 해결하며 더 나아가 정보혁명시대의 기반이 되었을까요?



이 또한 우리가 알고 있던 개념을 통해 쉽게 파악할 수 있습니다.



누구나 역사시간에 한번쯤은 봉화에 대하여 들어봤을 것 입니다. 


봉화는 사실상 컴퓨터의 데이터 표현방식과 매우 동일하다고 생각하시면 됩니다.



쉬운 이해를 위해 우리는 과거로 돌아가 봉화 신호 체계를 담당하는 군인이 되었다고 가정합시다.




     봉화1  봉화2  봉화3  봉화4

(1)  꺼짐    꺼짐    꺼짐   꺼짐  =>  평화로운 상태이다.

(2)  켜짐    꺼짐    꺼짐   꺼짐  =>  북쪽 오랑캐가 보인다.

(3)  꺼짐    켜짐    꺼짐   꺼짐  =>  서쪽 오랑캐가 보인다.

(4)  꺼짐    꺼짐    켜짐   꺼짐  =>  동쪽 오랑캐가 보인다.

(5)  꺼짐    꺼짐    꺼짐   켜짐  =>  남쪽 오랑캐가 보인다.

                                     .

                                     .

                                     .

(16) 짐    켜짐    켜짐   켜짐  =>  매우 위험한 상태이다.



전쟁시 원활한 소통을 위해서 다음과 같은 신호체계를 만들었다고 생각합시다.

다음과 같은 봉화의 커짐(1)과 꺼짐(0)을 이용하여, 우리는 총 2^4 총 16개의 신호체계를 만들 수 있습니다.


컴퓨터도 이와 동일합니다.


우리에게 익숙한 32비트(bit) 컴퓨터란 총 32개의 봉화로 신호체계를 만들었다고 생각하시면 됩니다.

같은 논리로 64비트(bit) 컴퓨터란 총 64개의 봉화로 신호체계를 만들었다고 생각하시면 되겠습니다.



컴퓨터는 이렇게 약속된 신호 체계를 해석하여 일련의 과정을 진행하는 방식으로 설계되어있습니다.

이를 이용한다면 어떠한 복잡한 과정이든 표현해낼 수 있으며 원하는 작업을 수행할 수 있게됩니다.



그렇다면 이제 다시 과거로 돌아가 오랑캐가 되어 전쟁을 승리할 목적으로 봉화가 설치된 곳에 잠입해봅시다.

현재 조선군들을 우리(오랑캐)가 공격해온다는 정보만을 알고 있으며 우리(오랑캐)가 공격해올 방향은 북쪽입니다.

봉화가 설치된 곳에 정상적으로 잠입하여 봉화를 담당하는 군인을 제압 후 첫 번째 봉화가 아닌 두 번째 봉화에 불을 붙히게 된다면...?

아마도 조선군의 많은 병력이 북쪽이 아닌 서쪽으로 진입하여 오랑캐는 보다 손쉽게 승리를 거머쥘 것 입니다.


이 또한 컴퓨터도 동일합니다.

컴퓨터에서 약속된 신호 체계를 파악하고, 원하고자 하는 작업을 수행할 수 있도록 신호 체계로 변조한다면 우리가 원하는 목적을 이룰 수 있게 됩니다.




결론적으로 컴퓨터에서의 리버스 엔지니어링(Reverse Engineering)이란 

컴퓨터(CPU)에서 약속된 신호체계를 분석 및 파악하여 해당 프로그램이 어떠한 구조로 이루어져 있는지 알 수 있으며, 더나아가 이를 변조한다면 프로그램을 원하는 목적을 하게끔 변경할 수 있는 모든 작업을 지칭합니다.






■ 리버스 엔지니어링(Reverse Engineering)의 활용


리버스 엔지니어링을 그렇다면 어떤 분야에서 활용할 수 있을까요?

사실상 리버스 엔지니어링이란 원리에 집중하는 것이기 때문에 모든 분야에서 무궁무진하게 활용이 가능합니다.


하지만 보다 쉬운 이해를 위해서 간단한 사례를 들겠습니다.


(1) 시리얼 키 크랙

유료(Premium) 프로그램을 구입해본 경험이 있다면, 프로그램을 사용하기에 앞서 시리얼 키를 입력해야 한다는 사실을 압니다.

리버싱을 이용하면 이러한 시리얼 키가 정상적인 지 확인하는 로직을 우회하여 시리얼 키를 입력하지 않고도 해당 프로그램을 정상적으로 사용할 수 있을것입니다.


해당 사항은 불법입니다.



(2) 디버깅 및 패치

디버깅(Debugging)이라고 하여 프로그램을 개발할 때 다소 복잡한 오류가 나는 상황이 발생하면 리버스 엔지니어링을 통하여 접근하여 해당 문제를 파악하고 해결할 수 있습니다. 

예를 들어 특정 라이브러리의 호환성에 에러가 나는 경우 어떠한 부분에서 에러가 나는지 파악하고 해당 문제점을 토대로 이를 개선하여 사용할 수 있습니다. 




궁극적으로 리버스 엔지니어링(Reverse Engineering)기술이란 해당 프로그램의 모든 구조와 원리를 이해할 수 있는 발판이 되기에 무궁무진하게 활용이 가능한 분야입니다.