What is Reverse Engineering?
재가 생각하는 Reverse Engineering 이란 자신 또는 사람들이 원하는 것들을 얻기 위하여 프로그램을 분석하여,
원하는 결과를 얻어 가는 과정이라고 생각합니다.
우리는 컴퓨터를 하면서 알게 모르게 RE를 통해 얻게 된 것들을 많이 보게 됩니다.
가장 흔한 것이 키 제네레이터, 노시디 패치 같은 것들입니다.
많은 사람들이 RE를 통해 만들어진 것들을 사용해봤지만, 만들 줄은 모릅니다.
그렇다면, Reverse Engineering은 도대체 어떻게 하는 것일까요?
컴퓨터의 CPU에는 명령어 세트가 저장되어 있습니다. 이 명령어 세트를 기계어 라고 부릅니다. 모든 프로그램은 전부 기계어로 되어 있습니다.
하지만 이 기계어는 0과1의 단순한 규칙 조합이기에 사람이 이것을 가지고 프로그래밍 한다는 것은 상당히 난해 합니다.
그래서 이 기계어를 보기 쉬운 기호로 나타낸 것이 어셈블리어 입니다.
어셈블리어는 텍스트 에디터로 작성됩니다. 그리고 그것을 Assembler에게 번역 하라고 하면 Assembler는 우리가 짠 어셈블리어 코드를 기계어 코드로 변환 시키어 줍니다. 이 변환되어 만들어진 OBJ 파일을 Linker에 넣어주면
Linker는 이를 우리가 컴퓨터를 하며 제일 많이 보게 되는 PE파일(ex: EXE 파일)로 만들어 줍니다.
반대로 Disassembler 라는것이 있습니다. Disassembler란 이미 Assembler와 Linker를 거쳐 생성된 PE파일을 다시 어셈블리어 코드로 바꾸어 주는 프로그램 입니다.우리는 이 Disassembler를 이용하여 프로그램을 역 분석 할 수 있습니다. 이런 Disassembler툴 중에 필자가 추천할만한 것은 역시 사람들이 가장 많이 애용하는 W32DASM 이나 IDA 혹은 PVDasm 입니다.
그 중에서도 PVDasm은 9x계열에서만 작동함이 별로이고 IDA는 초보자에겐 너무나도 복잡하게 느껴질 수도 있음으로 간단한 인터페이스를 가지고 있는 W32DASM을 추천 하겠습니다.
그럼 이 Disassembler 만으로 우리는 모든 RE작업을 할수 있을까요?
대답은 아니올시다 입니다. 물론 간단한 작업들이야 그냥 Disassembler만 가지고 할 수 있을 것입니다. 그러나 Disassembler 만으로는 불가능할 때가 있습니다.
이런 우리의 갈등을 해결할수 있도록 해주는 것이 Debugger입니다.
원래 Debugger는 프로그램의 Bug를 잡기 위해서 만들어진 프로그램 입니다. 그러나 우리는 이 Debugger를 Bug를 잡기 위해 사용하는 것이 아니라, 프로그램에 Break Point를 걸어 원하는 부분을 찾거나,
한 줄씩 Step by Step으로 실행해 가거나 값을 조금씩 바꿔 가며 Input 하여 OutPut 되는 값들을 보는 피드백의 과정을 위해 사용 합니다.
이런 Debugger 중에 추천을 하라면 역시 거의 모든 분들이 최고로 뽑는 SoftIce와 OllyDbg를 뽑겠습니다. SoftIce는 역시 기능적인 면에서는 좋으나 Dos 인터페이스는 초보자에게 거부감을 느끼게 할 수도 있습니다.
OllyDbg는 GUI 인터페이스를 가진 Win32 툴이기 때문에 저는 초보자 분들에게는 OllyDbg를 더 추천 합니다.
앞으로의 글들은 Disassembler와 Debugger 를 가지고 진행될 것입니다.
앞으로의 글들을 통해서 많은 RE기술을 터득하시기 바랍니다.