나무모에 미러 (일반/밝은 화면)
최근 수정 시각 : 2024-11-11 21:14:45

리버스 엔지니어링

역공학에서 넘어옴

파일:나무위키+유도.png  
은(는) 여기로 연결됩니다.
'유희왕'의 카드에 대한 내용은 리버스 엔지니어링(유희왕) 문서
번 문단을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
참고하십시오.

[[컴퓨터공학|컴퓨터 과학 & 공학
Computer Science & Engineering
]]
[ 펼치기 · 접기 ]
||<tablebgcolor=#fff,#1c1d1f><tablecolor=#373a3c,#ddd><colbgcolor=#0066DC><colcolor=white> 기반 학문 ||수학(해석학 · 이산수학 · 수리논리학 · 선형대수학 · 미적분학 · 미분방정식 · 대수학(환론 · 범주론) · 정수론) · 이론 컴퓨터 과학 · 암호학 · 전자공학 · 언어학(형태론 · 통사론 · 의미론 · 화용론 · 음운론) · 인지과학 ||
하드웨어 구성 SoC · CPU · GPU(그래픽 카드 · GPGPU) · ROM · RAM · SSD · HDD · 참조: 틀:컴퓨터 부품
기술 기계어 · 어셈블리어 · C/C++ · C# · Java · Python · BIOS · 절차적 프로그래밍 · 객체 지향 프로그래밍 · 해킹 · ROT13 · 일회용 비밀번호 · 사물인터넷 · 와이파이 · GPS · 임베디드 · 인공신경망 · OpenGL · EXIF · 마이크로아키텍처 · ACPI · UEFI · NERF · gRPC · 리버스 엔지니어링 · HCI · UI · UX · 대역폭 · DBMS · NoSQL · 해시(SHA · 브루트 포스 · 레인보우 테이블 · salt · 암호화폐) · RSA 암호화 · 하드웨어 가속
연구

기타
논리 회로(보수기 · 가산기 · 논리 연산 · 불 대수 · 플립플롭) · 정보이론 · 임베디드 시스템 · 운영 체제 · 데이터베이스 · 프로그래밍 언어{컴파일러(어셈블러 · JIT) · 인터프리터 · 유형 이론 · 파싱 · 링커 · 난해한 프로그래밍 언어} · 메타데이터 · 기계학습 · 빅데이터 · 폰노이만 구조 · 양자컴퓨터 · 행위자 모델 · 인코딩(유니코드 · MBCS) · 네트워크 · 컴퓨터 보안 · OCR · 슈퍼컴퓨터 · 튜링 머신 · FPGA · 딥러닝 · 컴퓨터 구조론 · 컴퓨터 비전 · 컴퓨터 그래픽스 · 인공지능 · 시간 복잡도(최적화) · 소프트웨어 개발 방법론 · 디자인 패턴 · 정보처리이론 · 재귀 이론 · 자연어 처리(기계 번역 · 음성인식) · 버전 (버전 관리 시스템 · Git · GitHub)

1. 개요2. 상세3. 소프트웨어
3.1. 법적 제약3.2. 방법
3.2.1. 정적 분석3.2.2. 동적 분석
3.3. 사례3.4. 방어법
4. 하드웨어
4.1. 클린룸 리버스 엔지니어링4.2. 사례4.3. 방어법
5. 가상의 매체에서의 리버스 엔지니어링6. 관련 문서

1. 개요

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

리버스 엔지니어링은 리버싱이라고도 한다. 특정 기능을 가진 기계 혹은 프로그램을 똑같이 만들어보고 싶은데 내부 구조를 알 수 없을 때 '외부의 동일한 기능을 구현하기 위해 내부를 뜯어 분석하는 행위'이다.

2. 상세

현대에는 개발도상국들이 산업화를 위해 주로 사용하는 방식이다. 즉, 일반적으로 설계 후 제작이 아니라 기제작된 것을 재설계하는 셈이다. 1950년대까지의 일본, 1970년대까지의 한국이나 1990년대 이후의 중국은 리버스 엔지니어링을 통해 자국의 기술력을 크게 끌어올렸다.

