ZwSetInformationThread를 이용한 안티 디버깅
ZwSetInformationThread의 두 번째 인자에 0x11(ThreadHideFromDebugger)를 전달할 경우 해당 쓰레드와 연결 중인 디버거와의 해제(Dettach). 따라서 디버거는 어떠한 이벤트 통지도 받을 수 없게 됨. NtSetInformationThread는 ZwSetInformationThread 래퍼 함수이며, User-Level에서는 두 함수의 기능이 동일.
MSDN
lpClassName : 0x11(ThreadHideFromDebugger)
typedef enum _THREADINFOCLASS {
ThreadBasicInformation,
ThreadTimes,
ThreadPriority,
ThreadBasePriority,
ThreadAffinityMask,
ThreadImpersonationToken,
ThreadDescriptorTableEntry,
ThreadEnableAlignmentFaultFixup,
ThreadEventPair_Reusable,
ThreadQuerySetWin32StartAddress,
ThreadZeroTlsCell,
ThreadPerformanceCount,
ThreadAmILastThread,
ThreadIdealProcessor,
ThreadPriorityBoost,
ThreadSetTlsArrayAddress,
ThreadIsIoPending,
ThreadHideFromDebugger,
ThreadBreakOnTermination,
MaxThreadInfoClass
} THREADINFOCLASS;
소스 코드
안티 디버깅 우회 방법
1. ZwSetInformationThread 함수의 2번째 인자를 0으로 수정
2. 디버거의 안티디버깅 플러그인 이용(ex : OllyDbg의 OllyAdvanced Plug-In을 이용)
Reference
MSDN : https://msdn.microsoft.com/en-us/library/windows/hardware/ff567101(v=vs.85).aspx
'Reversing > Anti Debugging' 카테고리의 다른 글
[API 기반] OllyDbg Static String (0) | 2015.03.25 |
---|---|
[API 기반] ZwQueryInformationProcess, NtQueryInformationProcess (1) ProcessDebugPort (0) | 2015.03.25 |
[API 기반] OllyDbg OutputDebugString Bug (0) | 2015.03.25 |
[API 기반] OllyDbg Filename Format String (0) | 2015.03.25 |
[API 기반] REGISTRY(Regstry 관련 함수) (0) | 2015.03.25 |