리버스 엔지니어링(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들은 리버스 엔지니어링을 막기 위해서 암호화를 하거나 압축을 하여 소스코드를 볼수 없도록 하고 있습니다. 이러한 과정을 패킹이라고 한다. 소스코드를 보기 위해서는 이렇게 패킹된 코드를 풀어야 하는데 이러한 과정을 언패킹이라고 한다. |
'정보이야기 > 보안정보' 카테고리의 다른 글
무료 소스코드 난독화 서비스 코드잼(Codejam) (0) | 2012.06.22 |
---|---|
샌드박스(Sandbox) 개념 (5) | 2012.05.29 |