이미 실전에 쓰이며 검증되고 있는 물건을 토대로 개발하는 것이기 때문에 무에서부터 유를 창조하는 것과는 비교도 할 수 없을 정도로 고효율 방식이다. 아무 기술력도 없이 처음부터 만들기 시작하면 남의 기술력을 배우고 개발하는 데에 막대한 비용과 시간이 든다. 하지만 기술을 복제할 경우 그 비용과 시간이 대폭 단축된다는 장점이 크다.

다만 후술하듯 상업적인 목적으로 물품을 리버싱해서 생산하는 경우에 대해서는 법적 문제가 발생할 수가 있다. 흔히 미디어에서 말하는 저작권이나 판권 문제와 비슷한 것이다. 완제품의 경우에는 말할 것도 없고 제품 내부에 들어가는 부품 파츠 같은 것도 그러하다. 그러니 비상업적, 개인 사용 목적[1][2]이라면 어느 정도는 눈감아주는 편이지만 만들어서 대량 생산을 하거나 인터넷에 무단 배포 또는 판매하는 경우에는 문제가 심각해진다.

열악한 환경의 개발도상국이 기어이 복제에 성공해 선진국을 경악시키는 경우도 없진 않은데 1955년에 등장한 한국의 시발 자동차는 미국제 엔진[3] 부품들을 전통적인 대장간 거푸집 주조로 복제했다고 한다.

3. 소프트웨어

소프트웨어에서 리버스 엔지니어링은 소프트웨어 개발 프로세스 각 단계의 산출물을 역으로 도출해 내는 과정이다. 리버싱을 통해 배포된 원시 코드(프로그램)에서 구현 단계의 산출물인 소스코드를 얻을 수 있으며 소스코드로부터 설계 단계의 산출물인 소프트웨어 설계서를, 소프트웨어 설계서에서 분석 단계의 산출물인 요구사항 명세서를 얻을 수 있다.

3.1. 법적 제약

대한민국 법률에서는 컴퓨터 프로그램의 리버스 엔지니어링에 대해 다음과 같이 규정하고 있다.
저작권법
제2조(정의) 이 법에서 사용하는 용어의 뜻은 다음과 같다.
34. "프로그램코드역분석(디컴파일)"은 독립적으로 창작된 컴퓨터프로그램저작물과 다른 컴퓨터프로그램과의 호환에 필요한 정보를 얻기 위하여 컴퓨터프로그램저작물코드를 복제 또는 변환하는 것을 말한다.

제101조의4(프로그램코드역분석) ① 정당한 권한에 의하여 프로그램을 이용하는 자 또는 그의 허락을 받은 자는 호환에 필요한 정보를 쉽게 얻을 수 없고 그 획득이 불가피한 경우에는 해당 프로그램의 호환에 필요한 부분에 한하여 프로그램의 저작재산권자의 허락을 받지 아니하고 프로그램코드역분석을 할 수 있다.
② 제1항에 따른 프로그램코드역분석을 통하여 얻은 정보는 다음 각 호의 어느 하나에 해당하는 경우에는 이를 이용할 수 없다.
1. 호환 목적 외의 다른 목적을 위하여 이용하거나 제3자에게 제공하는 경우
2. 프로그램코드역분석의 대상이 되는 프로그램과 표현이 실질적으로 유사한 프로그램을 개발·제작·판매하거나 그 밖에 프로그램의 저작권을 침해하는 행위에 이용하는 경우

제104조의2(기술적 보호조치의 무력화 금지) ① 누구든지 정당한 권한 없이 고의 또는 과실로 제2조제28호가목의 기술적 보호조치를 제거·변경하거나 우회하는 등의 방법으로 무력화하여서는 아니 된다. 다만, 다음 각 호의 어느 하나에 해당하는 경우에는 그러하지 아니하다.
6. 정당한 권한을 가지고 프로그램을 사용하는 자가 다른 프로그램과의 호환을 위하여 필요한 범위에서 프로그램코드역분석을 하는 경우
7. 정당한 권한을 가진 자가 오로지 컴퓨터 또는 정보통신망의 보안성을 검사ㆍ조사 또는 보정하기 위하여 필요한 경우

위 조문을 보면 알 수 있듯이 대한민국에서 리버스 엔지니어링은 합법적으로 구한 프로그램에 대해서 호환이나 보안 등의 목적으로만 한정적으로 허용된다.

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

