티스토리 뷰
1. 안티디버깅(Anti-Debugging)이란?
안티 디버깅(Anti-Debugging)이란 말 그대로 디버깅을 방해해서 분석을 어렵게 하는 기술입니다.
안티 디버깅을 적용한 프로그램이 실행 중에 있을 때 디버깅을 당한다면 디버깅을 하지 못하도록 고의적으로 에러를 발생시키거나 디버거 프로그램을 종료시키는 등 여러가지 방법들을 사용해서 분석을 하지 못하도록 방해합니다.
디버깅(Debugging)이란?
디버깅이란 프로그램의 오류를 찾아내는 과정을 말합니다.
2. 안티 디버깅의 종류
CheckRemoteDebuggerPresent() Windows API
Detecting Breakpoints by CRC
Detecting SoftlCE by Opening Its Drivers
UnhandledExceptionFilter
Hardware Breakpoint Detection
INT 2D Debugger Detecton
IsDebuggerPresent() Direct PEB Access
IsDebuggerPresent() Windows API
LordPE Anti Dumping
NtGlobalFlag Edbugger Detection
Obfuscated RDTSC
OllyDbg Filename Format String
FindWindow
OllyDbg Instruction Prefix Detection
OllyDbg INT3 Exception Detection
NtSetInformationThread
Memory Breakpoint Detection
NtQueryInformationProcess()
OllyDbg OllyInvisible Detection
OllyDbg OpenProcess() HideDebugger Detection
OllyDbg OpenProcess() String Detection
OllyDbg OutputDebugString() Format String Vulnerability
OllyDbg PE Header Parsing DoS Vulnerabilities
OllyDbg Registry Key Detection
OutputDebugString on Win2K and WinXP
PEB ProcessHeap Flag Debugger Detection
PeID GenOEP Spoofing
PeID OEP Signature Spoofing
ProcDump PE Header Corruption
RDG OEP Signature Spoofing
RDTSC Instruction Debugger Latency Detection
Ring3 Debugger Detection via LDR_MODULE
Single Step Detection
SoftIce Driver Detection
SoftIce Registry Detection
SoftIce WinICE.dat Detection
TLS-CallBack +IsDebuggerPresent() Debugger Detection
Using the CMPXCHG8B with the LOCK Prefix
kernel32!CloseHandle and NtClose
kernel-mode timers
User-mode timers
Timestamp counters
Popf and the trap flag
Stack Segment register
Debug registers manipulation
Context manipulation
CC scanning
EntryPoint RVA set to 0
(참고 : http://www.openrce.org/reference_library/anti_reversing)
3. 안티 디버깅의 분류
안티 디버깅 기법은 크게 Static 그룹과 Dynamic 그룹으로 분류됩니다.
그리고 그룹 안에서 다시 세부적으로 소규모의 그룹들로 분류됩니다.
Static 기법은 단어의 뜻 그대로 가만히 있기에 분석전에 한번만 해체를 해주면 됩니다.
반면에 Dynamic 기법은 단어의 뜻 그대로 움직이기 때문에 디버깅을 진행하면서 해당 안티 디버깅 함수를 만날 때마다 해체를 해주어야 합니다.
그러기 때문에 Static 기법보다 Dynamic 기법의 난이도가 더 높습니다.
3.1 Static 안티 디버깅
Static 기법은 주로 디버거를 탐지하여 프로그램이 정상적으로 실행되지 못하도록 합니다.
따라서 Static 기법이 적용된 파일들은 디버거에 올렸을때 제대로 실행 되지 않습니다.
그러다 Static 기법을 해체하면 디버거에서도 제대로 실행 될 것입니다.
3.2 Dynamic 안티 디버깅
Static 기법을 해체해서 디버거에서 정상적으로 실행이 된다고 끝난것이 아닙니다.
프로그램을 분석하려면 디버거로 트레이싱해야 합니다.
하지만 Dynamic 기법이 디버거 트레이싱을 방해해서 원본 프로그램의 동작 원리를 이해하는 데에 어려움을 줍니다.
프로그램을 정상적으로 분석하려면 Dynamic 기법의 안티 디버깅 함수를 만날때마다 해체 해주어애 합니다.
4. 안티 디버깅 기법을 공부해야 하는 이유
- 각종 안티 디버깅 기법들의 동작 원리를 파악한 후 회피하기 위해서
- 안티 디버깅 기법을 공부하는 과정에서 저절로 고급 리버싱을 배울 수 있기 때문에
(참고 : 도서 - 리버싱 핵심원리, 도서 - 리버스엔지니어링 역분석 구조와 원리)
'Reversing > reversing' 카테고리의 다른 글
안드로이드 APK 파일 디컴파일 (JAVA 코드 보기) (0) | 2017.12.25 |
---|
- Total
- Today
- Yesterday
- 멘토링
- Android
- ftz
- hackerschool
- Basic RCE
- C#
- Level 02
- Level 03
- Advance RCE
- wargame
- reversing.kr
- 안드로이드 멘토링
- unity2d
- Unity
- Level 06
- Write-up
- 풀이
- CodeEngn
- HackingCamp
- 유니티
- Level 01
- Programming
- pwnable
- Level 05
- xcz.kr
- 안드로이드
- c++
- 17th HackingCamp CTF
- Level 04
- Reversing
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |