심플스 - 프로그램과 책 이야기로 가득한 곳, (Simples.Kr)

  


   심플스 배너



먼저 리버스엔지니어링 강좌를 쓰게 된 계기를 적고 시작하려고 합니다.
저도 델파이 개발자로 꾀 지내오면서 어플리케이션 보안에 대해서 몰라도 너무 몰랐었습니다.

첨에는 암호 같은 것도 바이너리로 컴파일을 해버리면 안전한 줄알고, 프로그램 내부에 박아놓기도 하고, 인증과 같은 중요한 모듈이 탑재된 경우에도 바이너리를 그냥 안티디버깅 장치가 전혀 없는 상태로 배포하기도 하고, 외부서버와 인증을 할 때도 패킷을 암호화 하지 않고 그냥 통신하기도 했었습니다.

그러면서 어느날 리버싱을 공부하면서 느끼게 된 점이 아.... 내 프로그램은 그냥 개발리는구나-_-;;
안타깝지만 어떻게 하면 100% 막아낼 방법이 있다고 말하기 힘듭니다.
결과적으로 중국에 난닝구(?)만 입은 채로 거대한 빌딩을 가득채운 리버싱 전문 단체가 있다고 들었기 때문입니다.
말그대로 어셈블리코드를 일일이 처음부터 끝까지 나눠서 복원을 해내는 기술을 중국은 가졌기 때문에 불가능한건 없다고 보고 있습니다. 하지만 그만큼 시간과 인건비가 필요하겠죠.
그래서 최소한 기존에 어떻게 리버싱이 되고 있는지를 알고, 프로그램을 짤 때는 알려지지 않은 나만의 꽁수를 넣을지도 고민해봐야 합니다. 참고로 권장하는 방법은 상용화된 패커나 프로텍터를 사용하는 것입니다.

자 이제 그럼 어떤 순서로 리버싱 강좌를 할 것인가 대략 아래와 같습니다.
제목은 거창하지만 내용은 별거 없습니다.
아마도 모를땐 대단하게 느껴지지만 보고 나면 뭐 별거 아니네?  <--- 요정도 반응이 예상됩니다.


- 리버스엔지니어링이란 무엇인가?
- 리버스엔지니어링 관련 법률
- 간단한 올리디버거 사용법(간단한 if문 우회 샘플)
- DeDe를 이용한 디컴파일
- 디컴파일 된 폼을 이용하여 재조합하는 방법
- Winexp를 이용한 폼속성 제어
- 예전 learn2crack.com에 올라왔던 델파이로 제작된 문제 풀이 2개
- 치트엔진(델파이 오픈소스)를 이용한 메모리 변조
- 치트엔진을 이용한 코드인젝션 (로직변경)


물론 저도 놀고 먹고 있는 상태는 아니기 때문에 너무 자세한 강좌는 힘들고, 어느정도 지식을 나누는 정도로 이야기를 하고 싶습니다.
제가 사이트를 하나 운영중이니 질문이 있으시면 사이트에 오셔서 하시면 될 것 같습니다.

[심플스]
http://simples.kr

그럼 첫번째 강좌인 리버스엔지니어링이란 무엇인가에 대해서 정리를 간략하게 해보겠습니다.



1. 리버스엔지니어링이란 무엇인가?


리버스(Reverse)와 엔지니어링(Engineering)의 합성어인 리버스엔지니어링(Reverse Engineering)은 줄여서 “리버싱(Reversing)”으로 줄여서 사용되고 있습니다.
리버스엔지니어링을 하는 사람을 리버스엔지니어(Reverse Engineer)라고 부르지만 줄여서 “리버서(Reverser)”라고도 합니다.
보안분야에서의 리버싱은 보통 소프트웨어 리버스엔지니어링을 의미하며, 이 챕터에서는 리버싱을 이용하여 이미 완성된 소프트웨어를 역으로 분석하는 과정을 이야기 해보고 법률적으로도 리버싱이 어느 정도가 합법인지는 다음 강좌에서 논의하도록 하겠습니다.

리버싱은 영어 의미 그대로 풀이하면 거꾸로 분석하는 것을 의미하며, 소프트웨어를 역으로 분석하는 과정을 의미합니다.
소프트웨어는 개발자가 소스코드를 작성하고, 그것을 실행 가능한 바이너리를 만들기 위해서 자신이 원하는 컴파일러를 선택하여 컴파일을 시키게 되고, 소스코드는 바이너리가 되고, 이를 우리는 소프트웨어라고 부르게 됩니다.
바이너리는 컴퓨터는 실행하면 해석 할 수 있지만 사람은 한눈에 보기엔 이해하기 힘들어 지며, 이것을 리버싱을 하기 위해 기존소스로 복원하는 과정인 디컴파일을 진행하게 됩니다.
리버싱과 디컴파일 하는 것은 다른 개념이지만 국내 법률에서는 동일하게 “프로그램코드 역분석”으로 규정하고 있기 때문에 리버싱은 소스를 복원하는 과정으로도 여겨지고 있다고 봐도 됩니다.
하지만 100% 정확한 소스코드를 복원해내기는 힘들기 때문에 디버깅과정을 통해서 얻어진 어셈블리어 코드를 분석하여 원래 소스코드의 구조와 원리를 분석하는 과정을 거치게 되며, 이러한 과정이 리버서들에게 즐거움을 주게 됩니다.
그림으로 나타내자면 아래와 같습니다.



 

