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

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
AndroidAuto — 프로토콜 리버스 엔지니어링, TLS 상호 인증, H.264 비디오 프로젝션, 터치 입력 주입 및 USB AOA를 통한 센서 데이터 스트리밍을 갖춘 오픈소스 Android Auto 휴대폰 측 구현 | Kitploit
도구/GitHubGitHub/mretallack/androidauto
Android SecurityBluetooth SecurityReverse EngineeringWireless SecurityMobile SecurityPapers & ResearchLearning & Education
GitHubmretallack/androidauto

AndroidAuto

프로토콜 리버스 엔지니어링, TLS 상호 인증, H.264 비디오 프로젝션, 터치 입력 주입 및 USB AOA를 통한 센서 데이터 스트리밍을 갖춘 오픈소스 Android Auto 휴대폰 측 구현

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Open Android Auto

An open-source implementation of the Android Auto phone-side app. This app runs on your phone and projects to a car's head unit over USB, replacing Google's proprietary com.google.android.projection.gearhead APK.

⚠️ 작업 진행 중

이 프로젝트는 초기 개발 단계에 있습니다. 프로토콜 핸드셰이크와 비디오 투사는 실제 헤드 유닛에서 작동합니다. 휴대폰 화면이 연결 해제되기 전까지 수 초 동안 차량의 헤드 유닛에 성공적으로 표시됩니다(비디오 안정성이 개선 중입니다).

기능

프로토콜 및 연결

  • USB AOA 액세서리 모드 감지 및 연결
  • TLS 1.2 상호 인증(휴대폰을 서버로)
  • 버전 협상(프로토콜 v1.7)
  • 서비스 검색(요청/응답)
  • 대상 채널(비디오, 오디오, 입력, 센서)에서 채널 열기
  • Ping/pong 연결 유지(양방향)
  • 오디오 포커스 요청/응답 처리
  • 내비게이션 포커스 요청/응답 처리
  • 음성 세션 요청 처리
  • 정상 종료 처리
  • 우선순위 쓰기 큐(제어 메시지가 비디오보다 우선)
  • 오디오 전송 전에 오디오 포커스 승인 대기(HUIG당 500ms 타임아웃)
  • 블루투스 페어링 교환(BluetoothPairingRequest/Response)
  • AOAP 재초기화 없이 여러 USB 재연결 처리

비디오 투사

  • MediaCodec을 통한 H.264 인코딩(800x480 @ 30fps, Baseline 프로파일)
  • MediaProjection 화면 캡처(사용자 권한 대화상자 포함)
  • 비디오 채널 설정(SETUP → CONFIG → FOCUS → START 흐름)
  • 마이크로초 단위의 0 기반 타임스탬프
  • 키프레임 앞에 SPS/PPS 추가(Annex B 형식)
  • 흐름 제어(max_unacked 추적, 백프레셔)
  • 프레임 페이싱(일관된 33ms 간격)
  • 안정적인 장시간 비디오(현재 약 7초 후 연결 끊김)
  • 헤드 유닛의 서비스 검색을 통한 해상도 협상
  • 연결 품질에 따른 적응형 비트레이트

터치 입력

  • 입력 채널 열기 및 바인딩 요청
  • 터치 이벤트 파싱(단일 및 멀티 터치)
  • 키 이벤트 파싱(버튼, 미디어 키)
  • 좌표 매핑(헤드 유닛 → 휴대폰 해상도)
  • MotionEvent 생성을 포함한 TouchInjector
  • 터치 이벤트를 VirtualDisplay에 주입
  • Android 시스템에 키 이벤트 주입

