[리버스 엔지니어링] 리버스 엔지니어링 툴 정리
류명운
·2017. 5. 2. 10:03
[리버스 엔지니어링] 리버스 엔지니어링 툴 정리
단순 반복적인 업무의 자동화 시스템 개발을 위해 배치(Batch)를 지나 이제는 리버스 엔지니어링(Reverse Engineering)의 단계까지 접하게 되었다.
리버스 엔지니어링(RE, Reverse Engineering)
"역공학(域工學)으로 장치 또는 시스템의 기술적인 원리를 그 구조분석을 통해 발견하는 과정"
내 상황에서 이해를 돕자면, 여러 리버스 엔지니어링 분야 중 소프트웨어에 제한하며 완성된 소프트웨어 프로그램(exe 등)을 조각내서 그 내부를 분석하는 것을 뜻 한다. 이러한 분석을 통해 엔지니어는 해당 프로그램에 대한 허가되지 않은 불법 복제를 할수도 있고, 불법 정품 인증, 시리얼 코드 생성, 키젠 및 크랙 생성 등 악의적인 행위를 할 수 있는 반면, 불법 악성코드에 대한 분석, 지원하지 않는 언어에 대한 자가 패치, 학술/학문적 연구 등 선의적인 목적에서도 사용될 수 있다.
대표적인 소프트웨어 리버스 엔지니어링의 도구로는 IDA Pro나 OllyDbg 등이 존재하며, 이러한 도구들은 어셈블리 언어들을 쉽게 분석 하는 기능과 해당 코드를 변형하는 기능을 기본적으로 제공한다.
이번 포스팅에서는 자세한 리버스 엔지니어링의 개념이나 기법은 다루지 않고(아직 공부가...안되서..) 소프트웨어 리버스 엔지니어링에 사용되는 다양한 도구들을 정리해보도록 하겠다.
리버스 엔지니어링의 행위는 목적 프로그램에 대한 공격으로 보며 이에 대한 여러 공격 종류가 존재하기 때문에 Attack Type 에 대해 먼저 알아보도록 하자.
No | Attack Types | Description |
1 | Binary Analysis | 프로그램의 바이너리 값을 분석하는 것을 뜻한다. |
2 | Debugger | 디버거(Debugger)는 디버그를 돕는 도구이며, 주로 원하는 코드의 중단점(break point)을 지정하여 프로그램의 실행을 정지한 해당 단계에서의 메모리에 저장된 값을 살펴보며 분석을 하는 것을 뜻한다. |
3 | Disassembler | 어셈블리어를 기계어로 번역하는 것이 '어셈블러(assembler)'라면, '디스어셈블러(disassembler)'란 거꾸로 기계어를 어셈블리어로 바꾸는 것을 뜻한다. |
4 | Decompiler | 컴파일(compiler) 된 실행코드에서 소스코드를 역으로 추출하는 것을 뜻한다. |
5 | Hex Editor | 이진(Binary) 파일을 읽을 수 있는 편집기를 뜻한다. |
6 | Monitoring | 프로그램 상태를 감시하는 것을 뜻한다. |
7 | Patching | 프로그램 메모리 영역에 데이터를 덫붙(Patching)이는 행위를 뜻한다. |
8 | Rootkit Detection | 해커들이 시스템을 해킹할 때 시스템 이용자가 해킹당하고 있음을 인지하지 못하도록 하는 도구를 뜻한다. |
9 | Unpacker | 리버스 엔지니어링을 막기 위해 소스코드를 분석 불가능하도록 암호화하거나 압축하는 것을 패킹(packing)이라 하는데 이를 푸는 과정을 뜻한다. |
이어서 리버스 엔지니어링 툴(도구)의 종류에 대해 알아보면 다음 표와 같다.
No |
Attack Tools |
Attack Type | Description | Downloads |
1 |
ShowString |
Binary Analysis | 프로그램 내부 스트링을 보여줌 | |
2 |
Resource Hacker Plus |
Binary Analysis | 소프트웨어 리소스 편집 | |
3 |
Windbg |
Debugger | 디버깅 툴 | https://developer.microsoft.com/en-us/windows/hardware/download-windbg |
4 |
Ollydbg |
Debugger, Disassembler |
가장 범용으로 사용되는 디버그, 디스어셈블러 툴 | http://www.ollydbg.de/version2.html |
5 |
VBDE |
Decompiler | 비주얼베이직으로 만들어진 프로그램 분석 | http://www.intel-assembler.it/portale/5/vbde-0.85-visual-basic-decompiler/vb-decompiler-tool.asp |
6 |
sothink SWF Decompiler |
Decompiler | 플래시 디컴파일러 | http://www.sothink.com/product/flashdecompiler/ |
7 |
Reflector |
Decompiler | 닷넷 프로그램 디컴파일러 | |
8 |
DeDe |
Decompiler | 델파이 디컴파일러 | https://tuts4you.com/download.php?view.1131 |
9 |
JAD |
Decompiler | 자바 디컴파일러 | http://www.javadecompilers.com/jad |
10 |
W32dsm9b |
Disassembler | 기계어를 어셈블리어로 번역 | |
11 |
WinHex |
Hex Editor | 이진 파일을 읽는 툴 | http://www.winhex.com/winhex/hex-editor.html |
12 |
Procexp |
Monitoring | 시스템 모니터링 툴 | |
13 |
T-Search |
Patching | 메모리 데이터를 덫붙이는 툴 | |
14 |
GMER |
Rootkit Detection | 시스템 접근 감지 못하게 하는 툴 | http://www.gmer.net/ |
15 |
Exeinfo PE |
Unpacker | 언패킹 툴 | http://exeinfo.atwebpages.com/ |
11 |
VMUnpacker |
Unpacker | 언패킹 툴 | |
'삶의 늪에 들어 가기 전 > 정리중(미정리)' 카테고리의 다른 글
AWS - RDS 스냅샷 다른 계정으로 공유(이전)하기 (0) | 2017.05.31 |
---|---|
[코딩규칙] (펌)자연스럽고 일관성 있게 자바스크립트 코딩하는 원칙 (0) | 2017.05.04 |
개발자 책상 꾸미기 (3) | 2017.04.24 |
자바 매크로 관련 (0) | 2017.03.17 |
[개발툴] 개발 시 사용하는 유틸들 (0) | 2017.03.01 |