리버스 엔지니어링(Reverse Engineering)은 완성된 제품을 분석하여 제품의 기본적인 설계 개념과 적용 기술을 파악하고 재현하는 것입니다. 설계 개념→개발 작업→제품화의 통상적인 추진 과정을 거꾸로 수행하는 학문입니다. 보통 소프트웨어 제품은 판매 시 소스는 제공하지 않으나 각종 도구를 활용하여 컴파일된 실행 파일과 동작 상태를 정밀 분석하면 그 프로그램의 내부 동작과 설계 개념을 어느 정도 추적할 수 있습니다.

이러한 정보를 이용하면 크랙, 즉 실행 파일을 수정하거나 프로그램의 동작을 변경할 수 있고, 또 유사한 동작의 복제 프로그램이나 보다 기능이 향상된 프로그램도 개발할 수 있습니다. 소프트웨어에 대한 역공학 자체는 위법 행위가 아니지만, 대부분의 제품이 이의 금지를 명문화하고 있어 이러한 수법으로 개발한 제품은 지적 재산권을 침해할 위험성이 있습니다. (네이버 지식사전)

개인적으로 조사한 PC환경에서 리버스 엔지니어링을 돕는 툴은 다음과 같습니다.

No Attack Tools Attack Type Description Reference
1 ShowString Binary Analysis 프로그램 내부 스트링 보여줌 http://jok3.tistory.com/
2 Resource Hacker Plus Binary Analysis 소프트웨어 리소스 편집 http://jkblog.tistory.com/
3 ResHacker Binary Analysis 소프트웨어 리소스 편집 http://honollulu.tistory.com/18
4 softICE Debugger    
5 TRW2000 Debugger    
6 Ollydbg Debugger, Disassembler 가장 범용으로 사용되는 툴   
7 IDA Pro Debugger, Disassembler    
8 VBDE Decompiler 비주얼베이직으로 만들어진 프로그램 분석 http://jkblog.tistory.com/
9 sothink SWF Decompiler Decompiler 플래시 디컴파일러  
10 Reflector Decompiler 닷넷 프로그램 디컴파일러  
11 DeDe Decompiler 델파이 디컴파일러  
12 JAD Decompiler 자바 디컴파일러  
13 W32dsm9b Disassembler   http://jkblog.tistory.com/
14 UltraEdit Hex Editor    
15 WinHex Hex Editor    
16 Filemon Monitoring    
17 Regmon Monitoring    
18 TcpView Monitoring    
19 Procexp Monitoring    
20 Process Hacker Monitoring   http://processhacker.sourceforge.net/
21 티서치 Patching 메모리 패치  
22 치트엔진 Patching 메모리 패치  
23 GMER Rootkit Detection    
24 IceSword Rootkit Detection    
25 Exeinfo PE Unpacker   http://jok3.tistory.com/
26 ImportREC Unpacker   http://jkblog.tistory.com/
27 Themida Unpacker Unpacker   http://jkblog.tistory.com/
28 UPX Unpacker    
29 Universal Extractor Unpacker    
30 VMUnpacker Unpacker    
31 PEiD Unpacker, Binary Analysis   http://jok3.tistory.com/


Attack Type에 대한 설명입니다.

No Attack Type Description
1 Binary Analysis 프로그램 바이너리를 분석한다.
2 Debugger 디버거(debugger)는 디버그를 돕는 도구이다. 디버거는 주로 원하는 코드에 중단점을 지정하여 프로그램 실행을 정지하고, 메모리에 저장된 값을 살펴보며, 실행을 재개하거나, 코드를 단계적으로 실행하는 등의 동작을 한다. 고급 디버거들은 메모리 충돌 감지, 메모리 누수 감지, 다중 스레드 관리 등의 기능도 지원한다.
3 Disassembler 어셈블리어를 기계어로 번역하는 것이 "어셈블러"(assembler)이며, 거꾸로 기계어를 어셈블리어로 바꾸는 것은 "디스어셈블러"(disassembler)이다.
4 Decompiler 실행코드에서 소스코드를 역으로 추출한다.
5 Hex Editor 헥사에디터는 기존의 일반 컴퓨터의 워드프로세서 및 편집기 소프트웨어에서 읽을 수 없는 이진 파일을 읽을 수 있는 프로그램을 통틀어서 말한다.
6 Monitoring 프로그램 상태를 감시한다.
7 Patching 프로그램 메모리 영역에 데이터를 덫붙(Patching)인다.
8 Rootkit Detection 해커들이 시스템을 해킹할 때 시스템 이용자가 해킹당하고 있음을 알지 못하도록 하기 위해 사용하는 도구(프로그램 등)를 말한다. 루트킷을 설치하는 목적은 해커들이 나중에 시스템에 접근할 때 들키지 않으려는 것이다. 즉, 해커들은 이 도구를 사용해서 컴퓨터의 제어권을 가로채고 자신들이 하는 일을 감출 수 있다.
9 Unpacker 일반적인 SW들은 리버스 엔지니어링을 막기 위해서 암호화를 하거나 압축을 하여 소스코드를 볼수 없도록 하고 있습니다. 이러한 과정을 패킹이라고 한다. 소스코드를 보기 위해서는 이렇게 패킹된 코드를 풀어야 하는데 이러한 과정을 언패킹이라고 한다.