리버스 엔지니어링 (r20180326판)

문서 조회수 확인중...

1. 개요
2. 불법인가?
3. 방법
3.1. 클린룸 리버스 엔지니어링
3.1.1. 실제 사례
4. 방어법
5. 가상의 매체에서의 리버스 엔지니어링
6. 관련 문서


1. 개요


Reverse Engineering
역설계(逆設計)/역공학(逆工學)
특정한 기능을 내는 기계, 혹은 프로그램라이브러리를 만들어보고 싶은데 내부 구조를 알 수 없을 때, 뜯어서 아무튼 동일한 기능을 하도록 새로운 것을 만들어 내는 것이다. 인류역사상 전쟁과 수반된 기술발전 중에는 적국에게서 노획한 (혹은 동맹국에게서 공여받은) 발전된 전쟁병기를 역설계 해서 자국의 신무기로 응용하는 식의 리버스 엔지니어링 역시 심심찮게 있었다. 또한 현대에는 개발도상국들이 산업화를 위해 주로 사용하는 방식이다. 7-80년대의 한국이나 90년대 이후의 중국이 그 예다. 이미 실전에 쓰이며 검증되고 있는 물건을 토대로 개발하는 것이기 때문에 무에서부터 시작하는 것과는 비교도 할 수 없을 정도로 나은 방식이다. 현대 전쟁병기도 예외가 아니며, 이 분야에서는 중국이 잘 알려져 있다. 2000년대 초반까지 중국의 모든 무기체계는 소련제를 카피한 것이다. 물론 초반제품은 정식라이선스였으나, 중소결렬 이후는 모두 지적재산권을 무시한 것인데, 애당초 소련은 사회주의국가였기 때문에 지적재산권에는 무지했다.[1]
중국이 유명하지만, 군사분야를 보면 선진국 대부분이 처음에 무기를 개발할 때는 상대방이나 우방의 국가의 무기를 베끼면서 시작했다. 그러니까 자신이 부족하다 싶은 분야는 무조건 베꼈다. 예를 들어 나치독일의 V2같은 경우는 미국의 고다드가 만든 로켓을 베껴서 개발된 물건이고[2] 나중에 소련 뿐만 아니라 미국, 영국, 중국 [3]이 모두 이를 기반으로 탄도미사일 개발을 축적해 온 예가 있으며, 나치 독일도 남이 앞선 분야는 베끼는데 거리낌이 없어서, 소련의 카츄샤 로켓을 베껴서 자신들의 지상로켓병기를 만들었고, 바주카를 베껴서 판처슈렉을 만들었다. 소련은 같은 동맹국인 미국의 B-29를 베껴[4] Tu-4를 만들어냈다. 당연히 한국도 여기서 자유롭지 않다. [5] 안하는게 바보
단, 리버스 엔지니어링도 무작정 제품을 입수해 뜯어본다고 해서 만사OK인것이 아니라 해당 제품에 대해 어느정도는 그 기술에 대한 이해가 있어야 하며, 나아가 리버스 엔지니어링을 시행하고자 하는측의 기술이 충분히 받쳐줘야만 한다. 소말리아 같은 나라에 F-22 한대 던져준다고 해서 갑자기 F-22 복제품이 튀어나올수는 없다는 말. 가공전기대체역사물에서 미래에서 가져온 무기보고 베껴서 뚝딱 양산하는 것은 거의 판타지적인 상황인 것이다.
소말리아와 F-22 같은 극단적 예를 들 것도 없이, 2차대전때 일본군은, 할힌골 전투 당시의 참패한 전선에서 긁어모은 소련 전차들에 대한 단편적인 부품들과, 동남아전선에서 숱한 충격과 공포을 불러온 연합군의 M4 셔먼 전차를 노획하여 어찌어찌 본국으로 보냈다. 정작 적국의 병기를 받아본 제국 전차 조병창 기술자들은 복제는 커녕 기술력의 향상도 이루지 못했고, 그들이 할 수 있었던 것은 연합군, 특히 미군의 놀라운 기술력에 경악하는 것 뿐이었다. 그 악명높은 97식 전차의 개량을 위해 지속적인 기술적 보완과 개량이 있었지만, 종전때까지 그들이 만들어낸 기기괴괴한 고철덩어리들은 훌륭한 표적이자 관짝이 되었다.[6] 게다가 미군의 M1 개런드 소총을 노획해 그대로 복제하려 했지만 기술력이 딸려서 원본에 비해 훨씬 후진 물건인 4식 자동소총이라는 결과물이 나오기도 했다.
또한 베끼는 원작이 신통찮을 경우 더 망한 결과물이 나오기도 한다. 대표적인 예가 일본의 4발폭격기 G5N 신잔인데 미국 더글러스사의 DC-4E[7]여객기(!)[8]를 베껴 만들었으나, 결함투성이였던 원본을 열등한 기술로 복제한 것이라 더한 문제를 가지게 되었고 일본군조차 폭격기로서 대량생산을 포기하고 몇 대 못만든 기존 생산기도 모두 수송기로 사용한 망작이 되었다.
열악한 환경의 후진국이 기어이 복제에 성공해 개발국을 경악시키는 경우도 없진 않은데, 한국의 시발택시는 미국제 엔진부품들을 전통적인 대장간 거푸집 주조(...)로 복제했다고 한다. 집집마다 불법총기공장이 있다는 분쟁지역들의 경우엔 톱과 줄 따위로 겉보기에 그럴싸한 총기류를 만들기도 한다. 다만 이런 케이스는 거의 예외없이 내구도, 정밀도, 신뢰도에 정말 심각한 문제를 가진다.