우리가 주변에서 보게 되는 소프트웨어의 인증을 깨는 크랙(Crack)들은 이러한 리버싱 과정을 통해서 개발자가 자신의 프로그램을 보호하기 위해 만든 장치들의 헛점을 찾아내어 우회하는 툴이라고 할 수 있습니다.
국내에서 잘못된 인식이라면 리버싱을 하면 크랙을 만들기 위해서만 연구하는 것으로 생각되는 경우가 있는데, 이는 보안업계에 종사하는 대부분의 기술자들을 범죄자 취급하는 결과를 낳게 되므로 절대로 그러한 방향의 사고를 하지 않아야 합니다.

보통 자신의 영리만을 위해서 법을 어기면서 까지 프로그램을 공짜로 사용하기 위해서만 크랙을 만들어서 배포하는 사람은 크래커(Cracker)라고 부르고 있으며, 그와는 반대로 프로그램을 구현하는 과정에서 실수 할 수 있는 부분들을 분석하여 헛점을 찾아내면 프로그램의 보안이 강화되기를 바라면서 자신이 찾은 취약점들을 세상에 공개하여 방어의 기술의 발전에 공헌 하는 사람들이 있습니다.
이런 사람들을 해커(Hacker) 혹은 리버서(Reverser)라고 부르곤 합니다.

그러면 우리는 리버싱을 공부하여 무엇을 얻어야 할 것 인지 생각해 볼 필요가 있으며, 기존의 리버서들은 리버싱을 통해서 어떤 일들을 해왔는지를 알아야 합니다. 가장 대표적인 분야로는 악성코드 분석이 있습니다.
최근 일반인들의 PC에까지 퍼져서 공공의 적이 되고 있는 악성코드들은 누군가가 금전적인 이익만을 위해서 다른 사람들을 괴롭히는 행위로 볼 수 있고, 이러한 악성코드들은 바이너리 형태로 세상에 퍼지고 있으며, 이를 분석하여 정상적인 파일과의 차이점을 알아내고, 치료하는 툴을 만들어 내고 있습니다.

마치 의사선생님이 환자가 걸린 병의 원일을 파악하고, 그에 적절한 처방전을 내리듯이 리버서들도 사회의 악인 악성코드들을 파악하고, 그것을 치료하기 위해서 어떤 처방이 필요할지를 밤낮을 세워가며 패턴을 정리하고 있습니다.
근본적으로는 악한 마음을 지닌 자들이 주는 피해를 최소하고, 미리 예방하기 위해서 리버싱이 간절하게 필요하다고 볼 수 있습니다.

말이 너무 길어졌는데, 다음 강좌에서는 국내 리버스엔지니어링 기술을 허용하는 법률의 범위에 대해서 알아보도록 하겠습니다.
절대로 남의 프로그램을 저작자의 허락 없이 리버싱 하거나 악의적으로 리버싱을 하는 일은 없어야 한다는 점을 강조하기 위해서는 법률을 먼저 알아야 하기 때문에 다음강좌는 딱딱하겠지만 법률에 대한 설명을 하겠습니다.

profile

먼 산 조각 구름은 거처가 없다.

엮인글 :
http://simples.kr/7636/c6e/trackback

항형

2009.03.11 17:26:42

감사합니다 잘 보겠습니다.


2009-03-11 17:26:42, esniper wrote:

--- 따온 텍스트 [show/hide] ---



Pangaea

2009.03.11 17:26:42

UCE도 리버스엔지니어링 이죠 ?

치트엔진이 UCE이니까요

제가 아는 UCE는 게임핵을 쓸때 사용을 하더군요..

profile

esniper

2009.03.11 17:26:42

UCE는 치트엔진 코드가 델파이로 오픈소스 형태로 공개되어있기 때문에

그것을 사용자가 수정해서 재 컴파일 한 것을 의미하는데, UCE는 그냥 툴이라고 보시면 되겠네요.

게임핵과 관련된 UCE라고 하는 부분은 공개된 버전의 치트엔진은 보안솔루션에서 탐지가 되니깐,

탐지가 되지 않도록 사용자가 수정한 것을 의미합니다.


2010-01-10 13:15:00, Pangaea wrote:

--- 따온 텍스트 [show/hide] ---



List of Articles
번호 제목 글쓴이 날짜 조회 수
6 도서자료실 [리버스엔지니어링] Unpacker file 관리자 2009-03-16 42884
5 도서자료실 [리버스엔지니어링] gilgil님의 네트워크 관련 법률해석 esniper 2009-03-14 42626
4 도서자료실 [리버스엔지니어링] 2008년 리버스엔지니어링 관련 세미나 안내 관리자 2009-03-14 42468
3 도서자료실 [리버스엔지니어링] 2. 리버스엔지니어링 관련 법률 esniper 2009-03-11 42021
» 도서자료실 [리버스엔지니어링] 1. 리버스엔지니어링이란 무엇인가? [3] esniper 2009-03-11 41177
1 도서자료실 [리버스엔지니어링] 오타 정보 > Last Update 08.11.16 [6] 관리자 2009-03-04 40959

  • 이용약관
  • 개인정보취급방침
  • 사이트맵