다만, 해당 법률에서는 "프로그램 코드 역분석(디컴파일)"을 금지하고 있으므로 아래의 클린룸 리버스 엔지니어링과 같이 배포된 프로그램에서 코드 분석 없이 요구사항 명세서를 도출하는 것은 가능하며, 그렇게 도출된 요구사항 명세서 및 그것으로부터 도출된 각 단계의 산출물들이 원래의 것과 표현상 다르다면 저작권 위배가 아니므로 상업적인 이용도 가능하다. 이는 소프트웨어가 원칙적으로 특허로 보호받을 수 없고 저작권에 의해서만 보호받기 때문이다. 단, 디자인과 이미지 등은 따로 보호될 수 있다.

3.2. 방법

3.2.1. 정적 분석

도구는 IDA, ghidra 등이 있다. 각종 디컴파일러를 사용해서 실행 바이너리로부터 소스를 역추출하기도 한다. Java는 디컴파일시 거의 소스 코드 그대로 나오기 때문에 리버싱이 쉬운 편이다. 마인크래프트의 모드 로더들은 마인크래프트의 자바 실행 바이너리를 리버싱해서 만들어졌다.

각종 스크립트 언어는 소스 코드가 곧 실행 프로그램이 되는 특징 때문에 리버싱을 할 필요가 별로 없다. 굳이 있다면 난독화한 소스 코드를 재포맷하는 정도.

ghidra는 특히나 NSA에서 개발하고 배포한 툴[4]로서 바이너리 파일을 넣어주면 컴파일시 거의 1:1 매칭이 되는 C 코드를 생성해주는 수준으로 정교하여 ELF 바이너리와 결합하여 오픈소스화된 디아블로나, 최적화되어 프레임 드롭이 적은 오픈소스 슈퍼 마리오 64 등의 기상천외한 프로젝트를 탄생시키기도 했다. IDA가 x86 윈도우라는 특정한 환경에 특화되어 있는것과 달리 ghidra는 모든 어셈블리를 범용 P-코드를 거쳐 디컴파일하기 때문에 지원하는 모든 아키텍처에서 준수한 성능을 보인다.

3.2.2. 동적 분석

정적 분석만으로는 런타임에 결정되는 컨트롤 플로우를 따라가기 어렵다는 단점이 있다. 예를 들어 정적 분석만으로 레지스터의 값을 추론해내는것은 다항시간 내에 불가능하다.[5] 그래서 ollydbg, x64dbg, GDB 등의 디버거를 물려놓고 프로그램을 실행시켜 어떤 값이 어떤 명령어와 함께 실행되는지 관찰해 버린다.

3.3. 사례

3.4. 방어법

클라이언트 컴퓨터에서 실행되는 프로그램의 리버싱을 막을 방법은 없다. CPU로 로드될 때는 반드시 기계어로 번역돼야 하기 때문에 기계어 코드를 직접 메모리에서 덤프떠서 리버싱하면 그만이기 때문이다.

따라서 소프트웨어 리버싱의 방어는 리버싱을 막는게 아니라 최대한 분석을 복잡하게 만들어 리버싱을 지연시키는데 그 목적이 있다. 코드 영역을 '암호화'하거나 코드의 제어/데이터 흐름을 '난독화'하여 분석을 방해한다. 난독화를 위해 실행 바이너리에 더미 데이터를 집어넣어 분석을 어렵게 만들고 같은 기능을 하는 여러 함수를 일부러 중복 작성하거나 변수나 함수명을 읽기 힘들게 바꾸는 식[9]으로 분석 난이도를 높이는 방법도 있다.[10]

온라인으로 동작하는 소프트웨어라면 클라이언트에서 중요한 코드를 실행하지 않는 방법도 있다. 서버에 중요 로직을 보관하고 API만 오픈한 경우에는 해킹을 하거나 서버 컴퓨터를 직접 찾아가서 메모리를 덤프하지 않는 이상 코드를 리버싱할 방법이 없다. 그래서 요즘은 중요한 코드를 서버에 두고 소비자에게는 API만을 노출시켜 사용하게 하는 방법으로 리버싱으로 소프트웨어 동작의 핵심 로직을 방어하고 있다. 단점은 사용자가 항상 온라인 상태여야 한다는 것, 사용자가 늘어나면 서버 부하가 커진다는 것 등이다.