오디오

  • 오디오 채널 열기 및 설정
  • 오디오 전송 전에 오디오 포커스 승인 대기(HUIG당 500ms 타임아웃)
  • 초기 연결 시 AUDIO_FOCUS RELEASE 전송, 재생 시 GAIN 전송
  • 휴대폰 오디오 캡처(MediaProjection AudioPlaybackCapture)
  • PCM/AAC 인코딩 및 헤드 유닛으로 스트리밍
  • 헤드 유닛의 마이크 입력(음성 명령)
  • 다중 오디오 채널(미디어, 시스템, 음성, 안내)
  • 채널 활성 유지를 위한 무음 오디오 스트리밍

센서

  • 센서 채널 열기
  • 센서 시작 요청/응답 처리
  • 야간 모드 데이터 파싱 및 전송
  • 주행 상태 데이터 파싱 및 전송
  • GPS 위치 전달
  • 나침반 방향
  • 차량 속도
  • RPM
  • 주행 거리계(총 주행 거리 + 트립 주행 거리)
  • 연료 잔량 및 주행 가능 거리
  • 주차 브레이크 상태
  • 기어 위치(P/R/N/D/1-10)
  • OBD-II 진단
  • 환경(온도, 기압, 비)
  • HVAC(목표/현재 온도)
  • 추측 항법
  • 승객 존재
  • 도어 상태(보닛, 트렁크, 각 도어)
  • 조명 상태(헤드라이트, 방향지시등, 비상등)
  • 타이어 압력
  • 가속도계(3축)
  • 자이로스코프(3축)
  • GPS 위성 데이터
  • 헤드 유닛 센서 요청에 선제적으로 응답

비디오(추가)

  • 헤드 유닛의 서비스 검색을 통한 해상도 협상
  • 연결 품질에 따른 적응형 비트레이트
  • 720p, 1080p, 1440p, 4K 해상도 지원
  • 세로 모드 해상도(720x1280, 1080x1920 등)
  • UI 구성 업데이트(테마, 인셋)

기타

  • 블루투스 페어링 조정(A2DP, HFP)
  • 계기판으로 내비게이션 턴바이턴 안내
  • 내비게이션 상태(회전 정보, 차선, 거리, 현재 위치)
  • 미디어 상태(현재 재생 정보)
  • 미디어 재생 메타데이터(트랙, 아티스트, 앨범)
  • 미디어 브라우저(헤드 유닛에서 휴대폰 미디어 라이브러리 탐색)
  • 전화 상태(통화 상태 알림)
  • 일반 알림(구독/구독 취소 시스템)
  • 벤더 확장
  • 무선 Android Auto(WiFi + Bluetooth 핸드오프)
  • 채널 닫기 알림
  • 차량 연결 기기 요청/응답
  • 사용자 전환 요청/응답
  • 배터리 상태 알림
  • 통화 가능 상태
  • 서비스 검색 업데이트(동적 채널 변경)
  • 입력 피드백(헤드 유닛으로 햅틱/시각적 피드백)
  • 마이크 요청/응답(헤드 유닛에서 음성 입력)
  • 오디오 언더플로 알림
  • 라디오 서비스(AM/FM/HD/DAB 튜닝, 프리셋, RDS)

⚠️ 면책 조항

사용에 따른 책임은 사용자 본인에게 있습니다. 이 소프트웨어는 어떠한 종류의 보증 없이 "있는 그대로" 제공됩니다.

  • 이 소프트웨어는 차량의 헤드 유닛에서 예기치 않은 동작을 유발할 수 있습니다
  • 이 소프트웨어는 휴대폰 또는 헤드 유닛을 손상시킬 수 있으며, 작성자는 어떠한 책임도 지지 않습니다
  • 운전 중에는 이 앱을 사용하지 마십시오
  • 차량을 운전하는 동안 이 앱을 조작하지 마십시오
  • 이 앱은 개발 및 테스트 목적으로만 제공됩니다
  • 휴대폰 앱을 조작하기 전에 항상 차량을 길가에 정차하십시오
  • 저자는 이 소프트웨어 사용으로 인한 사고, 부상 또는 손해에 대해 책임을 지지 않습니다

