역공학

리버스 엔지니어링() 또는 역공학(逆工學)은 장치 또는 시스템의 기술적인 원리를 그 구조분석을 통해 발견하는 과정이다. 이것은 종종 대상(기계 장치, 전자 부품, 소프트웨어 프로그램 등)을 분해해서 분석하는 것을 포함한다. 그리고 유지 보수 또는 원본의 일부를 이용하지 않고 같은 기능의 새 장치를 만들기 위해 대상의 세부적인 작동을 분석하는 것을 포함한다.

리버스 엔지니어링의 기원은 상업적 또는 군사적으로 하드웨어를 분석한 것에서 시작되었다. 목적은 원본 생산의 절차에 관한 지식이 거의 없는 상태에서, 최종 제품을 가지고 설계 과정을 추론하는 것이다. 같은 기술이 레거시 소프트웨어 시스템에 응용하기 위해 현재 연구되고 있는데, 산업이나 국방이 아니고, 오류, 미완성, 접근 불가인 문서를 수정하기 위함이다.

사용 이유 
 소프트웨어 간의 상호 운용성
 사라진 문서
 상품 분석
 디지털 업데이트/수정
 호환성 부품개발 및 성능향상
 안전 감사
 군사 또는 산업 간첩
 복제 보호 해제
 허가되지 않은 불법 복제의 생성
 소프트웨어 불법 정품 인증 및 시리얼 코드 생성
 소프트웨어 키젠 및 크랙 생성
 학술/학문적 추구
 호기심
 경쟁사의 기술 정보 분석
 악성코드 분석
 소프트웨어 보안성 테스트

대표적인 도구 
소프트웨어 리버스 엔지니어링을 위해 IDA Pro나 OllyDbg 등의 도구들이 사용된다. 이 도구들은 어셈블리 언어들을 분석하기 쉽게 하도록 분석하는 기능과 코드를 변형하는 기능등을 제공한다.

리버스 엔지니어링에 대한 오해 

 그런데 이때 금지하는 것은 이진 코드로 이루어진 실행 파일(또는 실행 루틴)의 리버스 엔지니어링을 금지하고 있을 뿐, 실행 결과로써 만들어진 파일이나, 그 파일의 형식을 리버스 엔지니어링 하는 것을 금지하지는 않는다.

같이 보기 

 데드 카피(dead copy)

참고
컴퓨터프로그램의 리버스 엔지니어링에 관한 법정책적 소고
SW 역분석과 기술적 보호조치 - 한국저작권위원회

 
컴퓨터 보안
간첩 행위
특허법
산업공학
기술 경쟁