2. 불법인가?


대한민국 법률에서는 컴퓨터 프로그램의 리버스 엔지니어링에 대해 다음과 같이 규정하고 있다.
저작권법
제2조(정의) 이 법에서 사용하는 용어의 뜻은 다음과 같다.
34. "프로그램코드역분석"은 독립적으로 창작된 컴퓨터프로그램저작물과 다른 컴퓨터프로그램과의 호환에 필요한 정보를 얻기 위하여 컴퓨터프로그램저작물코드를 복제 또는 변환하는 것을 말한다.
제101조의4(프로그램코드역분석) ① 정당한 권한에 의하여 프로그램을 이용하는 자 또는 그의 허락을 받은 자는 호환에 필요한 정보를 쉽게 얻을 수 없고 그 획득이 불가피한 경우에는 해당 프로그램의 호환에 필요한 부분에 한하여 프로그램의 저작재산권자의 허락을 받지 아니하고 프로그램코드역분석을 할 수 있다.
② 제1항에 따른 프로그램코드역분석을 통하여 얻은 정보는 다음 각 호의 어느 하나에 해당하는 경우에는 이를 이용할 수 없다.
1. 호환 목적 외의 다른 목적을 위하여 이용하거나 제3자에게 제공하는 경우
2. 프로그램코드역분석의 대상이 되는 프로그램과 표현이 실질적으로 유사한 프로그램을 개발·제작·판매하거나 그 밖에 프로그램의 저작권을 침해하는 행위에 이용하는 경우
제104조의2(기술적 보호조치의 무력화 금지) ① 누구든지 정당한 권한 없이 고의 또는 과실로 제2조제28호가목의 기술적 보호조치를 제거·변경하거나 우회하는 등의 방법으로 무력화하여서는 아니 된다. 다만, 다음 각 호의 어느 하나에 해당하는 경우에는 그러하지 아니하다.
6. 정당한 권한을 가지고 프로그램을 사용하는 자가 다른 프로그램과의 호환을 위하여 필요한 범위에서 프로그램코드역분석을 하는 경우
위 조문을 보면 알 수 있듯이, 대한민국에서는 리버스 엔지니어링의 상업적 이용에 대해 엄격하게 금지하고 있으나, 비상업적 범위 내에서는 일정 부분 허용되고 있음을 알 수 있다.
몇몇 비디오 게임에서는 불법복제 등의 목적으로 프로그램 내부를 변경하려고 하면 프로그래밍 된 경고메세지로 "님은 리버스 엔지니어링 하려고 하고 있음" 운운하는 경우도 간혹 있다.

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을 카피할 때 이 방식을 응용했다.
  • 윈도우 보안 패치나 인터넷에 돌아다니는 바이러스 확인방법도 리버싱의 산물이다. 예로 워너크라이 랜섬웨어가 전파되었을 때 파일 공유 설정을 해제하게 시킨 것도 랜섬웨어의 작동 방식을 분석했기 때문이다.
  • DOC은 사실상 표준 문서 포맷이었지만 구조가 비공개되어 오랜 기간 마이크로소프트가 사실상 독점하고 있었다. 그러나 썬 마이크로시스템즈오픈오피스 재단이 리버스 엔지니어링을 시행하였고, 이후 포맷 구조를 공개했다.
  • 인텔이 RDRAM으로 거하게 삽질하고 있을때VIA는 DDR SDRAM으로 재미를 톡톡히본후 욕심이 과한탓에 인텔의 칩셋을 리버스 엔지니어링한 P4X266 칩셋을 출시했고 대호평을 받았지만 정작잠자던인텔의 심기를 건드린탓에 소송크리를 먹고 이후 몰락하기 시작했다.