아키텍처```

USB Plug-in → MainActivity → ProjectionService ↓ UsbAoaTransport (USB AOA accessory mode) ↓ MessageFramer (16KB frame fragmentation) ↓ InBandTls (TLSv1.2 via SSLEngine) ↓ ProtocolEngine (AAP state machine) ↓ ┌───────────┼───────────┐ Video Input Audio (H.264) (touch/keys) (PCM)

## 알려진 버그

- **채널 할당이 순서를 가정함** — SERVICE_DISCOVERY_RESPONSE의 첫 번째 `av_channel`을 비디오로, 두 번째를 오디오로 할당합니다. 이는 차량 헤드 유닛(채널 1 = 비디오)에서는 작동하지만 openauto(채널 4 = 오디오, 비디오 아님)에서는 실패합니다. 수정: `av_channel` 내부의 `stream_type` 필드를 파싱하여 `VIDEO(3)`와 `AUDIO(1)`을 구분합니다.
- **비디오 안정성** — 장시간 스트리밍 후 헤드 유닛 USB 버퍼 오버플로로 인해 연결이 끊깁니다. 아래 테스트 결과를 참조하세요.
- **헤드 유닛의 중복 장치 표시** — 헤드 유닛의 스마트폰 페이지에는 두 가지 기능을 모두 가진 단일 항목 대신 앱이 두 개의 별도 항목(하나는 Android Auto, 하나는 Bluetooth)으로 표시됩니다. 이는 Android 12+가 실제 Bluetooth MAC 주소에 대한 액세스를 차단(`02:00:00:00:00:00` 반환)하기 때문입니다. 우회 방법: `adb shell "echo $(adb shell settings get secure bluetooth_address) > /sdcard/Android/data/org.openandroidauto/files/bt_address.txt"`를 통해 실제 주소를 구성 파일에 기록합니다. 사용자가 BT MAC을 수동으로 입력할 수 있는 UI 설정 화면이 필요합니다.
- **음성 비서 버튼 처리되지 않음** — 운전자가 헤드 유닛의 음성/비서 버튼을 누르면 VOICE_SESSION_REQUEST를 수신하고 음성 비서(Dicio 또는 시스템 기본값)를 실행하려 시도합니다. 그러나 실행된 비서는 아직 헤드 유닛 마이크에서 오디오를 받지 못합니다.

### 비디오 안정성 테스트 결과

테스트 패턴(컬러 바) 800x480, I-프레임 간격 1초:

| FPS | 비트레이트 | 프래그먼트 | 지속 시간 | 프레임 | 상태 |
|-----|---------|----------|----------|--------|--------|
| 30 | 2Mbps | No | ~3s | ~90 | ❌ 너무 빠름 |
| 15 | 2Mbps | No | ~33s | ~500 | ⚠️ 더 나음 |
| 10 | 2Mbps | No | ~93s | ~930 | ⚠️ 양호 |
| 30 | 2Mbps | Yes (2KB) | 5-25s | 150-750 | ⚠️ 변동 |
| 30 | 500Kbps | Yes (2KB) | ~54s | ~1691 | ⚠️ 더 나음 |
| 15 | 250Kbps | Yes (2KB) | ~67s+ | 1000+ | ⚠️ 양호 |
| 30 | 250Kbps | Yes (2KB), I=5s | ~20s | ~600 | ❌ 긴 I-프레임에서 더 나쁨 |
| 15 | 250Kbps | No | ~13s | ~200 | ❌ 여기서는 프래그먼테이션이 도움이 되었음 |

근본 원인: 지속적인 높은 처리량에서 헤드 유닛 USB 수신 버퍼가 오버플로됩니다. 데이터 전송률이 낮을수록 연결 시간이 길어집니다.

**확인된 최상의 구성:** 10fps, 2Mbps, 프래그먼테이션 없음 = 93초. 암호화 전 프래그먼트화 구현이 손상되어 있습니다(헤드 유닛이 재조립할 수 없음) — 추가 조사가 필요합니다.

## 빌드```bash
./gradlew assembleDebug