코나미 버블 시스템이 한국의 세운상가에서 복제되지 못한 가장 큰 이유는 버블시스템의 메인 칩들은 후지츠에서만 독점생산하였는데 이 회사가 NEC, 코나미 같은 대기업이 아니면 부품을 판매하지 않았기 때문이다.

그러나 리버싱 도구도 같이 발전해서 난독화된 코드의 패턴을 분석해 중복 작성된 함수의 중복을 제거하고 변수명을 추정하여 명명해 주고 바이너리 데이터를 이미 소스 코드가 알려진 다른 프로그램과 매칭시켜 손상된(난독화된) 코드를 상당한 수준으로 복원해내고 있기 때문에 들이는 노력에 비해 난이도는 별로 올라가지 않는다. 특히 현대의 프로그램은 오픈 소스 라이브러리에 크게 의존하기 때문에 그만큼 복원률도 높은 편이다.

해당 프로그램이 스파게티 코드로 이루어졌다면 리버스 엔지니어링이 어렵거나 불가능에 가깝다. 이쪽은 애초에 소스코드를 가진 원저작자도 분석과 디버깅이 힘들다.

4. 하드웨어

조립은 분해의 역순

제품을 부품 단위로 분해해 각 부품의 제조사 홈페이지를 찾아가 데이터시트를 찾아보는 방법으로 리버싱한다. 만약 분석하고자 하는 부품이 따로 판매되는 물건이 아니라면 엑스레이나 초음파 등 각종 비파괴검사 도구를 사용해서 내부를 분석한 후 해당 부품을 분해(파괴)해서 내부 구조를 알아낸다.

악착같이 기술을 숨기면 지연은 가능하겠지만 뜯을 놈은 다 뜯어보는 관계로 하드웨어 부문에서 리버싱을 기술적으로 막을 방법은 사실상 없다. 단, 리버싱에 성공해서 제품의 구성을 알아냈다고 하더라도 그걸 재현하는 건 다른 이야기일 수 있다. 예를 들어 반도체는 전자현미경으로 들여다봐서 로직 구성을 알아내는 건 누구나 할 수 있지만 일단 소재를 재현하는 것부터 난관이며 회로를 실리콘 위에 새겨내는 것 역시 매우 고도의 기술이 요구된다. 소재의 성능이나 공정 미세화 수준, 기기의 정밀도가 따라오지 못하면 당연히 복제에 실패하거나 매우 조악한 결과물이 나온다.

기계 부품의 경우에도 제품의 형상이나 합금 구성비 같은 건 알아낸다고 쳐도 보유하고 있는 공작 기계의 정밀도가 받쳐 주지 못한다면 역시 복제가 불가능하다. 극단적인 예시로 생명체의 경우 생명체의 구성 원소는 전부 알려져 있고 단백질의 합성 기작이나 DNA 염기서열도 이미 다 알아냈지만 생명체 그 자체를 세포 복제 이외의 방법으로 창조하는 것은 그 누구도 성공하지 못하였으며 역시 무슨 구조로 짜여 있고 어떻게 신호를 전달하여 돌아가는지 그런대로 파악은 하고 있지만 아직 매우 간단한 원생생물의 뇌를 시뮬레이션 하는 정도에 그치고 있다. 오히려 뇌를 복제하는 것보다 강인공지능의 개발이 더 빠를 거라고 평가되는 실정이다.

4.1. 클린룸 리버스 엔지니어링

Clean-room Reverse Engineering
Clean-room design
Chinese wall technique

제품을 리버스 엔지니어링하여 저작권이나 기업비밀에 관한 부분을 회피하면서 그 제품의 디자인을 모방하는 방법. "청정실"(클린룸)이라는 말은 업계의 독자적 기술에 관한 지식으로부터 영향을 전혀 받지 않는 환경에서 작업한다는 데서 나온 표현이다. 리버스 엔지니어링 팀과 재설계 팀을 전적으로 격리한 상태에서 계획을 진행한다는 것으로, 리버스 엔지니어링을 통해 정보를 얻어서 진행하지만 결과물 자체는 다른 기술을 구현하는 것이다. 이것은 리버스 엔지니어링의 대상이 되는 기술과 완전히 똑같지 않은 이상 독립적인 개발로 간주되므로 저작권이나 기업 비밀 저촉으로부터 자유롭게 된다.

