리버스 엔지니어링

(Reverse Engineering) 이란..

(=리버싱 Reversing)


프로그램이 실행되는 과정을 역(Reverse)으로 추적하여 그 프로그램의 내용을 뜯어 보는것.

위의 말에서 이해가 안되는 부분이 있다면 '역(Reverse)으로 추적하여' 라는 부분일 것이다.

역(Reverse)으로 추적한다는게 대체 무슨 뜻일까

그러면 먼저 프로그램이 만들어 지는 순서를 간략하게 볼 필요가 있다.

프로그램이 만들어지려면 아래와 같은 과정을 거친다.


코드 -> 어셈블리어 -> 이진수


위와 같이 컴퓨터가 이해할수 있는 이진수로 프로그램을 만드려면

사람이 코드를 작성하고

그것을 어셈블리어로 바꾸고

바꾼 어셈블리어를 이진수로 바꿔줘야만이

컴퓨터가 이해할수 있는 프로그램이 완성되는것이다.


자, 원 질문으로 돌아가서 역으로 추적을 하는데 이 과정을 왜 알아야하냐 하면

이 과정을 알아야 이진수 -> 어셈블리어 -> 코드 로 점점 사람이 이해할수 있는

언어에 가까워 져서 내가 어느 부분을 바꿔야 내 의도대로 프로그램을 돌릴수 있는지를

좀 더 알기 쉽게 된다.

그렇다면 리버싱을 통해 원래의 코드를 알아내서 내 마음대로 할수 있지 않겠느냐? 라는 질문을 할수가 있다. 하지만 역으로 추적해서 원래의 코드를 100% 복원하는데는 한계가 있다. 따라서 리버싱을 할때에는 어셈블리어 단계까지만 복원을 하여 원하는 부분을 바꾸곤 한다.

'프로그래밍 > 리버스 엔지니어링' 카테고리의 다른 글

OllyDbg 초기설정  (0) 2013.08.29
OllyDbg 64비트 호환용 플러그인  (0) 2013.08.29
Posted by 알 수 없는 사용자