Mafia의 진실
Mafia의 진실 2010.02.10

낚시성 제목에 방문하신 분께는 죄송합니다. 이 글은 오래전부터 twitter 사용자들을 대상으로 퍼져나가고 있는 'Mobster world'라는 온라인 MMORPG 게임과 관련된 글입니다. 트위터 사용자 분들 중에는 위와 유..

iPhoto 슬라이드 쇼

트위터에 질문이 하나 올라와 짧게 작성해봤습니다. iPhoto에서 슬라이드 쇼 생성하는 방법입니다. 1. 먼저 사진 메뉴에서 슬라이드 쇼에 추가할 사진을 선택합니다. 사진 선택은 Command 키와 마우스를 이용합니다. 2...

노키아에서 동작하는 Mac OS X 10.3

핀란드에 사는 Toni Nikkanen이라는 분이 자신의 Nokia N900 모델에 Mac OS 10.3 Panther를 설치하고 실행시키는데 성공했다고 합니다. Toni의 블로그에 가보니 Mac OS X 말고도 Windows..

사용자 삽입 이미지
르마딜로(armadillo)입니다. 온몸이 갑옷같은 껍질로 둘러싸여있는 이 녀석은 보호의 대명사입니다.  오라일리에서 패킹/언패킹에 관한 책을 낸다면 아마도 이 녀석을 표지 모델을 쓰지 않을까요.아, 그러고 보니 이미 다른 책의 표지 모델로 한 번 등장했었군요. 여하튼 이 연재물의 첫번째 이야기의 주제는 "패킹을 이해하자"로 정했습니다. 언패킹에 대한 본격적인 이야기를 시작하기 전에 패킹이란 무엇이고 어떻게 이루어지는 지를 알아보는 시간을 갖자는 의미이죠.


Packing 그것이 알고 싶다.

참고. 본 연재는 PE에 대한 기본 개념은 알고 있다는 가정 하에 모든 설명이 진행됩니다. 혹시 아직 PE에 대해 좀 부족하다고 느끼시는 분은 PE를 공부하신 후에 보시는 것이 여러모로 좋겠습니다.

Packing 그냥 편하게 패킹이라고 하겠습니다. 어려운 단어는 아니지만 먼저 사전을 통해 패킹의 의미를 살펴보도록 하죠. 네이버 형님께 여쭤봤습니다.

pack·ing〔〕 n.
1 포장;짐꾸리기
   a packing box 포장용 상자;【기계】 패킹
2 포장 재료, 포장용품, 포장용 충전물(充塡物), 패킹 《삼 부스러기·솜 등》
3 통조림 제조업;《미》 식료품 포장 출하업;《특히》 정육 출하업
4【인쇄】 패킹;【건축】 틈 메우기

흠 포스가 있으십니다. 짧게 대답해 주시네요. ^^; 포장이랍니다. 그렇다면 프로그램을 패킹한다는 것은 프로그램을 포장한다는 의미가 되겠군요. 그렇다면 왜 프로그램을 포장하는 것이 필요할까요? 우리가 일상 생활에서 접하는 포장은 일반적으로 내용물을 보호하기 위한 목적을 가지고 있는 경우가 많습니다. 프로그램을 포장하는 목적도 이와 크게 다르지 않습니다. 프로그램을 패킹하는 주된 이유는 프로그램을 리버싱으로 부터 보호하는 것입니다. 물론 UPX (http://upx.sourceforge.net) 의 예에서 처럼 프로그램의 크기를 줄이기 위한 것도 목적이 될 수 있습니다. 요컨대 프로그램의 사이즈를 줄이거나 프로그램을 리버싱으로 부터 보호하기 위한 방법으로 고안된 기법 중 하나가 패킹이라는 것이죠. 근데 이게 마치 물건을 포장하는 것과 비슷한 모양새를 가지고 있다는 거죠. 어떤 모양이길래 그럴까요? [그림 1]은 패킹 전후 프로그램의 모습을 설명하고 있습니다.

사용자 삽입 이미지

[그림 1] Packing 개념

위의 그림을 간단히 설명드리도록 하겠습니다. 그림 상에서 Target 프로그램은 패킹하려는 프로그램을 의미합니다. 단순히 패킹이 안 된 프로그램의 모양이라고 보시면 되겠습니다. 우측은 패킹된 후 프로그램의 모습입니다. 그림을 보시면 target 프로그램은 압축되거나 암호화 또는 인코딩 된 상태로 새로운 프로그램의 데이터 영역에 저장되어 있습니다. 마치 물건을 상자에 집어넣듯이 원래의 프로그램을 새로운 프로그램안에 집어넣은 것이죠. 실제 포장과 다른 점은 상자안에 내용물을 넣기 전에 가공(압축/암호화/인코딩)을 한다는 점입니다. 상자로 비유된 새로운 프로그램의 주된 역할은 이렇게 데이터 영역에 저장해 둔 원래의 프로그램을 메모리에 로드한 후 실행이 가능하도록 조작하는 것입니다. 더불어 여러가지 안티 리버싱 기법을 적용하여 원래의 프로그램을 리버서에게 감추는 역할도 담당하고 있습니다. ^^; 그다지 어려운 개념은 아닐 거라 생각합니다.

오늘날 패킹이라는 기법은 많은 개발 회사에서 자사의 제품을 보호하기 위해서도 사용하지만, 악성코드 제작자들 역시 분석을 어렵게 하기 위한 목적으로 패킹을 사용하곤 합니다. 이러한 이유로 악성코드 분석을 위해 또는 일반적인 프로그램의 리버싱을 위해 반드시 익혀야 할 기술 중 하나가 바로 언패킹이 되는 것이죠. 언패킹 자체는 그다지 어려운 작업은 아닙니다. 문제는 패킹을 하면서 여러가지 장애물들을 설치해 놓아서 분석 시간이 더뎌지거나 심지어 포기하는 지경에 이르게 되는 것이죠. 그 장애물이란 다름 아닌 각종 안티 리버싱 기법들입니다. 따라서 자유 자재로 언패킹을 하기 위해서는 각 종 안티 리버싱 기법을 이해하고 이를 우회 내지는 분석 방법에 대해서 잘 알아두는 것이 필요하겠습니다. 이러한 내용들은 이어지는 글에서 자세히 다룰 것입니다.

오늘은 워밍업삼아 여기까지만 알아보도록 하겠습니다. 다음에는 몇 가지 간단한 실험을 통해 패킹에 대한 이해의 깊이를 더하고 언패킹은 어떻게 이루어지는지 알아보도록 하죠. 즐핵하세요.

Posted by zesrever

BLOG main image
Slow but Steady, Broad and Deep ... by zesrever

공지사항

카테고리

분류 전체보기 (44)
Digital Forensics (4)
Reverse Engineering (21)
Vulnerability (2)
Secure Coding (0)
Book Story (1)
Digital Life (7)
My Life (7)
세미나자료 (1)
개인용 (0)
Musics (0)
Total : 261,010
Today : 56 Yesterday : 223