Reverse Engineering
리버스 엔지니어링(Reverse Engineering)은 이미 만들어진 시스템이나 장치에 대한 해체나 분석을 거쳐 그 대상 물체의 구조와 기능, 디자인 등을 알아내는 일련의 과정을 말한다.
출처: 드림핵
리버싱 기술을 올바르게 사용하는 좋은 예
판매된 지 너무 오래되어 제작사가 이미 개발을 중단한 프로그램에 대한 지원이 필요할 때 리버싱은 매우 효과적이다. 이런 경우 소스 코드를 더 이상 보관하지 않거나 유실된 경우가 많기 때문에, 포팅 등의 지원을 위해서 리버싱이 쓰일 수 있다.
나쁜 예
판매중인 프로그램을 구입하지 않고 공짜로 이용하기 위해 쓰는 키젠 프로그램이나 시리얼 넘버 생성기, 정품 크랙 등의 불법 프로그램도 리버싱을 통해 만들어진다. 또한 각종 프로그램을 분석해서 게임핵도 리버싱을 통해 제작된다.
리버싱을 통한 저작권 침해 관련 법안
저작권법 제35조의3 (저작물의 공정한 이용) 제1항제23조부터 제35조의2까지, 제101조의3부터 제101조의5까지의 경우 외에 저작물의 통상적인 이용 방법과 충돌하지 아니하고 저작자의 정당한 이익을 부당하게 해치지 아니하는 경우에는 보도ㆍ비평ㆍ교육ㆍ연구 등을 위하여 저작물을 이용할 수 있다.
저작권법 제101조의3 (프로그램의 저작재산권의 제한) 제1항 제6호 프로그램의 기초를 이루는 아이디어 및 원리를 확인하기 위하여 프로그램의 기능을 조사ㆍ연구ㆍ시험할 목적으로 복제하는 경우(정당한 권한에 의하여 프로그램을 이용하는 자가 해당 프로그램을 이용 중인 때에 한한다)
동적 분석과 정적 분석
동적분석: 악성코드를 실제로 실행 시켜서 분석을 진행함. 실행 파일을 구성하는 모든 요소, 대상 실행 파일이 실제로 동작할 CPU 아키텍처에 해당하는 어셈블리 코드를 이해하는 것이 필요.
정적분석: 악성코드를 실행 시키지 않고 분석을 진행함. 실행 단계별로 자세한 동작 과정을 살펴봐야 하므로, 환경에 맞는 디버거를 이용해 단계별로 분석하는 기술이 필요.
소스 코드 -> 바이너리 코드
일반적으로 사람이 작성하는 소스 코드는 컴파일을 통해 이진코드로 변환 되어 컴퓨터가 이해하는 형식이다. 모든 언어가 컴파일을 통해 실행 가능한 바이너리가 되는 것은 아니지만 대개는 단독적으로 실행 가능한 바이너리가 되기 위해 컴파일 과정을 거친다.
바이너리 코드 -> 소스 코드
바이너리코드를 분석해서 어떤 방식으로 동작하는지, 어떤 소스 코드를 바탕으로 만들어졌는지를 알아내려면 분석가는 컴파일러가 수행하는 과정을 거꾸로 진행해야 한다.
따라서 주어진 바이너리 코드를 어셈블리 코드로 변환하고, 변환된 어셈블리 코드를 분석하면 대상 바이너리가 어떤 식으로 동작하는지 알 수 있게 된다. 이렇게 바이너리 코드를 어셈블리 코드로 변환하는 과정을 Disassemble(디스어셈블) 이라고 한다.
'리버싱’으로 통용되는 SW 리버스 엔지니어링, 특히 정적 분석 방법에 해당되는 방법은 디스어셈블을 거쳐 나온 어셈블리 코드를 분석하여 소프트웨어의 동작 구조를 알아내는 과정을 가리킨다.
'보안' 카테고리의 다른 글
WEB과 WAS (0) | 2022.10.12 |
---|---|
ARQ란? (0) | 2022.10.12 |
시스템 해킹 보안 기초 (0) | 2020.11.22 |
파이썬 IndentationError: unindent does not match any outer indentation level 오류 (0) | 2020.06.11 |
파이썬 ModuleNotFoundError (0) | 2020.06.05 |