이 방식으로는 특허 회피가 어렵다. 하지만 이것도 나름 남는 장사인데 특허를 침해받는 회사가 고소한다고 쳐도 웬만하면 카피를 한 회사의 국가에서 심리를 여는데 아무리 사법부는 공정함을 요구한다지만 현실은 자국 법인에게 시간을 끌어줘서 판결이 나올때면 이미 해당 제품은 구식으로 단물이 다 빠진 상태이고 판결도 자국 법인에게 관대하게 나온다. 60년대 이전의 일본이나 70~90년대의 한국, 대만, 홍콩, 싱가포르 등이 이런 식으로 기술력을 쌓아올렸으며 지금은 중국이런 식으로 기술을 배워오고 있다.

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

4.2. 사례

4.2.1. 무기

인류 역사상 전쟁과 수반된 기술 발전 중에는 적국에게서 노획한(혹은 동맹국에게서 공여받은) 발전된 전쟁병기를 리버싱해서 자국의 신무기로 응용하는 식의 리버스 엔지니어링 역시 심심찮게 있었다.

군사분야를 보면 선진국의 대부분이 처음에 무기를 개발할 때는 상대방이나 우방의 국가의 무기를 베끼면서 시작했다. 그러니까 자신이 부족하다 싶은 분야는 무조건 베꼈다. 예를 들어 나치 독일V2 같은 경우는 미국의 고다드가 만든 로켓을 베껴서 개발된 물건이고[13] 나중에 소련뿐만 아니라 미국, 영국, 중국[14]이 모두 이를 기반으로 탄도미사일 개발을 축적해 온 예가 있다. 나치 독일도 남이 앞선 분야는 베끼는 데 거리낌이 없어서 소련의 카츄샤 로켓을 베껴서 네벨베르퍼 로켓을 만들었고 바주카를 베껴서 판처슈렉을 만들었다. 소련은 같은 동맹국인 미국의 B-29를 베껴 Tu-4를 만들어냈다.[15]

당연히 한국도 베낄 수 있는 기술은 베꼈다. 1차 번개사업 당시 ADDM20 바주카의 도면을 구할 수 없어서 육안 측정과 비파괴 검사에 의지해 복제품을 만들어야 했다. M1 개런드 소총, M2 / M101 계열 105mm 곡사포도 마찬가지다. 미국 고문단은 도면 등 기술자료 제공을 완강히 거부했지만 어찌어찌 데드카피해 작동하는 물건을 만들어 공개시험까지 하니 기술자료를 제공하는 대신 응용과 수출을 제한하는 방식으로 태도를 바꾸었다. 놀라운 사실은 한국 개발진들이 공차의 개념을 모른 채로 개발에 들어갔다는 것인데 고문단들도 상당히 놀랐다고 한다.#

현대에는 중국이 이 분야에서 잘 알려져 있다. 2000년대 초반까지 중국의 모든 무기체계는 소련제를 카피한 것이다. 대표적인 예시로 보병무기로는 중국판 AK-4756식 자동소총, 전투기로는 Su-27F-35의 데드카피 버전인 J-11, FC-31이 있다. 물론 초반 제품은 정식 라이선스였으나 중소결렬 이후의 것은 모두 지적재산권을 무시한 것인데 소련은 사회주의 국가였기 때문에 지적재산권에는 무지했다. 중국은 기술적 열세를 인식하고 리버스 엔지니어링에 죄책감을 갖지 않았다. 총 3단계로 이루어진 구체적인 비전까지 가지고 있었는데 1단계-타국의 무기를 그대로 복제하고, 2단계-그 복제품을 개량시켜 성능을 개선시키며, 3단계-그 과정에서 축적한 기술을 바탕으로 독자개발에 나서는 것이었다. 물론 이들의 주요 기술 공급원인 우크라이나와 유럽에서 돈주고 기술을 도입하고 해킹으로 열심히 빼내가지 않았으면 지금보다 훨씬 정도가 늦었다. 기술력은 약한데 덩치는 커서 그 어느 나라도 중국을 물심양면으로 도와주려고 하지 않았기 때문에 어쩔 수 없는 선택이었다.

