본문 바로가기

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

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




관련 포스팅

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

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

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





■ 개요


[리버스 엔지니어링(Reverse Engineering) 0과 1로 이루어진 세계(1)] 에서 0과 1로 이루어진 데이터가 어떻게 표현되어 있는지 알아보았습니다.


그렇다면 컴퓨터 상의 데이터(파일)이 실제로 0과 1로 이루어져 있는지 실습을 통해서 확인해보고 간단한 변조를 해보겠습니다.




■ 실습


오늘의 실습은 빨간색(RED) 그림 파일이 실제로 0과 1로 이루어진 모습을 확인하여 보고 이를 변조하여 파란색(BLUE) 그림 파일로 바꾸어 보겠습니다.


실습에 앞서 한가지 선행되어야 할 지식이 있습니다. (리버싱과는 크게 관련된 지식이 아니니 부담 가지지 마세요.)




컴퓨터에서 색깔을 표현하는 데이터 방식입니다.


많이들 RGB 표현 방식이라는 색상 표현 방식을 들어 보셨을 것이라 생각합니다.


RGB란 R(빨강), G(초록), B(파랑)이라는 빛의 삼원색을 혼합하여 색을 표현하는 방식입니다.


특징으로는 위 그림을 확인하시면 알겠지만 광원(빛)을 이용하여 혼합하기에 색상을 섞을수록 밝아지는 '가산혼합'이라고 합니다.



그리고 RGB표현 방식이란 색상의 정도를 총 256단계로 표현하는 방식입니다. 


붉음 정도를 0~255, 녹색 정도를 0~255, 푸름 정도를 0~255로 나타내어 이를 혼합하여 원하고자 하는 색을 나타냅니다.


예를들어 RGB(199,0,0) 보다 RGB(239,0,0) 붉은 색상이 많이 섞였기에 훨씬 붉은 정도를 나타내는 것이죠.




RGB(199,0,0)

RGB(239,0,0)



 다음 그림을 보면 확인하실 수 있습니다.



그렇다면 이제 RGB 표현 방식을 이용하여 가장 붉은 정도의 색상을 띠는 RGB(255,0,0) 비트맵 파일을 만들어보겠습니다.



 





붉은색 이미지 파일이 만들어졌습니다.



이를 헥스에디터(HexEditor)라는 프로그램을 이용하여 열어보겠습니다.


헥스에디터(HexEditor)란 파일이나 프로그램이 실제 0과 1으로 어떻게 데이터가 이루어져 있는 지 보여주며 이를 변조할 수 있는 프로그램입니다.





다음과 같은 형태의 데이터 표현방식을 보여줍니다.


다소 난해하다고 해서 겁먹으실 필요는 없습니다.


지금까지 포스팅을 잘 숙지해오셨으며 설명을 들으시면 해당 데이터가 의미하는 바를 쉽게 파악할 수 있습니다.


해당 데이터 표현방식을 눈여겨 살펴보면, 특정한 규칙성을 갖고 반복된다는 것을 쉽게 확인할 수 있습니다.





반복되는 부분을 확인해보겠습니다.


FF 00 00


해당 부분이 지속적으로 반복된다는 것을 확인할 수 있습니다.



그렇다면


과연 해당 데이터가 의미하는 바는 무엇일까요?


컴퓨터 내에서 모든 데이터가 보기 쉽게 16진수로 이루어져 있다는 사실을 저번 포스팅에서 알아보았습니다.


16진수 데이터를 10진수로 변환해보겠습니다.



16진수 : FF → 10진수 : 255

16진수 : 00 → 10진수 : 0

16진수 : 00 → 10진수 : 0



바로 해당 부분은 RGB 데이터 표현 방식을 이용한 빨간색 RGB(255,0,0) 을 나타낸 부분입니다.



하지만 냉철하게 읽으신 분이라면 그렇다면 맨 위에 부분은 무엇을 의미하냐라는 의문이 드실 것이라 생각합니다.





바로 이 부분인데요.


RGB(255,0,0)으로 이루어진 것이 아닌 추가적인 부분이 붙어있습니다.


이 부분은 헤더(Header)라고 불리우는 부분입니다.


간단하게 말씀드리자면 


헤더란 모든 파일에 확장자(.exe, .bmp, .mp3)가 있는 것 처럼 해당 데이터를 어떻게 해석할지에 관한 정보를 알려주는 부분입니다.


표현하고자 하는 데이터 뭉치만 있다면 해당 파일을 그림파일로 해석해야 할 지 음악파일로 해석해야 할 지 컴퓨터는 알 수가 없습니다.


모든 파일에는 이렇게 나는 어떤 데이터이며 어떻게 해석해야 하는지 나타내는 부가적인 정보를 포함하여 파일로 만들어져 있습니다.


현재로서는 이렇게만 알고 있으시면 모든 정보를 아신거니 찝찝하게 생각할 필요는 없습니다.


이후 실행 파일의 포맷(PE format)에 대하여 언급할 때 자세하게 말씀드리겠습니다.


[비트맵 데이터 파일 구조]


만약 구체적으로 헤더에 표현된 데이터를 보다 깊게 알고 싶은 분을 고려하여 추가적인 링크를 남기겠습니다.



이렇게 얻은 정보를 이용하면 실제 색상을 나타내는 부분이


37바이트에서 부터 시작된다는 사실을 알수 있습니다.




그렇다면 표현된 데이터를 변조하여 색상을 나타내보겠습니다.


눈여겨 보시면 RGB순이 아니라 BGR순으로 색깔 표현이 역순으로 나타내어 있는 것을 확인할 수 있네요.


00 00 FF → FF 00 00 


다음과 같이 변환한다면 색상이 파란색의 이미지 파일로 변환될 것이라는 예상을 해보고 진행해보겠습니다.





다음과 같이 일부 데이터만 변경해주었습니다.


결과는...?




좌측 하단 부분을 눈여겨 보시면 일부분이 파란색으로 변조된 것을 확인할 수 있습니다.


수작업이 아니라 프로그래밍을 이용한다면 훨씬 간단한 작업이 되겠죠.



실습을 통해 실제 컴퓨터내에서 데이터가 어떻게 표현되어 있는 지 알아보았습니다.


모든 컴퓨터 내에 파일 및 프로그램등은 모두 이와 같은 방식으로 이루어져있습니다.


적절한 규칙만 파악한다면 우리는 어떠한 프로그램도 우리가 원하는 대로 해킹이 가능합니다.



간단한 예제였지만 이를 통해 실제로 컴퓨터 내에서 데이터가 표현된 방식을 이해하셨길 바라겠습니다.