역공학(Reverse Engineering)

 

역공학에 대해서 네이버 백과사전은 이렇게 말한다..

개발이 완료되어 유지보수가 이루어지고 있는 소프트웨어 시스템의 구성요소를 알아 내고, 구성요소들 간의 관계를 식별하고, 대상(object) 시스템을 분석하는 과정이다.

즉, 소프트웨어 생명주기의 마지막 단계에서 얻어지는 프로그램이나 문서 등을 이용하여 생명주기 초기 단계의 생성물에 해당하는 정보나 문서들을 만들어 내는 일로서, 설계부터 순차적으로 이루어지는 순공학에 상대되는 개념으로 역공학이라 한다.

처음에는 하드웨어 분야에서 완제품으로부터 제품의 설계사양을 추출하려는 목적에서 출발했으며, 리코프(M.G.Rekoff)는 이를 “복잡한 하드웨어 시스템의 견본을 분석하여 일련의 설계명세를 개발하는 과정”이라고 정의하였다.

그런데 컴퓨터를 기반으로 하는 소프트웨어 공학이 널리 소개되면서 기존의 정보시스템을 소프트웨어 공학의 방법으로 재정의하여 시스템의 품질을 향상하고 유지보수와 관련된 업무를 개선하려는 요구가 생겼고, 이를 충족시키는 방법으로 역공학이 이용되기 시작했다.

이렇게 역공학은 시스템을 이해하여 적절히 변경하는 소프트웨어 유지보수 과정의 일부이다. 대상 시스템을 변경시키거나 새로운 시스템으로 개선하는 것이 아니라 기존 시스템을 분석하는 작업이라 할 수 있다.

그렇다고 소프트웨어 유지보수 단계에만 한정되는 것은 아니고, 직간접적으로 소프트웨어 개발을 지원하기도 한다. 기존 시스템에 역공학을 적용하여 설계구조를 뽑아 내고, 이를 이용해 시스템 분석과 설계를 향상시키는 일이 그런 예이다. 또한 역공학된 설계 정보는 새로운 시스템 설계의 출발점이 되기도 하며, 수정되어 새로운 시스템을 탄생시키기도 한다.

그러나 역공학은 다분히 한시적인 기술로 전락할 가능성이 있다. 순공학의 자동화기술 분야가 발전하면 역공학의 필요성은 상대적으로 줄어들게 된다. 또한 현재 개발되어 있는 역공학의 도구와 기술이 많은 부분 통합되어 있지 않아 실제로 도입하여 적용하는데 장애물이 되고 있다.

———————————————————————
내가 아는 역공학은.. 크랙..ㅋ 소프트웨어 패치 등이다^^;;

소프트웨어 개발 분야에 있어서는 역공학이 정점이 아닐까 하는 생각이 든다..

 

This entry was posted in Scrap, Security/Hacking and tagged , . Bookmark the permalink.

댓글 남기기