기술 수준이 너무 떨어지면 제품을 입수할 수 있더라도 리버스 엔지니어링을 할 수 없다. 가공전기대체역사물에서 미래에서 가져온 무기를 베껴서 뚝딱 양산하는 것은 판타지일 뿐이다. 제2차 세계 대전일본군할힌골 전투 당시의 참패한 전선에서 긁어모은 소련 전차들에 대한 단편적인 부품들과 동남아 전선에서 숱한 충격과 공포를 불러온 연합군의 M4 셔먼 전차를 노획해 본국으로 보냈지만 정작 적국의 병기를 받아본 제국 전차 조병창 기술자들은 놀라운 기술력에 감탄하는 것밖에 할 수 없었다. 복제는 커녕 기술력의 향상도 이루지 못했다. 그 악명높은 치하의 개량을 위해 지속적인 기술적 보완과 개량이 있었지만 종전 때까지 고철덩어리 수준이라 관짝으로 전락했다. 대전 말쯤 되면 겨우 포라도 셔먼 초기형과 비슷한 성능을 낼 수 있는 3식 중전차 치누, 장갑은 셔먼 초기형, 관통력은 셔먼 후기형과 비슷, 화력(살상반경)과 연사력은 셔먼 이상급[16]인 5식 중전차 치리가 개발되기는 하지만 그때 미국은 이미 M26 퍼싱이 개발되었고 M4 셔먼도 후기형으로 바뀌었다.[17]

중국도 한때는 이런 시절이 있었다. 국공내전이 끝나고 대만금문도를 놓고 다투던 시절 미국제 사이드와인더 미사일을 입수했다. 처음에는 파편까지 긁어모아서 카피해 보려고 했으나 자신들 기술력으로는 베낄 수도 없다는 걸 깨닫고 소련에게 선물로 줬는데 소련은 사이드와인더를 리버싱하여 K-13을 만들었다.

이란도 이란 혁명 이후 친미에서 반미로 국가 노선이 바뀌면서 미국제 무기 부품 수입이 끊기자 리버싱을 적극적으로 시도하여 F-5 전투기를 리버싱한 HESA 아자라크쉬를 개발한 후 추가적인 개량을 가한 HESA 사에케를 실전배치하고 AIM-54 미사일도 리버싱하여 자국 F-14에 장비하고 있다.

한국 역시 1945년 독립 이후 남아있던 조병창의 설비로 일본의 무기를 복제하거나 보수해 사용하기도 했으며 6.25 전쟁 중에는 부산의 조병창에서 부품을 하나하나 깎아서 만드는 식으로 M1911을 소량 복제하기도 했다. 다만 후자는 복제하는 것보다 미군이 원조해 준 것이 더 효율적이였기 때문에 실제 양산은 취소되었으며 남아 있던 소량의 재고들은 일시적으로 손상된 총기를 복구하는 용도로만 사용되었다.

베끼는 원작이 신통찮을 경우 더 망한 결과물이 나오기도 한다. 대표적인 예가 일본의 4발폭격기 G5N 신잔인데 미국 더글러스 사의 DC-4E[18] 여객기[19]를 베껴 만들었으나 결함투성이였던 원본을 복제한 것이라 더한 문제를 가지게 되었고 일본군조차 폭격기로서 대량생산을 포기하고 몇 대 못 만든 기존 생산기도 모두 수송기로 사용한 망작이 되었다.[20] 그나마 저런 망작을 만들면서 얻은 교훈들과 함께 노획한 B-17들을 리버싱해 얻은 기술들로 좀 더 제대로 된 4발 중폭격기 G8N 렌잔을 만들긴 했으나 얼마 안 가 전쟁이 끝난다.

정규군이 아니라도 조악한 리버스 엔지니어링을 한다. 분쟁지역에서는 가정집에 불법 총기 공장을 차려놓고는 망치, 톱, 줄 등의 수공구로 철판이나 쇠파이프 등을 대충 자르고 붙이고 구부려서 겉보기에 그럴싸한 총기류를 만들기도 한다. 다만 이런 케이스는 거의 예외 없이 내구도·정밀도·신뢰도가 정말 조악한데 사격을 하다가 총이 폭발해서 사용자가 다치지나 않으면 다행일 정도다.

F-35에는 충격을 받으면 기체 내부 프로그램이 삭제되는 장치가 있는데 추락한 기체를 적군이 확보해 분석하는 사태를 막기 위해서다.

