본문 바로가기

ETC/추천

리버스엔지니어링이란(With 공부방법)

리버스엔지니어링에 대해 알아보았다. 

한국통신기술협회 정보통신용어사전( 
http://word.tta.or.kr/ )에 따르면 아래 설명과 같다.




또한, "리버싱 핵심 원리" 어원에 따르면 

리버스 엔지니어링(Reversing Engineering, 역공학)이란, 물건이나 기계장치 혹은 시스템 등의 구조, 기능, 동작 등을 분석하여 그 원리를 이해하며 단점을 보완하고 새로운 아이디어를 추가하는 일련의 작업이라고 할 수 있다.

그렇다면 리버스 코드 엔지니어링(Reverse Code Engineering, RCE)이란 무엇일까?
한마디로 소프트웨어 분야의 리버스 엔지니어링이라고 생각하면 된다.

개인적인 견해로 용어 사전이나 책에 적힌 내용이나 비슷비슷하지만 후자가 더 맞는 표현이라고 . 

또한 앞으로 블로그에 글을 쓸때엔 간추려 리버싱이라 명명하겠다. 

리버싱을 공부한지 언 5년이 된 듯 하다. 

아마 이 글을 보고 있는 분들은 이제 시작하시는 분들이 많을 것으로 사려되는데 꼭 드릴 이야기가 있다. 

조급해하지말고 천천히...

한국인 특성상 조급하게 빠르게 급하게하려는 성향이 강하다. 필자 또한 그러하다.

하지만 리버싱을 처음 입문할때엔 모두 내려둬야한다. 

급할 수록 돌아가라는 말이 있다. 

처음에 어떠한 방식으로 어떻게 공부했느냐가 가장 중요하다고 생각한다. 

보통은 c언어로 이 루틴은 for문이다 뭐다 하시는
분들이 있다. 물론 도움된다. 

하지만 필자 생각은 다르다. 처음 입문 시부터 다른 언어는 내려놓아야한다고 생각된다. 
단순히 어셈 코드 하나하나를 세세하게 살피면서 레지스터와의 변화하는 내용, 스택에 쌓이는 내용, 메모리 덤프 내 내용이 변화하는 것들 등등  보는 것이다. 
그리고 이해하려고 노력하는 것이다. 

이와 같은 방식으로 접근하지 않으면 c로 만들어진 프로그램이 아니면 분석도 힘들 뿐더러 함수에 브레이크걸고 문자열 검색해서 브레이크 걸고. 나중 안티디버깅, 패킹 등 분석이 어렵게 되는 환경을 맞이하는 순간 그냥 포기하거나 또 다시 세세하게 공부를 해야할 것이다. 

지금은 잘 이해가 되지 않을 수 있으나 나중에 어느정도 분석할 수 있게 되면 위와 같은 부분은 공감하고 그런 부분들은 자연히 알게 될 것이다. 

아래 내용은『[보안2기]리버스엔지니어링&악성코드 분석 기본 과정』을 진행하면서 만든 오리엔테이션 자료 중 일부를 발췌한 내용이다.
세부 오리엔테이션 내용은 블로그 참고( http://winner75.tistory.com/3 )




이해하는덴 정말 오랜시간이 소요되겠지만..

위와 같이 코드를 하나하나 따라가면서 공부한다면 어떤 패킹과 어떤 안티디버깅 기법을 만나도 해결해 나갈 수 있다고 단언코 말씀드리고 싶다.