리버스 엔지니어링

(역설계에서 넘어옴)

1 개요

Reverse Engineering
역설계(逆設計)/역공학(逆工學)

특정한 기능을 내는 기계, 혹은 프로그램라이브러리를 만들어보고 싶은데 내부 구조를 알 수 없을 때, 뜯어서 아무튼 동일한 기능을 하도록 새로운 것을 만들어 내는 것이다. 인류역사상 전쟁과 수반된 기술발전 중에는 적국에게서 노획한 (혹은 동맹국에게서 공여받은) 발전된 전쟁병기를 역설계 해서 자국의 신무기로 응용하는 식의 리버스 엔지니어링 역시 심심찮게 있었다. 또한 현대에는 개발도상국들이 산업화를 위해 주로 사용하는 방식이다. 7-80년대의 한국이나 90년대 이후의 중국이 그 예다. 이미 실전에 쓰이며 검증되고 있는 물건을 토대로 개발하는것이기 때문에 무에서부터 시작하는것보다는 비교도 할수 없을 정도로 나은 방식이다. 현대 전쟁병기도 예외가 아니며, 이 분야에서는 중국이 잘 알려져 있다 . 2000년대 초반까지 중국의 모든 무기체계는 소련제를 카피한 것이다. 물론 초반제품은 정식라이센스였으나, 중소결렬 이후는 모두 지적재산권을 무시한 것인데, 애당초 소련은 사회주의국가였기 때문에 지적재산권에는 무지했다. [1]

중국이 유명하지만, 군사분야를 보면 선진국 대부분이 처음에 무기를 개발할 때는 상대방이나 우방의 국가의 무기를 베끼면서 시작했다. 그러니까 자신이 부족하다 싶은 분야는 무조건 베꼈다. 예를 들어 나치독일의 V2같은 경우는 소련 뿐만 아니라 미국, 영국, 중국 [2]이 모두 베끼면서 이를 기반으로 탄도미사일 개발을 축적해 온 예가 있으며, 비교적 기술이 앞서있던 나치 독일도 남이 앞선 분야는 베끼는데 거리낌이 없어서, 소련의 카츄샤 로켓을 베껴서 자신들의 지상로켓병기를 만들었고, 바주카를 베껴서 판처슈렉을 만들었다. 당연히 한국도 여기서 자유롭지 않다. [3] 안하는게 바보

단, 리버스 엔지니어링도 무작정 제품을 입수해 뜯어본다고 해서 만사OK인것이 아니라 해당 제품에 대해 어느정도는 그 기술에 대한 이해가 있어야 하며, 나아가 리버스 엔지니어링을 시행하고자 하는측의 기술이 충분히 받쳐줘야만 한다. 소말리아 같은 나라에 F-22 한대 던져준다고 해서 갑자기 F-22 복제품이 튀어나올수는 없다는 말. 가공전기대체역사물에서 미래에서 가져온 무기보고 베껴서 뚝딱 양산하는 것은 거의 판타지적인 상황인 것이다.

소말리아와 F-22 같은 극단적 예를 들 것도 없이, 2차대전때 일본군은, 할힌골 전투 당시의 참패한 전선에서 긁어모은 소련 전차들에 대한 단편적인 부품들과, 동남아전선에서 숱한 충격과 공포을 불러온 연합군의 M4 셔먼 전차를 노획하여 어찌어찌 본국으로 보냈다. 정작 적국의 병기를 받아본 제국 전차 조병창 기술자들은 복제는 커녕 기술력의 향상도 이루지 못했고, 그들이 할 수 있었던 것은 연합군, 특히 미군의 놀라운 기술력에 경악하는 것 뿐이었다. 그 악명높은 97식 전차의 개량을 위해 지속적인 기술적 보완과 개량이 있었지만, 종전때까지 그들이 만들어낸 기기괴괴한 고철덩어리들은 훌륭한 표적이자 관짝이 되었다.

2 불법인가?

대한민국 법률에서는 컴퓨터 프로그램의 리버스 엔지니어링에 대해 다음과 같이 규정하고 있다.

제101조의4(프로그램코드역분석)

① 정당한 권한에 의하여 프로그램을 이용하는 자 또는 그의 허락을 받은 자는 호환에 필요한 정보를 쉽게 얻을 수 없고 그 획득이 불가피한 경우에는 해당 프로그램의 호환에 필요한 부분에 한하여 프로그램의 저작재산권자의 허락을 받지 아니하고 프로그램코드역분석을 할 수 있다.

