엔지니어링이란 완성품과 이를 구성하는 부품들의 기능과 설계를 고안하고, 제작하는 과정을 말합니다. 이와 대비되는 **리버스 엔지니어링(Reverse Engineering)**은 용어의 ‘리버스’가 의미하듯, 위 과정을 거꾸로 하는 행위를 말합니다. 완성된 제품을 해체하고 분석하여 구조와 기능, 디자인을 파악합니다. 책에 따라 이를 ‘역공학’이라고 지칭하기도 하지만, 이 강의에서는 보다 널리 사용되는 ‘리버스 엔지니어링' 또는 ‘리버싱’이라는 단어를 사용하겠습니다.
엔지니어링에 여러 분야가 있는 것처럼 리버싱에도 여러 분야가 있습니다. 약의 성분을 분석하는 것, 자동차의 주행 원리를 이해하는 것, 전자 제품의 회로를 분석하는 것 등에는 각각 생명 공학, 기계 공학, 전자 공학에 대한 리버싱 기술이 적용됩니다. 이 외에도 대부분의 공학 분야에는 그에 대응되는 리버싱 기술이 존재합니다. 이 강의는 그중에서 소프트웨어를 대상으로 한 리버싱을 다룰 것입니다.
소프트웨어 리버싱에 능숙해지기 위해서는 상당히 많은 지식과 기술 그리고 노력이 필요합니다. 소프트웨어와 다양한 컴퓨팅 환경에 대한 깊은 이해를 바탕으로, 적으면 수백 줄, 길면 수만, 수억 줄의 코드로 작성된 프로그램에서 분석할 부분을 찾고, 리버싱을 막기 위해 도입된 안티 리버싱 기술들을 우회해야 합니다. 수학적인 지식이 필요할 때도 있고, 필요한 도구를 직접 개발해야 할 때도 있습니다. 해커의 기본이 되는 기술은 리버싱이지만 이를 숙달하려면 정말 많은 노력이 필요합니다. 그리고 많은 경험을 쌓은 뒤에도 여러분은 가지고 있는 배경 지식만으로는 해결하기 어려운 문제를 맞닥뜨리게 될 수 있습니다.
드림핵의 리버스 엔지니어링 강의에서 추구하는 바는 여러분에게 다양한 지식과 경험을 제공해 드리는 한편, 위와 같은 문제 상황을 스스로 헤쳐나갈 수 있도록 근본적인 힘을 길러드리는 것입니다. 다뤄야 하는 내용이 많아서 다소 딱딱하게 느껴질 수 있지만, 끝까지 따라오신다면 분명 큰 실력 향상을 이루실 수 있을 것입니다.