4.2.2. 아케이드 시스템

1980년대 말까지만 해도 한국에서는 지적재산권 단속이 이루어지지 않았기 때문에 일본 비디오 게임, 주로 오락실용 기판을 복제하여 전 세계로 수출하였다. 일본에서 전자오락기가 출시된지 얼마 뒤에 카피하여 원판의 1/4도 안 되는 싼 값에 공급하기 시작하였다. 한국 오락실 여명기부터 오락실에서 가동된 아케이드 게임 기판은 이런 복제 기판들이 다수였다.

전자오락기를 카피하는 초기 방식은 일본에서 전자오락기를 입수하고 IC를 뜯어서 보이는 그대로 회로를 그려서 복제(선의 구성, PNP형, NPN형)하는 방식이었다. 일본에서는 점차 IC의 집적화로 대응했으나 한국에서는 현미경으로 일일이 구분하여 회로를 그렸다. 결국 일본에서는 IC의 회로를 덮는 플라스틱에 점핑회로를 넣어 복제하기 위해 덮개 플라스틱을 제거할 때 점핑회로도 같이 떨어져나가는 방식을 통해 보이는 회로만 카피해서는 회로를 완성할 수 없게 만들었다. 그러자 한국에서는 IC를 오븐에 넣고 열을 불규칙적으로 넣으며 화학약품을 표면에 분사하는 방식으로 복제했다. 이러면 IC 표면의 플라스틱이 부서져 내려 결국 온전한 회로만 남게 된다. 그러자 일본에선 당시 미국에서 상용화되기 시작한 멀티플랫폼(복층방식) IC를 사용했는데 한국에서는 또 뚫었다.

쫓고 쫓기던 이 싸움은 결국 일본에서 1987년경 한국 정부에 압박을 넣고 한국 정부에서 컴퓨터 프로그램 보호법을 근거로 통제하기 시작하면서 끝났다.[21]

월광보합 같이 수백종의 게임 롬을 한 곳에 때려 박은 것도 여기에 속한다.

4.3. 방어법

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

현실과 마찬가지로 보통 압도적인 기술력을 자랑하는 상대를 따라잡기 위해 사용하는 모습이 많이 묘사된다. 특히 외계인이 등장하는 매체에서 우월한 외계 장비를 노획해 리버스 엔지니어링으로 기술을 확보하는 건 외계인 해부 장면 못지않은 클리셰다.

6. 관련 문서