② 제1항에 따른 프로그램코드역분석을 통하여 얻은 정보는 다음 각 호의 어느 하나에 해당하는 경우에는 이를 이용할 수 없다.

1. 호환 목적 외의 다른 목적을 위하여 이용하거나 제3자에게 제공하는 경우

2. 프로그램코드역분석의 대상이 되는 프로그램과 표현이 실질적으로 유사한 프로그램을 개발ㆍ제작ㆍ판매하거나 그 밖에 프로그램의 저작권을 침해하는 행위에 이용하는 경우

[본조신설 2009.4.22]

(출처 : 저작권법 일부개정 2013.12.30 [법률 제12137호, 시행 2014.07.01] 문화체육관광부 > 종합법률정보 법령)

위 조문을 보면 알 수 있듯이, 대한민국에서는 리버스 엔지니어링의 상업적 이용에 대해 엄격하게 금지하고 있으나, 비상업적 범위 내에서는 일정 부분 허용되고 있음을 알 수 있다.

몇몇 비디오 게임에서는 불법복제 등의 목적으로 프로그램 내부를 변경하려고 하면 프로그래밍 된 경고메세지로 "님은 리버스 엔지니어링 하려고 하고 있음" 운운하는 경우도 간혹 있다.

3 방법

컴퓨터 프로그램의 리버스 엔지니어링에 사용되는 도구에는 ollydbg, IDA 등이 있다. 각종 디컴파일러를 사용해서 실행 바이너리로부터 소스를 역추출하기도 한다. 마인크래프트의 모드 로더들은 마인크래프트의 자바 실행 바이너리를 리버싱해서 만들어졌다. Java는 디컴파일시 거의 소스 코드 그대로 나오기 때문에 리버싱이 쉬운 편.자바 디컴은 그냥 소스가 몇몇 깨져나올 뿐이라서 자신이 어느정도 실력이 있다면 리버싱이 아니라도 복구가 가능할것이다. 각종 스크립트 언어는 소스 코드가 곧 실행 프로그램이 되는 특징 때문에 리버싱을 할 필요가 별로 없다. 굳이 있다면 난독화시킨 소스 코드를 재포맷하는 정도.

하드웨어 리버스 엔지니어링은 제품을 부품 단위로 분해해 각 부품의 제조사 홈페이지를 찾아가 데이터시트를 찾아보는 방법으로 리버싱한다. 만약 분석하고자 하는 부품이 따로 판매되는 물건이 아닌 경우, 엑스레이나 초음파 등 각종 비파괴검사 도구를 사용해서 내부를 분석한 후 해당 부품을 분해(파괴)해서 내부 구조를 알아낸다. 때문에 리버싱을 방해하기 위한 각종 트릭들이 고안돼 있다. 예를 들어 회로기판을 접착제로 케이스에 붙여버려 케이스 분해 시 기판 일부가 뜯겨나가 고장나게 만들거나 엑스레이가 투과하지 못하는 레진을 회로의 중요한 부분에 부어 굳혀서 레진 제거시 부품도 같이 파괴되게 만드는 등이다. 물론 이런 방법으로 악착같이 기술을 숨겨도 뜯을 놈은 다 뜯어보기 때문에 리버싱을 기술적으로 막을 방법은 사실상 없다고 봐야 한다.

3.1 클린룸 리버스 엔지니어링

Clean-room Reverse Engineering

