CheckRemoteDebuggerPresent, 우회방법 (최신) CheckRemoteDebuggerPresent 안티디버깅 기법, 우회 방법 Remote라고 해서 꼭 원격의 디버거만을 의미하는 게 아니라, 디버거가 별도의 병렬 프로세스에 존재한다는 것을 나타낸다. 내부적으로 IsDebuggerPresent or NtQueryInformationProcess 함수를 사용하여 호출 프로세스가 디버거에서 실행 중인지 여부를 탐지한다. CheckRemoteDebuggerPresentSyntax HANDLE hProcess [in]: 확인하고싶은 프로세스의 핸들 PBOOL pbDebuggerPresent [in, out]: 디버깅 중이냐 아니냐 값 True or False 반환됨. [CheckRemoteDebuggerPresent 함수 내부] 내부에서 2번째 인자로 Proce.. IsDebuggerPresent, 우회 방법 안티리버싱 IsDebuggerPresent [IsDebuggerPresent]IsDebuggerPresent 내부를 들여다 보자꾸나.mov eax, dword ptr fs:[18h] //TEB.self를 eax에 (TEB주소 그대로 eax로)mov eax, dword ptr [eax+30h] //TEB.PEB를 eax에 (PEB 주소를 eax에)movzx eax, byte ptr [eax+2] //PEB.BeingDebugged (디버깅 중이라면 1, 아니라면 0)ret 요약 : PEB.BeingDebugged 값을 eax에 담고 리턴. [TEB]fs:[18h] == 현재 스레드 TEB 주소.[eax+30h] == TEB에서 PEB주소 획득. [PEB][eax+2] == PEB의 BeingDebugged.. 이전 1 다음