[1] 애초에 특허권 침해가 아니다.[2] 예를 들어 어떤 물건의 내부 부품을 교체해야 되는데 구할 곳이 마땅히 없을 때 혹은 물건 자체를 구하고 싶어도 단종되거나 모두 버려지거나 폐기되어서 중고로도 구할 수가 없을 때, 데이터 파일이 날아갔는데 지원이 중단되었을 때 정도.[3] 윌리스 오버랜드(현 지프)의 2,200cc 고데빌 엔진.[4] 당연히 NSA가 그냥 배포할 리가 있나. 위키리크스가 폭로한 CIA의 해킹툴인 Vault 7에 포함되어 유출되었고 1년 반여가 지난 뒤에 정식으로 공개했으며 현재도 NSA가 직접 GitHub에서 관리하고 있다.[5] SMT 문제로 환원되며 SMT는 NP-hard이다.#[6] 이러한 특징 때문인지, 아케이드 게임의 하이스코어 집계에선 에뮬레이터로 세운 점수는 이유 불문하고 무조건 허위점수로 여긴다. 여차 말하지만 에뮬레이터로 세운 점수와 실기로 세운 점수를 동급으로 놓는 것 자체가 말도 안 되는 일이고 실제 기기와 에뮬레이터상의 플레이 환경 차이와 정확성, TAS의 위험성까지 고려해 보면 더더욱. 그래서 일본 하이스코어 협회에선 에뮬레이터를 이용해서 찍은 점수의 신청을 일체 받아주지 않는다고 한다.[7] 선택 불가 혹은 히든 커맨드 입력으로 언락하는 숨겨진 캐릭터및 보스를 처음부터 고르게 하기, 파워 게이지 무한외 다수.[8] 빵집 4.0도 EGG 압축 해제를 지원하지만 ALZ와 달리 이스트소프트에서 압축 해제 모듈을 샀다.[9] 인간이 소스코드를 읽기 어렵게 만드는 방법은 컴파일러 기반 언어에는 의미가 없다. 컴파일 과정을 거치면 그 결과가 같으므로 반드시 control flow와 data flow를 난독화 하는 기법이 적용되어야 한다.[10] 이 작업은 보통 컴파일 직전에 특정 도구를 사용해서 수행한다.[11] 오리지널 IBM PC에는 8비트 애플, MSX처럼 롬베이직도 있었다고 하는데 호환PC는 처음부터 MS-DOS 사용을 전제로 했기 때문에 그 부분은 없다.[12] 대표적인 예로 삼성 Knox가 있다.[13] 고다드는 노획된 V2를 면밀하게 분석한 다음 독일이 자신의 기술을 훔쳤다고 판단했고 V2의 개발자인 브라운도 고다드의 로켓이 자신이 로켓을 개발하는데 엄청나게 큰 도움이 되었다는 사실은 인정했다.[14] 소련제 R1이 바로 V2의 카피였다.[15] 당시 소련-일본 사이엔 중립조약이 맺어져 있어서 중립국의 의무를 이행하기 위해 일본 폭격 후 소련에 불시착한 미국 기체와 승무원을 억류한 다음, 기체는 그대로 가져가고 승무원은 편법으로 돌려보냈다. 다만 자세한 내막은 좀 다른데 Tu-4 문서 참고.[16] 치리는 자동장전기가 있었다.[17] 거기다 당시 일본의 공업 능력으로는 제대로 된 품질관리가 불가능했다. 그래서 일본군 무기는 서류상 성능보다 실전에서의 성능이 훨씬 떨어지는 경우가 많았다.[18] 유명한 DC-4와는 다른 물건이다.[19] 큰 페이로드를 가지고 운용한다는 공통점이 있어 여객기나 수송기를 폭격기로 개조해서 쓴 예는 꽤 많다. 독일의 He 111, Do 17과 같은 폭격기도 원래는 수송기·여객기로 설계되었으며 수송기로 유명한 Ju 52는 스페인 내전에서는 폭격기로 사용되었다. 현대에도 C-130을 개조한 AC-130 공격기가 있다.[20] 다만 원본인 DC-4E도 미국에서 불량품 취급받고 1대만 만들고 일본에 팔아넘긴 것이라 설계변경을 하지 않는 이상 개악품만 나올 수순이었다.[21] 컴퓨터 프로그램 보호법의 시행일인 1987년 7월 1일자 동아일보 1면에 일본 어뮤즈먼트 머신 공업 협회측에서 불법복제의 근절을 호소하는 동시에 법적 조치를 경고하는 내용의 광고를 내보내기도 했다(광고 보기).[22] 2023년 기준으로 이 방식은 주로 메모리 반도체 분야에서 사용되지만 비메모리 반도체에도 이를 활용하기 위한 연구가 진행중이다. 활용중인 사례로는 AMD의 3D 캐시 제품군 등이 있다.[23] 여담으로 여기에 나오는 모니터는 삼성제품인데 영화 개봉 당시 다나와 최저가 200만원에 육박하고 시판 제품 중 최대 화면 크기의 모델이었다.[24] 다만 역공학으로 보기 애매한 점이 있다면 이 장치를 수리하는 방식이 세그먼트별로 정해진 동작들을 완수할 수 있게끔 하는 어셈블리어 프로그래밍을 하여 주어진 퍼즐을 해결하는 것이다.[25] 무려 턴에이를 리버스 엔지니어링해서 양산할 계획도 있었다.[26] 이쪽은 선조 기술을 리버스 엔지니어링 안 한 것을 찾는 게 더 빠를 정도로 자기네들이 직접 개발한 게 손에 꼽는다.[27] 홈라인의 과학발전 관련, from 겁스 무한세계.


파일:CC-white.svg 이 문서의 내용 중 전체 또는 일부는
문서의 r97
, 번 문단
에서 가져왔습니다. 이전 역사 보러 가기
파일:CC-white.svg 이 문서의 내용 중 전체 또는 일부는 다른 문서에서 가져왔습니다.
[ 펼치기 · 접기 ]
문서의 r97 (이전 역사)
문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)