티스토리 뷰






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
링크
«   2024/10   »
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
글 보관함