제품을 리버스 엔지니어링하여 저작권이나 기업 비밀에 관한 부분을 회피하면서 그 제품의 디자인을 모방하는 방법. 클린룸 설계(Clean room design) 또는 차이니스 월 테크닉(Chinese wall technique)이라고도 한다. 한국 서적 등에서는 '청정실 기법'이라고 번역되기도 한다.
"클린룸"이라는 말은 업계의 독자적 기술에 관한 지식으로부터 영향을 전혀 받지 않는 환경에서 작업한다는 데서 나온 표현이다. 좀 더 자세하게 이야기하면, 리버스 엔지니어링 팀과 재설계 팀을 전적으로 격리한 상태에서 계획을 진행한다는 것으로, 리버스 엔지니어링을 통해 정보를 얻어서 진행하지만 결과물 자체는 다른 기술을 구현하는 것이다. 이것은 리버스 엔지니어링의 대상이 되는 기술과 완전히 똑같지 않은 이상 독립적인 개발로 간주되므로 저작권이나 기업 비밀 저촉으로부터 자유롭게 된다. 하지만 특허 회피는 어려운 것이 함정. 하지만 이것도 나름 남는 장사인게, 특허를 침해받는 회사가 고소한다고 쳐도 왠만하면 카피를 한 회사의 국가에서 심리를 여는데. 아무리 사법부는 공정함을 요구한다지만 현실은 자국 법인에게 시간을 끌어줘서 판결이 나올때면 이미 해당 제품은 구식으로 단물이 다 빠진 상태이고, 판결도 자국 법인에게 관대한 판결이 나온다. 7~80년대 일본, 한국, 홍콩, 대만, 싱가포르가 이런식으로 기술력을 쌓아올렸으며, 지금도 중국이 악명을 떨치고 있다.
클린룸 설계는 보통 아래의 3단계를 거친다.

  1. 모방할 제품을 분석하여 사양서를 작성한다.
  2. 이 사양서의 저작권 등 침해 여부에 대한 법률 자문을 받는다. 이때 침해가 확인되면 저작권 문제를 회피하는 방향으로 사양서를 수정한다.
  3. 분석팀과 연계점이 없는 제작팀에서 사양서대로 제품을 제조한다.

3.1.1 실제 사례

  • 컴팩이 IBM 호환 PC를 만들 때 이 방식으로 컴팩 포터블(Compaq Portable)을 만들어냈다.
  • AMD가 486을 카피할 때 이 방식을 응용했다.

4 방어법

하드웨어의 경우에는 제품의 제조비법을 숨겨서 리버싱을 방지하는 방법이 있다. 예를 들어 특수 합금강 같은 경우, 합금의 조합 비율은 질량분석기 등으로 알아낼 수 있지만 그 합금을 제조하는 방법은 리버싱으로는 알아낼 수 없다. 또한 복잡한 형상을 가진 부품의 경우 그것을 어떻게 주조했는지, 또는 깎아냈는지는 리버싱으로 알아낼 수 없는 정보이다.

CPU등 미세전자회로의 경우에는 리버싱하는 노력이 칩을 처음부터 설계해서 제조하는 노력을 상회하기 때문에 경제적인 이유로 리버싱이 방지된다. 물론 칩의 기능을 리버싱하는 것은 가능하지만 요즘엔 이런 기능 같은 건 아예 공개해버리기 때문에 리버싱을 할 필요가 없다.

소프트웨어의 경우에는 암호화난독화 기술로 리버싱을 방해한다. 실행 바이너리에 더미 데이터를 집어넣어 분석을 어렵게 만들고, 같은 기능을 하는 여러 함수를 일부러 중복 작성하거나 변수나 함수명을 읽기 힘들게 바꾸는 식으로 분석 난이도를 높이는 방법도 있다.[4] 그러나 모든 경우에도 분석을 어렵게 만들 뿐 불가능하게 만들진 못한다. 제아무리 비대칭키 암호를 도입해서 코드를 암호화한다고 해도 그게 CPU로 로드될 시점에는 반드시 기계어로 번역돼야 하기 때문에 기계어 코드를 직접 메모리에서 덤프떠서 리버싱하면 그만이기 때문이다.

그래서 요즘에는 중요한 코드를 서버에 두고, 소비자에게는 API만을 노출시켜 사용하게 하는 방법으로 리버싱을 방어하고 있다. 서버에 중요 로직을 보관하고 API만 오픈한 경우에는 해킹 말고는 코드를 리버싱할 방법이 없다. 단점은 사용자가 항상 온라인 상태여야 한다는 것, 사용자가 늘어나면 서버 부하가 커진다는 등이다. 그래서 온라인상태를 기대할 수 없는 애플리케이션은 여전히 암호화 기술을 사용한다.

5 가상의 매체에서의 리버스 엔지니어링

  • 페이첵 - 주인공 마이클 제닝스의 직업이 리버스 엔지니어다.


