10세대 혼다 시빅 업데이트, AOSP 테스트 키로 서명
출처: [Hacker News](https://juniperspring. org/posts/honda-evil-valet/)
지 three 년 전, 나는 내 2021년 혼다 시빅의 헤드유닛을 이해하고 역공학(리버스 엔지니어링)하는 초기 작업을 발표했다.1
초기 반응은 매우 긍정적이었습니다. 프로젝트 업데이트를 제공하기 위해 글을 씁니다.
Keys to the Kingdom
가장 큰 진전은 업데이트 프로세스를 매핑하면서 이루어졌습니다.
혼다는 USB를 통해 헤드유닛을 업데이트할 수 있도록 지원합니다. 여러 개의 혼다 전용 검증 절차가 있지만, 궁극적으로 USB 드라이브에는 서명된 AOSP 업데이트 파일이 포함되어 있으며 Android 복구 환경을 통해 스테이징되고 적용됩니다.
좋은 소식입니다! 그들은 공개적으로 알려진 AOSP 테스트 키를 res/keys*에 남겨두었고, recovery 바이너리를 수정했음에도 불구하고 verify_file 서명 로직이 표준 AOSP와 동일합니다.
USB 드라이브를 올바르게 포맷하고 공개적으로 알려진 AOSP 테스트 키로 서명할 수 있다면, 헤드유닛에 원하는 것을 설치할 수 있으며, 일반 루트 액세스(즉, su와 setuid를 사용하지 않음) 없이도 가능합니다.
이것은 헤드유닛에 전원이 연결되어 있고 공격자가 최전방 USB 포트에 물리적 접근을 할 수 있는 한, 헤드유닛에서 업데이트 경로를 통해 임의 코드 실행을 수행할 수 있음을 의미합니다.
이것은 악마의 하녀 공격(maid attack)입니다. 호텔 방이 아니라 차 내부에서 물리적 접근이 필요하기 때문에 저는 이를 “악마의 발레” 공격이라고 부릅니다. 예를 들어, 기자가 호텔을 방문하고 valet에게 차를 맡긴다고 상상해 보세요.
발레 직원은 3글자 기관에서 일하는人で, USB를 통해 업데이트를 설치합니다. 차를 돌려받으면 기자는 헤드유닛이 수정된 줄을 모릅니다.
쿨한 취약점 이름을 원하기 때문에 저는 이를 “EvilValet”라고 부릅니다.
이 블로그 글은 기술적인 상세 설명을 목적으로 하지 않습니다. 가차리_details가 필요하시면 기술 문서를 참고하세요.2
저도 새로운 도구인 ota- builder3을 발표했습니다. 이 도구는 헤드유닛에서 받아들여질 업데이트 파일을 쉽게 준비할 수 있게 해줍니다.
처음 단계에서는 아직이지만, 이제 ota- builder를 사용해 su 바이너리를 setuid 로 설정하여 기기를 루팅하는 업데이트 파일을 만드는 것이 매우 쉽습니다.
출력 결과는 민감한 파일을 실제로 업로드하지 않고도 문서에 참조할 수 있는 명확한 디렉터리 구조를 따릅니다.
Building Tools
업데이트 프로세스를 넘어서 가장 유용한 작업은 apk- rebuilder5에 집중되었습니다. 이 도구는 한 가지 매우 중요한 임무를 가지고 있습니다: 인터넷에서 혼다 시빅 업데이트 파일을 가져와 reverse 엔지니어가 수동으로 해야 할 모든 작업을 자동화하는 깨끗한 출력 파일 트리를 생성합니다. 포함 내용은 다음과 같습니다:
- 리소스 해상화
- .smali 코드 재구성
- APK 파일 재패킹
- ramdisk 추출
- 그 외 추가 작업
이 또한 중요한 역할을 합니다. 실제 혼다 소스 코드를 공개할 수 없기 때문에 우리는 업데이트 파일을 호스팅하지 않는 함수(함수)를 제공하고, 혼다 .smali 코드와 이미지 자산 등을 출력합니다. resulting output은 민감한 파일 자체를 업로드하지 않고도 문서에 참조할 수 있는 명확한 디렉터리 구조를 따릅니다.
Outstanding Work - A Call for Contributors
아래와 같은 몇 가지 outstanding 항목들이 있으면 좋겠습니다.
Known Versions
업데이트 프로세스는 취약하고 버전 números에 크게 의존합니다. 이는 무단 코드 실행을 제한하지 않으며, 버전 números는 “스포핑”될 수 있습니다(기술 문서를 참고). 하지만 업데이트 파일을 만들기 위해서는 헤드유닛이 기대하는 버전을 알아야 합니다.
또한, 내 빌드와 맞지 않는 헤드유닛 소프트웨어 변경은 예상치 못한 동작과 복구 루프를 초래할 수 있습니다.
10세대 혼다 시빅을 운전하고 기술에 익숙하다면, 레포의 “Known Versions, Display Audio Software” 섹션에 기여해 주세요.6
특히 용감해지고 싶다면 ota- builder 코드를 읽고 업데이트를 플래시해 보세요. 하지만 자신의 위험을 감수해야 합니다; 헤드유닛이 제 것과 다르면 복구 루프에 갇혀 기기를 소프트브릭(소프트 브릭)할 수 있습니다.
Toolchain
저는 로컬 머신에 실험적/ 진행 중인 도구체인을 가지고 있습니다. 이 도구는 후보 .c 코드를 ARMv7로 컴파일하고, 원본 벤더 바이너스와 동일한 컴파일러 버전과 빌드 플래그를 사용합니다. 업데이트 프로세스를 이해하는 데 필수적이었습니다. Docker를 많이 사용합니다.
현재 반복은 혼잡하고 주로 제 워크플로우에 특화되어 있지만, 깨끗한 구현을 공개하고 싶습니다.
Custom Themes
앱-렌더러7을 vibe-coding하면서 조금 탐색해 보았습니다. 커스텀 테마는 Mitsubishi가 AOSP 프레임워크 포크에 포함되어 있어 배포하기 어려울 가능성이 높으며, 헤드유닛 앱은 하드코딩된 리소스 ID를 기대하도록 미니화되어 있습니다. 커스텀 테마를 배포하려면 벤더 프레임워크를 수동으로 정교하게 편집하고 자동 도구를 작성해야 할 가능성이 큽니다.
이 모든 것은 쉽지 않으며 probablemente는 노력이 justify되지 않을 것입니다. 하지만 기여자를 환영합니다.
Improve aidl- rebuilder
저는 .smali 파일을 분석하고 헤드유닛의 모든 AIDL 인터페이스를 생성/ 매핑하는 도구를 시작했습니다. 이 도구는 작동하지만 정확성에 대해 완전히 검토하지 못했습니다. 이를 통해 가상 속시계와 같은 커스텀 앱을 만들 수 있는 문이 열립니다. 기여자 환영.
Thoughts on Documentation and LLMs
저는 참고 문서에 더 큰 중점을 두기보다 도구 개발에 더 집중했습니다. 목표는 신뢰할 수 있는 결정적인 도구를 배포하여 헤드유닛 코드를 보다 소비하기 쉬운 형태로 매핑하는 것이며, 이를 통해 사람들은 LLMs를 활용해 구체적인 질문에 대한 답변을 얻을 수 있습니다.
이는 실제 헤드유닛 코드와 어긋날 수 있는 참고 문서를 유지할 필요성을 없애줍니다. 왜냐하면 헤드유닛 코드가 진실의 근원이기 때문입니다.
예를 들어, ADB를 통해 헤드유닛에 연결하는 방법 등을 설명하는 사용자 가이드는 여전히 유용합니다. 하지만 Java 코드가 자체로 LLM에 제공될 때, 그 코드가 어떻게 작동하는지 설명하는 문서는 유지 관리가 부담스럽습니다.
Wrapping up and Thanks
이 시점에서 저는 헤드유닛에 대한 조사 작업을 대부분 완료했습니다.
이 프로젝트는 무한히 계속할 수 있지만, 다른 프로젝트로 전환할 가능성이 높습니다.
그럼에도 불구하고 레포는 방치되지 않았습니다. PR은 언제나 환영합니다.
특별히 Tunas8을 위해 추억을 나누어 주셔서 감사하고, Hackaday9가 원본 작업을 소개해 주셔서 감사합니다.
앞으로 언제든지 만나요 🌱
Eric McDonald, E. (2023). [“Honda Reverse Engineering”](https://juniperspring. org/posts/honda-evil-valet/). Juniperspring. Retrieved June 13, 2026. ↩︎
McDonald, E. (n.d.). “Display Audio Update Files”. GitHub. Retrieved June 13, 2026. ↩︎
McDonald, E. (n.d.). “ota- builder”. GitHub. Retrieved June 13, 2026. ↩︎
felixlennart (September 22, 2022). “Install American firmware on European head unit”. 2016+ Honda Civic Forum (CivicX.com). Retrieved June 13, 2026. ↩︎
McDonald, E. (n.d.). “apk-rebuilder”. GitHub. Retrieved June 13, 2026. ↩︎
McDonald, E. (n.d.). “Known Versions, Display Audio Software”. GitHub. Retrieved June 13, 2026. ↩︎