4. 방어법


하드웨어의 경우에는 제품의 제조비법을 숨겨서 리버싱을 방지하는 방법이 있다. 예를 들어 특수 합금강 같은 경우, 합금의 조합 비율은 질량분석기 등으로 알아낼 수 있지만 그 합금을 제조하는 방법은 리버싱으로는 알아낼 수 없다. 또한 복잡한 형상을 가진 부품의 경우 그것을 어떻게 주조했는지, 또는 깎아냈는지는 리버싱으로 알아낼 수 없는 정보이다.
CPU등 미세전자회로의 경우에는 리버싱하는 노력이 칩을 처음부터 설계해서 제조하는 노력을 상회하기 때문에 경제적인 이유로 리버싱이 방지된다. 물론 칩의 기능을 리버싱하는 것은 가능하지만 요즘엔 이런 기능 같은 건 아예 공개해버리기 때문에 리버싱을 할 필요가 없다.
소프트웨어의 경우에는 암호화난독화 기술로 리버싱을 방해한다. 실행 바이너리에 더미 데이터를 집어넣어 분석을 어렵게 만들고, 같은 기능을 하는 여러 함수를 일부러 중복 작성하거나 변수나 함수명을 읽기 힘들게 바꾸는 식으로 분석 난이도를 높이는 방법도 있다.[9] 그러나 모든 경우에도 분석을 어렵게 만들 뿐 불가능하게 만들진 못한다. 제아무리 비대칭키 암호를 도입해서 코드를 암호화한다고 해도 그게 CPU로 로드될 시점에는 반드시 기계어로 번역돼야 하기 때문에 기계어 코드를 직접 메모리에서 덤프떠서 리버싱하면 그만이기 때문이다.
그래서 요즘에는 중요한 코드를 서버에 두고, 소비자에게는 API만을 노출시켜 사용하게 하는 방법으로 리버싱을 방어하고 있다. 서버에 중요 로직을 보관하고 API만 오픈한 경우에는 해킹 말고는 코드를 리버싱할 방법이 없다. 단점은 사용자가 항상 온라인 상태여야 한다는 것, 사용자가 늘어나면 서버 부하가 커진다는 등이다. 그래서 온라인상태를 기대할 수 없는 애플리케이션은 여전히 암호화 기술을 사용한다.

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


  • 페이첵 - 주인공 마이클 제닝스의 직업이 리버스 엔지니어다.[10]
{{{#!html
<iframe width="420" height="315" src="https://www.youtube.com/embed/J4op-K_4s6o" frameborder="0" allowfullscreen></iframe>
}}}
영화 페이첵 의 리버스 엔지니어링 장면
  • 터미네이터 2: 심판의 날 - 해당 시간선에서 스카이넷마일스 다이슨이 과거로 건너온 T-800의 CPU를 리버스 엔지니어링으로 재현하여 만들어졌다. 개발 총괄을 맡은 본인은 자신의 업무가 리버스 엔지니어링임을 일찌감치 인지하고 있었지만, 원본을 어디서 얻었는지는 알지 못했다.
  • TIS-100 - 주인공의 삼촌이 TIS-100이라고 하는 의문의 기계장치를 만들던 도중 갑작스레 죽음을 맞게되어, 그것을 받게 된 주인공이 이 장치를 역공학을 통해 수리하여 어떠한 비밀이 감추어져 있는지 알아내는 것이 게임의 목표이다.[11]
  • ∀건담 - 근대 수준인 지구 인류가 모빌슈트를 발굴한 후 리버스 엔지니어링해서 모빌슈트 양산을 시도한다.[12] 중반 이후 배경이 우주로 넘어가기 때문에 성공했는지는 극중 상황으론 알 수가 없다.
  • 스타크래프트 2: 공허의 유산에 등장하는 아둔의 창에서 함선에 존재하는 기술이 아닌 추적자를 곧바로 양산할 수 있는 이유가 함선 자체적으로 역설계 기능을 '복제'에 준하는 능력으로 가지고 있기 때문이다. 또한 탈다림의 병기는 댈람 프로토스의 병기를 노획하거나 나포한 후 리버스 엔지니어링을 한 뒤 자신들만의 파괴적인 취향과 기술을 적용시킨 것이다.
  • Warhammer 40,000 - 인류제국이 보유하고 있는 기술의 대부분은 남아있는 STC의 일부에서 직접 유래했거나 STC로부터 비롯된 기술을 리버스 엔지니어링으로 복원한 것이다. 이러한 기술복원의 주체인 기계교는 STC를 기반으로 한 리버스 엔지니어링만을 정당한 기술 개발 방식으로 인정하고 있고, 독자적인 연구는 많은 경우 이단으로 간주한다.
  • 스텔라리스 - 전투에서 승리하여 적대적 함선을 파괴하면 잔해가 생기고 이를 과학선으로 조사할 경우 해당 함선에 사용된 기술의 역설계가 가능하다. 플레이어가 기술상 우위더라도 기술 발전 방향이 다르다면 얻을 것이 있고 기술이 뒤쳐지지만 물량으로 밀어붙이는 경우 기술 발전 셔틀이 되며 역설계로만 얻을 수 있는 기술도 있다.
  • 전자오락수호대모드 - 상대의 힘이나 능력을 흡수하면서 상대를 죽여버리는 능력을 가지고 있으며 사스콰치의 괴력, 프라이드의 신성, 격투가들의 능력, GM의 화투패 스킬도 설치한다. GM이 금지된 힘이라고 하는데 리버스 엔지니어링이 불법성을 띄고 있기 때문.

