안티디버깅
안티디버깅 기술을 알아야 하는 이유
- 각종 안티 디버깅 기법들의 동작 원리를 파악한 후 회피하기 위해
- 안티 디버깅 기법을 공부하는 과정에서 저절로 고급 리버싱을 배울 수 있기 때문에
안티 디버깅 기법
안티 안티 디버깅 기법
- Anti-Anti-Debugging기법 : 안티 디버깅을 위한 덫을 피하는 방법
- 안티안티디버깅은 너무 길어서, ‘해제기법’ , ‘회피기법’이라는 용어를 사용한다.
안티 디버깅 분류
Static 기법 , Dynamic 기법 두가지로 분류
- Static : 디버깅 시작할 때 한번만 해제를 해주면 해결되는 기법.
- Dynamic : 디버깅을 진행하면서(해당 Anti기법을)만날 때마다 해결하는 기법
static Dynamic 난이도 Low, Medium High 구현원리 다양한 시스템 정보 활용 디버거의 동작 원리를 역이용 목적 디버거 탐지 내부 코드와 데이터를 숨김 해체 시점 디버깅 시작할 때 디버깅 도중 해체 획수 1회 수시 해체 방법 API Hooking, Debugger Plugin API Hooking, Debugger Plugin, Utilities
대표적 기법(static)
- PEB
- BeingDebugged(IsDebuggerPresent())
- Ldr
- Heap(Flag,Force Flags)
- NtGlobalFlag
- TEB
- StaticUnicodeString
- Using Native API
- NtQueryInfomationProcess()
- ProcessDebugPort(0x7)
- (CheckRemoteDebuggerPresent())
- ProcessDebugPbjectHandel(0x1E)
- ProcessDebugFlag(0x1F)
- NtQuerySystemInfomation()
- SystemKernelDebuggerInfomation(0x23)
- NtQueryInfomationProcess()
- Attack Debugger
- Detatch Debugger
- NtSetInfomationThread()
- ThreadHideFromDebugger(0x11)
- NtSetInfomationThread()
- BlockInput()
- Detatch Debugger
- OpenProcess
- SetDebugPrvilege
- TLS Callback Function
- Using Normal API
- Parent Process
- Window Name
- Process Name
- File Name
- Register
- Resource
- String in Process Vitual Memory
- Kernel Mode Driver
- System Environmnet
- Targeting
- OutputDebugString()
- Memory Break Point()
- Filename Format String
- ESI Value
- (Guard Page - Memory Break Point)
- PEB
대표적 기법(Dynamic)
- Using SEH
- Exceptions
- CloseHandle()
- Break Ponits
- INT3(CC)
- INT 3(CD 03)
- INT1(F1)
- INT 2D(CD 2D)
- Exceptions
- Timing Check
- RDTSC
- QueryPerfomanceCount()
- GetTickCount()
- timeGetTime()
- ftime()
- Single Step
- Trap Flag
- PUSHFD/POPFD
- INT 2D
- Trap Flag
- Patching Detection
- 0xCC Scanning
- Calc Checksum (Hash)
- Stack Segment Register
- Anti-Disassembly
- PE Image Switching
- Self-Execution
- Debug Blocker(Self-Debugging)
- Nanomite
- Obfuscated Code
- Code Permutation
- Encryption/Decryption
- Stolen Bytes
- API Redirection
- Guard Page
- Virtual Machine(자체구현)
Static 안티 디버깅
- Using SEH
- 디버거에 올리면 재대로 실행(Run)되지 않는다. 적용된 static기법을 해제하면, 그제서야 디버거에서도 제대로 실행 가능하다.
Dynamic 안티 디버깅
- 프로그램의 동작 원리를 이해하려면 디버거에서 트레싱(Tracing)하여 원본 프로그램의 코드와 데이터를 확인해야 한다. 문제는 Dynamic 기법이 트레이싱을 방해하여 원본 프로그램의 코드와 데이터를 확인할 수 없게 만드는 것이다.
->Trace는 한줄한줄 디버깅 하는 것을 의미
댓글 없음:
댓글 쓰기