안티 디버깅
IT위키
더 많은 작업
안티 디버깅(Anti-Debugging)은 프로그램이 실행 중에 디버거가 붙어 있는지 알아내 종료하거나 다르게 동작함으로써, 디버거를 이용한 동적 분석을 막거나 늦추는 기술이다.
- API·시스템 정보 확인 - 윈도우의 IsDebuggerPresent, CheckRemoteDebuggerPresent, PEB 의 BeingDebugged 플래그
- ptrace 선점 - 리눅스·안드로이드에서 프로세스가 자기 자신에게 ptrace 를 걸어 두면 다른 디버거가 붙지 못한다. /proc/self/status 의 TracerPid 로 붙어 있는 디버거를 확인한다
- 타이밍 검사 - 두 지점 사이의 실행 시간이 비정상적으로 길면(한 명령씩 실행 중이면) 디버깅으로 판단한다
- 예외·중단점 검사 - 소프트웨어 중단점(0xCC) 삽입 여부, 코드 체크섬 변화를 확인한다
- 안드로이드 - 디버그 가능 플래그(android:debuggable), JDWP 연결, 프리다(Frida) 같은 후킹 도구의 흔적을 검사한다
- 탐지 코드를 찾아 지우거나 후킹으로 결과를 바꾸면 우회된다. 난독화·무결성 점검과 함께 써야 효과가 있다