리버싱(Reverse Engineering) 이란 무엇일까요?
Security/Reverse Engineering

리버싱(Reverse Engineering) 이란 무엇일까요?


Reverse Engineering 이란?



말그대로 역공학(逆工學). 즉 장치 또는 시스템의 기술적인 원리를 그 구조분석을 통해  역으로 발견하는 과정이에요. 이 리버싱 기술을 통해서  프로그램 내부의 동작원리를 들여다 볼 수 있답니다.  이 과정을 통해서 개발단계에서 발견하지 못한 버그나 취약점들을 파악할 수 있고, 그 취약점들을 직접 패치할 수 있답니다.

여기서 하나 ! 패치랑 크랙 두 단어를 구분을 못하시는 분들이 있던데 이 두 단어의 차이점은 중요하므로 짚고 넘어갈게요~


패치(patch) 이란?

프로그램의 파일 혹은 실행중인 프로세스 메모리의 내용을 변경하는 작업을 패치라고 해요. 게임을 하시다보면 "패치한다"는 말을 들어보신적이 있을거에요. 

크랙(crack) 이란?

크랙은 패치와 같은 개념이지만 패치를하는 리버서의 의도가 비합법적이고 비도덕적인 경우를 말한답니다. 예를들면 저작권이있는 소프트웨어를 사용할 때 정품인증을 받기 위해 크랙을 사용한 경험이 있으신분들도 있을거에요.


한마디로 말하면 패치는 좋은것! 크랙은 불법적이고 나쁜것! 이라 볼수있죠.  그래서 리버싱을 공부할 때는 리버싱 실력만 갖추어야 할 것이 아니라 높은수준의 윤리의식도 같이 갖추어야 비로소 참된 리버서 라고 할 수 있는 거랍니다.



다음으로는 리버싱 분석방법에 대해 알아봅시다

실행파일의 분석방법에는 크게 두가지가 있어요. 정적분석동적분석이에요.


정적분석이란 파일을 실행하지않고 겉모습만 관찰하여 분석하는 방법이에요.  그와 반대로 동적분석은 파일을 직접 실행시켜서 분석하고 디버깅을 통해서 코드흐름과 메모리 상태를 자세히 살펴보는 방법이에요. 주로 디버거(Debugger)를 이용하여 프로그램 내부 구조와 동작원리를 분석할 수 있죠. 

OllyDbg프로그램

리버서들이 주로 쓰는 디버거가 있는데 OllyDbg라는 프로그램이에요.