플랫폼 35가 포함된 Android SDK가 필요합니다.

테스트

단위 테스트```bash

./gradlew testDebugUnitTest

프로토콜, 프레이밍, TLS, 채널 로직, 비디오 상태 머신, 센서 처리 및 터치 입력을 다루는 113개의 유닛 및 통합 테스트.

### openauto(Docker)를 이용한 통합 테스트

openauto는 Android Auto 프로토콜 전체를 구현하는 서드파티 헤드 유닛 에뮬레이터입니다. 실제 차량 없이도 프로토콜 구현을 검증하는 데 사용합니다.

#### 사전 요구사항

- Docker 설치 및 실행 중
- ADB(USB 또는 무선)로 연결된 휴대폰
- 휴대폰에 앱 설치: `./gradlew assembleDebug && adb install -r app/build/outputs/apk/debug/app-debug.apk`

#### 1. openauto Docker 이미지 빌드 (1회)```bash
cd thirdparty/openauto
docker build -f Dockerfile.headless -t openauto-headless .

이것은 Debian 컨테이너에서 모든 종속성(Qt5, boost, protobuf, OpenSSL)과 함께 openauto를 빌드합니다. 첫 빌드에는 약 5분이 소요됩니다.

2. openauto 시작```bash

docker run --rm -p 5100:5000 -e QT_QPA_PLATFORM=offscreen
openauto-headless timeout 60 /src/build/bin/autoapp

openauto는 컨테이너 내부의 포트 5000에서 수신 대기하며, 호스트의 포트 5100에 매핑됩니다. 헤드리스 모드(디스플레이 필요 없음)로 실행됩니다.

#### 3. ADB 역방향 포트 포워딩 설정```bash
adb reverse tcp:5000 tcp:5100

이렇게 하면 휴대폰의 localhost:5000이 컴퓨터의 localhost:5100(openauto)으로 터널링됩니다. USB 액세서리가 발견되지 않으면 우리 앱은 TCP 클라이언트로 localhost:5000에 연결합니다.

4. 앱 시작```bash

adb shell am start -n org.openandroidauto/.MainActivity

앱은 다음을 수행합니다:
1. USB 액세서리를 찾지 못합니다
2. `localhost:5000`에 연결합니다(adb reverse를 통한 openauto)
3. 전체 프로토콜 핸드셰이크를 수행합니다(VERSION → TLS → AUTH → SERVICE_DISCOVERY)
4. 채널을 엽니다(비디오, 오디오, 입력, 센서)
5. 비디오 스트리밍을 시작합니다(테스트 패턴)

#### 5. openauto 로그에서 확인

openauto 출력에서 다음이 표시되어야 합니다:```
[OpenAuto] handleNewClient() - Handle WIFI Client Connection
[OpenAuto] [AndroidAutoEntity] Send Version Request.
[OpenAuto] [AndroidAutoEntity] onVersionResponse()
[OpenAuto] [AndroidAutoEntity] Beginning SSL handshake.
[OpenAuto] [AndroidAutoEntity] Handshake completed.
[OpenAuto] [AndroidAutoEntity] onServiceDiscoveryRequest()
[OpenAuto] [AndroidAutoEntity] onAudioFocusRequest()
[OpenAuto] [AudioMediaSinkService] onChannelOpenRequest()
[OpenAuto] [VideoMediaSinkService] onChannelOpenRequest() (if video focus granted)

6. 앱 로그 가져오기```bash

adb pull /sdcard/Android/data/org.openandroidauto/files/aa_log.txt cat aa_log.txt

로그 파일은 USB 전환 사이에도 휴대폰에 유지됩니다(실제 자동차 헤드 유닛으로 테스트할 때 유용합니다).
도구 다운로드