CheckRemoteDebuggerPresent는 kernel32.dll에 존재하는 API로 안티디버깅에 사용된다.

OllyDbg로 kernel32.dll파일을 열고 ctrl+g로 CheckRemoteDebuggerPresent를 검색한다.

API호출 부분으로 이동하게 되며 JMP문을 통해 API의 동작이 있는 위치로 이동하게 된다.

JMP문을 더블클릭 하면 jump하는 주소가 뜨게 되고 해당 주소의 위치로 이동하면 동작을 볼 수 있다.

ctrl+g를 누르고 이동할 주소를 입력한다.

빨간 박스를 보면 CheckRemoteDebuggerPresent에서 NtQueryInformationProcess를 호출하는 걸 볼 수 있다. 호출 전 뒤에서 2번째 PUSH가 7인 것을 볼 수 있는데 이는 NtQueryInformationProcess호출시 두 번째 인자의 값은 7이 되는 것을 알 수 있다.

위 사진은 MS공식 문서에있는 NtQueryInformationProcess설명중 한 부분이고 인자 7을 사용하면 디버거의 포트 번호를 검색한다고 나와있는 것을 볼 수 있다.
정리하면 CheckRemoteDebuggerPresent는 NtQueryInformationProcess를 이용한 API임을 알 수 있다.
이를 통해 Debugger탐지가 가능하며 CheckRemoteDebuggerPresentAPI는 VMProtect프로그램에서 Debugger Detection옵션을 사용하면 사용되는 Anti-Debugging 기법이다.
감사합니다.