6. 관련 문서


  • 게임 해킹 프로그램 - 가장 쉬운 예로 이것도 리버스 엔지니어링을 통하여 게임의 코드를 조작하는 것을 쉽게 도와주기 때문이다.
  • 무한경비대 [13]
  • 세운상가 - 이름없는 공돌이들이 일본의 오락실 게임 기판을 리버스엔지니어링 후 복제한 이야기
  • 에뮬레이터
  • 예쁜꼬마선충 - 생물의 신경계를 역설계한 최초사례
  • 외계인 고문
  • IBM PC 호환기종
  • Reversing.kr
  • VGA
  • 반디집 - 알집의 전용 압축 포맷인 ALZ, EGG를 리버스 엔지니어링 방식으로 모듈을 개발하여, 압축 해제를 구현하였다.
  • 새턴 로켓 F-1 엔진 - 시대 상황에 따라 워낙 급하게 개발이 진행된 탓에 관련 자료 정리가 규모에 비해 매우 부실하였고 아폴로 프로그램이 중단되고 해당 개발자들이 은퇴한 뒤 졸지에 로스트 테크놀러지가 되었다. 결국 F-1 엔진이 만들어질 적엔 태어나지도 않았던 NASA의 젊은 엔지니어들은 SLS 부스터 개발 과정에서 현대 과학의 이기를 총동원하여 박물관에 잠들어있던 반세기 전의 오파츠를 해부하고 스캔하며 되살려냈다. 5천여개에 달하는 부품의 파트 수를 수십개 단위로 줄인 것은 덤.
  • 4식 자동소총

