일상 생활에서의 역공학
마소플러스
일상 생활에서의 역공학 - 월간 마소 8월호 中
강병탁 / window31@empal.com / www.window31.com
예전에 유럽의 어느 호텔에서는 한국인이나 중국인을 받지 않는 곳이 있었다. 이유는 유럽의 호텔에서는 샤워기 등의 각종 편의도구를 최신 시설로 구비하여 서비스 하고 있는데, 한국인이나 중국인만 왔다 가면 그것을 모조리 분해해 놓고 도망간다는 것 때문이었다. 그들은 왜 샤워기 등을 분해해놓고 도망쳐야 했을까. 그 이유는 일단 최신 시설이 너무나 탐이 났기 때문이다. 그래서 본인들도 그런 기술을 파악하여 제작해 보려는 의도로 자행한 일이라고 한다. 그렇게 기술을 파악하기 위해서는 설계도가 필요하겠지만, 그것이 없는 상태에서 완성화된 제품만 있으니 분해를 해서 구조를 파악해볼 수밖에 없다. 이것은 역공학(Reverse Engineering)이라 비유할 수 있는 작업이다. 설계도는 소스에 해당하며, 완성화된 제품은 릴리즈 버전의 바이너리라 생각할 수 있다.
이처럼 역공학 기술은 단지 코드 리버싱에만 국한되는 작업이 아니다. 또 하나의 예가 있다. 음악 부분에서도 비슷한 역공학 기술이 존재한다. 우리가 즐겨 듣는 음악, 록 음악이든 대중음악이든 유명하고 좋은 음악들은 반드시 그 악보가 어디선가 등장하기 마련이다. 이 악보는 어떻게 제작되는 것일까, 물론 작곡가가 직접 악보를 공개하는 경우도 있으나 상당히 많은 경우는 음악의 역공학에 능한 기술자들이 귀로 듣고 따낸 것이다. “여기서는 D – F - C# 등의 프레이즈가 들어가는군”, “드럼은 8비트에서 스네어 몇번” 하는 식으로 피아노나 기타 하나만을 달랑 들고 그 음악을 귀로 들으며 악보로 고스란히 옮겨 내는 작업 역시 리버스 엔지니어링에 비유할 수 있다. 이들에겐 멜로디를 콩나물로 포팅할 수 있는 훌륭한 귀와, 작업에 필요한 한두개의 악기가 일종의 디버거나 디스어셈블러인 셈이다. 바이너리에 녹아들어있는 독특한 아이디어를 참고하기 위해 해당 프로그램의 리버스 엔지니어링 작업을 하듯이, 음악 분야에도 타 아티스트가 만들어낸 아름다운 선율을 활용하기 위해 역공학 기술이 사용된다.
역공학 기술은 음식 문화에서도 살펴볼 수 있다. 어떤 미식가들은 마음에 쏙 드는 맛집을 발견하였을 때, 음식을 코와 혀로 느끼고 재료의 구성 상태를 캐취해내며 집으로 돌아와 본인의 부엌에서 그 음식과 비슷한 수준으로 요리해내기도(구현해 내기도) 한다. 이 역시 요리 과정이 기록된 문서 없이 단지 완성된 제품만을 가지고 거꾸로 역추적해 들어가 음식의 제작 과정을 파악하는 것이다. 이들의 경우도 훌륭한 역공학 기술이라고 말할 수 있다.
이처럼 리버스 엔지니어링은 단지 코드 역공학 뿐만이 아닌 많은 분야에 존재한다. 접근 소재나 방법론은 다를지 몰라도 거꾸로 추적해 나간다는 점에서 그 공통점은 분명하다. 그리고 원본 소재에 가깝게 다다른다는 그 목표도 일치한다. 공통분모가 단지 그것 뿐일까? 역공학에 있어서 가장 중요한 것이며 모든 역공학 분야의 공통되는 사항이 있다. 그것은 바로 “정공학에 대한 능통함” 이다. 역공학에 능한 사람들은 그 분야에 대해 모두 “장인”의 경지에 오른 사람들이다. 따라서 본인이 정공학에 능하기 때문에 그 지식을 바탕으로 역공학을 구사할 수 있는 것이다. 만약 정공학에 능하지 않은 사람이 역공학을 한다면 어떨까? 그 결과는 매우 보잘 것 없을 것이다. 게임 프로그래밍을 해본 적이 없는 사람이 렌더링 루틴이나 소켓 처리부를 리버스 엔지니어링 해 보았자 얻을 수 있는 것은 거의 없다. 또 화음이나 스케일에 대해 아무것도 모르는 사람이 음악을 듣고 귀로 따려 해봤자 음표 몇 개 그릴 수 없을 것이며, 요리도 제대로 하지 못하는 사람이 음식을 먹으며 재료를 분석하는 작업 역시 불가능에 가깝다.
다시 말해서, 역공학에 능하기 위해서는 반드시 “정공학”부터 능숙해야 할 필요가 있다. 이것은 어떤 분야의 역공학이든 마찬가지이며 가장 중요한 공통점이다. 그러나 실제로는 그렇지 않은 경우가 많다. 메인 분야도 잘 모르면서 역공학부터 파려 하는 사람들이 상당히 많은 편이다. 특히 이것은 코드 분야에서의 역공학 쪽이 더욱 심하다. 코딩은 거의 하지 못하는 사람들이 시리얼 크래킹이나 P2P 다운로드 프로그램의 속도 패치에만 열을 올리는 모습을 보면 이러한 아쉬움이 더욱 더 크게 느껴진다. 진정한 역공학의 의미와 기본 태도가 무엇인지 아는 자세가 필요한 것이 아닐까. 밥이 먼저인지 반찬이 먼저인지 파악하지 못하고 있는 모습을 보면 안타까울 뿐이다.
필자와 같이 일하는 한 팀원은 메인 업무가 개발이 아닌 리버스 엔지니어링이지만 항상 코딩 연구를 게을리하지 않고 있다. 역공학에 능하기 위해서는 정공학부터 빠지지 않아야 한다는 자세 때문이다. 이런 자세가 진정한 본모습이라고 생각한다. 그것이 아닌 경우는 자기 자신을 한번 뒤돌아볼 필요가 있다. 단지 역공학으로 무언가를 적출해내는 모습이 멋져 보이는가? 폼생폼사를 따지기보다는 본인의 기본 자질부터 갖춰야 할 필요가 있다고 본다. 역공학에 능하기 위해서는 정공학에 대한 이해부터 선행되어야 한다. 역공학과 정공학은 닭이 먼저냐 달걀이 먼저냐 하는 의미 모호한 토론과는 전혀 다르다. 역공학에 관심 가지는 것에는 좋다. 하지만 역공학에 막연한 환상을 갖고 접근하기 보다는 역공학이 무엇인지 그 기본부터 아는 자세가 필요하다고 본다.
