본문으로 바로가기

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