리버스 엔지니어링이란

엔지니어링 : 완성품과 이를 구성하는 부품들의 기능과 설계를 고안하고, 제작하는 과정
리버스 엔지니어링(Reverse Engineering) : 엔지니어링을 거꾸로 하는 행위, 완성된 제품을 해체하고 분석하여 구조와 기능, 디자인을 파악한다.
이를 ‘역공학’이라고 지칭하기도 한다.
소프트웨어 리버싱에 능숙해지기 위해서는 상당히 많은 지식과 기술 그리고 노력이 필요하다.
소프트웨어와 다양한 컴퓨팅 환경에 대한 깊은 이해를 바탕으로, 적으면 수백 줄, 길면 수만, 수억 줄의 코드로 작성된 프로그램에서 분석할 부분을 찾고, 리버싱을 막기 위해 도입된 안티 리버싱 기술들을 우회해야 한다.
수학적인 지식이 필요할 때도 있고, 필요한 도구를 직접 개발해야 할 때도 있다.
해커의 기본이 되는 기술은 리버싱이지만 이를 숙달하려면 정말 많은 노력이 필요하다.
많은 경험을 쌓은 뒤에도 가지고 있는 배경 지식만으로는 해결하기 어려운 문제를 맞닥뜨리게 될 수 있다.
따라서 근본적인 목표는 위와 같은 문제 상황을 스스로 헤쳐나갈 수 있는 힘을 기르는 것이다.
리버싱의 용도
리버싱은 다양한 용도로 사용될 수 있다.
good case
판매된 지 너무 오래되어 제작사가 이미 개발을 중단한 프로그램에 대한 패치
→ 1996년에 발매된 ‘디아블로1’이 리버싱을 거쳐 모딩된 버전이 공개된 바 있다.
또한, 각종 프로그램의 보안성을 평가하거나 악성코드를 분석할 때도 리버싱이 널리 쓰인다.
리버싱을 통해 프로그램이 얼마나 안전하게 설계되었는지, 혹은 악성코드가 어떤 방식으로 동작하고 시스템에 피해를 입히는지 알아낼 수 있다.
bad case
상용 프로그램을 구매하지 않고 무료로 이용하기 위해 쓰는 키젠 프로그램이나 시리얼 넘버 생성기, 크랙 등의 불법 프로그램
→ 유료로 판매되는 프로그램들이 어떤 방식으로 정품 인증을 하는지를 리버싱을 통해 알아낼 수 있기 때문
또 각종 프로그램을 분석해서 게임핵을 만들 때도 리버싱이 사용된다.
Disclaimer
리버싱은 학습 및 연구용으로 많이 이용될 뿐만 아니라, 각종 악성코드나 불법 프로그램의 분석 및 대응을 위해서도 사용되는 효과적인 기술이다.
그러나 프로그램의 전체적인 작동 원리를 알아낼 수 있으므로, 상용 프로그램의 지적 재산권을 침해할 수 있다는 위험성도 존재한다.
테스팅이나 연구, 학습 등을 목적으로 한 리버싱의 경우 저작권을 침해하지 않는 한에서 제한적으로 허용된다.
임의로 패치한 프로그램을 배포하는 등 저작권을 침해하는 행위는 법적인 문제로 이어질 수 있다.
관련 저작권법
저작권법 제35조의3 (저작물의 공정한 이용)
제1항 제23조부터 제35조의2까지, 제101조의3부터 제101조의5까지의 경우 외에 저작물의 통상적인 이용 방법과 충돌하지 아니하고 저작자의 정당한 이익을 부당하게 해치지 아니하는 경우에는 보도ㆍ비평ㆍ교육ㆍ연구 등을 위하여 저작물을 이용할 수 있다.
저작권법 제101조의3 (프로그램의 저작재산권의 제한)
제1항 제6호 프로그램의 기초를 이루는 아이디어 및 원리를 확인하기 위하여 프로그램의 기능을 조사ㆍ연구ㆍ시험할 목적으로 복제하는 경우(정당한 권한에 의하여 프로그램을 이용하는 자가 해당 프로그램을 이용 중인 때에 한한다)