영화 페이첵 의 리버스 엔지니어링 장면
  • 터미네이터 2: 심판의 날 - 해당 시간선에서 스카이넷마일스 다이슨이 과거로 건너온 T-800의 CPU를 리버스 엔지니어링으로 재현하여 만들어졌다. 개발 총괄을 맡은 본인은 자신의 업무가 리버스 엔지니어링임을 일찌감치 인지하고 있었지만, 원본을 어디서 얻었는지는 알지 못했다.그렇다
  • TIS-100 - 주인공의 삼촌이 TIS-100이라고 하는 의문의 기계장치를 만들던 도중 갑작스레 죽음을 맞게되어, 그것을 받게 된 주인공이 이 장치를 역공학을 통해 수리하여 어떠한 비밀이 감추어져 있는지 알아내는 것이 게임의 목표이다.[5]
  • ∀건담 - 근대 수준인 지구 인류가 모빌슈트를 발굴한 후 리버스 엔지니어링해서 모빌슈트 양산을 시도한다.[6] 중반 이후 배경이 우주로 넘어가기 때문에 성공했는지는 극중 상황으론 알 수가 없다.
  • Warhammer 40,000 - 인류제국의 기술은 대부분 STC로부터 비롯된 기술을 리버스 엔지니어링으로 복원한 것이다. 복원의 주체인 기계교는 리버스 엔지니어링만을 정당한 기술 개발 방식으로 인정하고 있고, 독자 연구는 많은 경우 이단으로 간주한다.

6 관련 문서

  • 게임 해킹 프로그램 - 가장 쉬운 예로 이것도 리버스 엔지니어링을 통하여 게임의 코드를 조작하는 것을 쉽게 도와주기 때문이다.
  • 무한경비대 [7]
  • 세운상가 - 이름없는 공돌이들이 일본의 오락실 게임 기판을 리버스엔지니어링 후 복제한 이야기
  • 에뮬레이터
  • 외계인 고문
  • IBM PC 호환기종
  • Reversing.kr
  • VGA
  • 반디집 - 알집의 전용 압축 포맷인 ALZ, EGG를 리버스 엔지니어링 방식으로 모듈을 개발하여, 압축 해제를 구현하였다.
  • 새턴 로켓 F-1 엔진 - 시대 상황에 따라 워낙 급하게 개발이 진행된 탓에 관련 자료 정리가 규모에 비해 매우 부실하였고 아폴로 프로그램이 중단되고 해당 개발자들이 은퇴한 뒤 졸지에 로스트 테크놀러지가 되었다. 결국 F-1 엔진이 만들어질 적엔 태어나지도 않았던 NASA의 젊은 엔지니어들은 SLS 부스터 개발 과정에서 현대 과학의 이기를 총동원하여 박물관에 잠들어있던 반세기 전의 오파츠를 해부하고 스캔하며 되살려냈다. 5천여개에 달하는 부품의 파트 수를 수십개 단위로 줄인 것은 덤.
  1. 애초에 중국은 처음 현대무기를 개발할때부터 타국의 무기를 적극적으로 리버스 엔지니어링해서 자국의 기술적 열세를 상쇄한다는 계획을 가지고 있었을 정도로 '베낀다'는 행위 자체에 거리낌이 없었다.(정확히는 목숨을 걸었다가 더 맞겠지만...) 총 3단계로 이루어진 구체적인 비전까지 가지고 있었는데, 1단계-타국의 무기를 그대로 복제하고, 2단계-그 복제품을 개량시켜 성능을 개선시키며, 3단계-그 과정에서 축적한 기술을 바탕으로 독자개발에 나서는것이다. 물론 이들의 주요 기술공급원인 우크라이나와 유럽에서 돈주고 기술을 도입하고 해킹으로 열심히 빼내가지 않았으면 지금보다 훨씬 정도가 늦었다.
  2. 소련제 R1이 바로 V2의 카피였다
  3. 미국의 군사당국은 한국측이 자국제 미사일의 봉인을 무시하고 부품을 뜯어본다고 불만을 표하고 있다.
  4. 이 작업은 보통 컴파일 직전에 특정 도구를 사용해서 수행한다.
  5. 다만 역공학으로 보기 애매한 점이 있다면, 이 장치를 수리하는 방식이 세그먼트별로 정해진 동작들을 완수할 수 있게끔 하는 어셈블리어 프로그래밍을 하여 주어진 퍼즐을 해결하는 것이다.
  6. 무려 턴에이를 리버스 엔지니어링해서 양산할 계획도 있었다.
  7. 홈라인의 과학발전 관련, from 겁스 무한세계.