본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

안티 디버깅(Anti-Debugging)은 프로그램이 실행 중에 디버거가 붙어 있는지 알아내 종료하거나 다르게 동작함으로써, 디버거를 이용한 동적 분석을 막거나 늦추는 기술이다.

디버거를 쓰면 실행을 한 명령씩 멈추고 레지스터·메모리 값을 보거나 바꿀 수 있어, 인증 우회나 핵심 로직 분석이 쉬워진다. 안티 디버깅은 이것을 막는 동적 분석 방지 기법이다. 앱이나 게임의 위·변조 방지, 라이선스 보호에 쓰이고, 악성코드도 분석가를 피하려고 같은 기법을 쓴다 → 악성코드 분석

  • API·시스템 정보 확인 - 윈도우의 IsDebuggerPresent, CheckRemoteDebuggerPresent, PEB 의 BeingDebugged 플래그
  • ptrace 선점 - 리눅스·안드로이드에서 프로세스가 자기 자신에게 ptrace 를 걸어 두면 다른 디버거가 붙지 못한다. /proc/self/status 의 TracerPid 로 붙어 있는 디버거를 확인한다
  • 타이밍 검사 - 두 지점 사이의 실행 시간이 비정상적으로 길면(한 명령씩 실행 중이면) 디버깅으로 판단한다
  • 예외·중단점 검사 - 소프트웨어 중단점(0xCC) 삽입 여부, 코드 체크섬 변화를 확인한다
  • 안드로이드 - 디버그 가능 플래그(android:debuggable), JDWP 연결, 프리다(Frida) 같은 후킹 도구의 흔적을 검사한다

모바일 앱 보호 기술과 구분

편집 원본 편집
기술 막는 것
난독화 디컴파일·디스어셈블한 코드를 읽기 어렵게 한다(정적 분석 방지)
무결성 점검(위변조 탐지) 앱 파일이 바뀌었는지 서명·해시로 확인해 리패키징된 앱을 막는다
안티 디버깅 실행 중 디버거로 분석·조작하는 것을 막는다(동적 분석 방지)
루팅 탐지 루팅된 단말에서 실행되지 않게 한다 → 안드로이드 루팅
  • apk 를 소스 코드로 쉽게 되돌리는 것을 막는 기술은 안티 디버깅이 아니라 난독화다
  • 탐지 코드를 찾아 지우거나 후킹으로 결과를 바꾸면 우회된다. 난독화·무결성 점검과 함께 써야 효과가 있다