[1] 애초에 중국은 처음 현대무기를 개발할때부터 타국의 무기를 적극적으로 리버스 엔지니어링해서 자국의 기술적 열세를 상쇄한다는 계획을 가지고 있었을 정도로 '베낀다'는 행위 자체에 거리낌이 없었다.(정확히는 목숨을 걸었다가 더 맞겠지만...) 총 3단계로 이루어진 구체적인 비전까지 가지고 있었는데, 1단계-타국의 무기를 그대로 복제하고, 2단계-그 복제품을 개량시켜 성능을 개선시키며, 3단계-그 과정에서 축적한 기술을 바탕으로 독자개발에 나서는 것이었다. 물론 이들의 주요 기술공급원인 우크라이나와 유럽에서 돈주고 기술을 도입하고 해킹으로 열심히 빼내가지 않았으면 지금보다 훨씬 정도가 늦었다.[2] 고다드는 노획된 V2를 면밀하게 분석한 다음 독일이 자신의 기술을 훔쳤다고 판단했고 V2의 개발자인 브라운도 고다드의 로켓이 자신이 로켓을 개발하는데 엄청나게 큰 도움이 되었다는 사실은 인정했다.[3] 소련제 R1이 바로 V2의 카피였다[4] 일본폭격 후 소련에 불시착한 기체를 소련이 압류했다, 당시 소련-일본 중립조약은 유효했기 때문에 기체와 승무원 억류는 중립국의 의무를 이행한 것이다(유럽에서는 스위스와 스웨덴이 자국에 불시착한 교전국들 비행기와 승무원들을 억류한 적이 있다)다만 승무원들은 나중에 뒷구멍으로 슬쩍 귀환시킨다.[5] 미국의 군사당국은 한국측이 자국제 미사일의 봉인을 무시하고 부품을 뜯어본다고 불만을 표하고 있다. [6] 대전 말쯤 되면 겨우 셔먼 초기형이랑 비슷한 성능을 낼 수 있는 4식 중천차 치토, 5식 중전차 치리가 개발되기는 하지만 그때 미국은 이미 퍼싱이 개발되었고 셔먼도 후기형으로 바뀌었는데다가 일본의 공업능력으로 품질유지가 될지는 알 수 없다. 게다가 일본군 무기는 서류상 성능보다 실전에서의 성능이 훨씬 떨어지는 경우가 많아 더더욱 신뢰할 수 없다.[7] 유명한 DC-4와는 다른 물건이다.[8] 큰 페이로드를 가지고 운용한다는 공통점이 있어 여객기나 수송기를 폭격기로 개조해서 쓴 예는 꽤 많다. 독일의 He 111, Do 17과 같은 폭격기도 원래는 수송기/여객기로 설계되었으며 수송기로 유명한 Ju 52는 스페인 내전에서는 폭격기로 사용되었다. 현대에도 C-130을 개조한 AC-130 공격기가 있다.[9] 이 작업은 보통 컴파일 직전에 특정 도구를 사용해서 수행한다.[10] 여담으로 여기에 나오는 모니터는 삼성제품인데 영화 개봉 당시 다나와 최저가 200만원에 육박하고 시판 제품중 최대 화면 크기의 모델이였다.[11] 다만 역공학으로 보기 애매한 점이 있다면, 이 장치를 수리하는 방식이 세그먼트별로 정해진 동작들을 완수할 수 있게끔 하는 어셈블리어 프로그래밍을 하여 주어진 퍼즐을 해결하는 것이다.[12] 무려 턴에이를 리버스 엔지니어링해서 양산할 계획도 있었다.[13] 홈라인의 과학발전 관련, from 겁스 무한세계.