
Renaultに搭載されたNavCore 9.884(コードネーム beaumont)のリバースエンジニアリング
Renault搭載のNavCore 9.884のリバースエンジニアリング(コードネーム
beaumont)
テスト済み:Renault Laguna 3 GT Monaco GP 2012(ちなみに、素晴らしい車です)
flowchart TD
A[Carminat TomTom LIVE] --> B[Samsung S5P6440<br/>Linux 2.6.28 verrouillé]
B --> C[NAND interne]
B --> D[Carte SD externe]
C --> E[Verrouillé]
D --> F[Modifiable]
E -.->|UART| G[shell root théorique ?]
F -.->|fichiers SD| H[Personnalisations<br/>splash · menus · POI]
style A fill:#5B4FBE,color:#fff
style E fill:#A32D2D,color:#fff
style F fill:#3B6D11,color:#fff
style G fill:#EF9F27,color:#000
style H fill:#1D9E75,color:#fff
Carminat TomTom LIVE は、2009~2014年モデル(Laguna 3、Mégane 3、Scénic 3、Espace 4、Fluence、Latitude、Koleos…)に搭載されたルノーの車載ナビゲーションシステムです。非Live版のCarminat TomTomとは以下の点で異なります:
signedloop がMerkle木によってrootfsの完全性を検証するとされる(本解析では未確認、§3参照)本リポジトリは、NavCore 9.884 beaumontファームウェアの解析を文書化したもので、ファイルシステムのマッピング、NavCoreバイナリの静的解析、およびQEMU/straceによるランタイム解析を含みます。
使用した手法:
ttgo.bif、loopdir/ext3_loopback ファイルの読み取り)ttn バイナリの動的解析(システムコールのstrace、開かれるファイルの観察、ランタイム挙動)が可能となった車両の物理的なユニットには一切変更を加えていません。すべての解析は、SDカードのファイルのコピーおよびダウンロードしたファームウェアに対して実施しました。
ここに文書化された作業はすべて、個人所有のSDカード(解析のために車両から取り出したもの)と、TomTom CDNからダウンロードした公式ファームウェアに基づいて行われました。
📌 進化する文書: 本レポートは、この解析から得られた現時点の知見の状態を表しています。今後の発見、コミュニティからの貢献、実機での実証的検証に応じて、改善・修正・加筆される可能性があります。貢献、修正、フィードバックを歓迎します。
| フィールド | 値 |
|---|---|
| DeviceName | TomTom Carminat LIVE |
| ハードウェアコードネーム | beaumont (rev 11) |
| NavCoreバージョン | 9.884、ビルド 9.884.1609031 |
| 公式リリース | NFA2.8-RC06、2014年6月27日にDieppeでコンパイル |
| Linuxカーネル | 2.6.28.10-tt1574740 |
| ツールチェーン | gcc 4.3.3 TomTom CipherWizardry 2009q1_203-474426 |
| Libc | uClibc |
| Initシステム | Upstart(シェルスクリプト /sbin/init → exec /sbin/upstart 経由) |
これらの情報は、SDカードの loopdir/ext3_loopback イメージから抽出した ttgo.bif、および TomTom-Cfg/release.nfo ファイルに由来します。
# Extrait ttgo.bif
[TomTomGo]
DeviceName=TomTom Carminat LIVE
DeviceVersionHW=beaumont
ApplicationVersionVersionNumber=9884
ApplicationVersion=1609031.550
RamDiskVersion=20140626
BootLoaderVersion=839378
LinuxVersion=1574740
| コンポーネント | 識別情報 |
|---|---|
| SoC | Samsung S5P6440 (/etc/udev/rules.d/20_local-s5p6440.rules により確認済み) |
| CPU | ARM1176JZF-S · ARMv6 · リトルエンディアン · EABI |
| RAM | 静的解析では特定できず |
| 内部ストレージ | NAND フラッシュ · eMMC (/dev/mmcblk0) |
| ユーザー SD カード | /dev/mmcblk1 (アクセス可能なスロット) |
| 画面 | Samsung LCD LTA058B3L0F (DTB による) · 480×272 |
| フレームバッファ | /dev/fb0 · RGB16/24 |
| GPS | SiRF3 PRIMA · /dev/ttySAC2 |
| GSM/GPRS モデム | Wavecom WISMO218 · /dev/ttyS0 |
| RDS-TMC チューナー | BCM4750 · bcm4750_spi |
| Bluetooth | 内蔵 · hci_uart · HFP + PBAP のみ (A2DP 非対応) |
| タッチスクリーン | libts · /dev/input/event0 |
/etc/modules からの抜粋)unionfs · ppp_async · ppp_generic · slhc · hidp · hid · rfcomm
sco · hci_uart · l2cap · bluetooth · bcm4750_spi · vfat · msdos
fat · evdev
⚠️ モジュール
signedloopは、コミュニティ(gpspower.net)によって、rootfs.imgの整合性を検証していると報告されている。抽出された rootfs では確認されていない(/etc/modulesにも/lib/modules/2.6.28.10-tt1574740/にも存在しない)。要確認。
ファームウェアは TomTom の Akamai CDN から認証なしでダウンロード可能である:
curl -A "TomTom HOME/2.24.11.8" -O \
"http://download.tomtom.com/sweet/navcore/9.884.1609031_RC06.CAB-Dieppe.cab"
# SHA256 de référence
a4d32daae2cdd6bc23a0660285c4e32e3a098034731eb257172ed7aaef9052d5
利用可能な他のバージョン(HTTP 200 で確認済み):
| バージョン | URL |
|---|---|
| 9.844 | http://download.tomtom.com/sweet/navcore/9844.634510.Carminat_TomTom.cab |
| 9.845 RC10 | http://download.tomtom.com/sweet/navcore/9.845_1115399_RC10.CAB-Camiron-RC10.cab |
| 9.846 RC12 | http://download.tomtom.com/sweet/navcore/9.846_1165624_RC12.CAB-Camiron-RC12.cab |
| 9.847 RC14 | http://download.tomtom.com/sweet/navcore/9.847.1302316_RC14.CAB-Camiron-RC14.cab |
| 9.884 RC06 | http://download.tomtom.com/sweet/navcore/9.884.1609031_RC06.CAB-Dieppe.cab |
brew install cabextract # macOS
mkdir extracted && cabextract 9.884.1609031_RC06.CAB-Dieppe.cab -d extracted/
ls extracted/
# → splashw.bmp ttsystem TomTom-Cfg/release.nfo
ttsystemは ext2 イメージ(TTBL ではない)であり、非 Live 版とは異なります。
cd extracted/
mkdir rootfs && 7z x ttsystem -o rootfs/
# Le rootfs réel est dans userfs_partition.tar.gz
cd rootfs/
tar xzf userfs_partition.tar.gz
# Contenu :
# _zImage → Linux kernel ARM zImage
# rootfs.img → filesystem Linux complet (ext2, 67 MB)
# WISMO218_*.cla → firmwares modem
mkdir rootfs_mnt
# Sur Linux :
sudo mount -o loop rootfs.img rootfs_mnt/
# Sur macOS (lecture seule) :
7z x rootfs.img -o rootfs_mnt/
rootfs_mnt/
├── bin/
│ ├── ttn ← NavCore principal (11.7 MB, ELF ARM dynamique)
│ ├── telttn ← wrapper IPC vers ttn
│ ├── fakettn ← fallback si ttn absent
│ └── gprscomd ← daemon GPRS
├── etc/
│ ├── inittab
│ ├── fstab
│ ├── passwd ← root:Twu6z6F/voF0Q (DES crypt)
│ ├── init/jobs.d/ ← 20+ jobs Upstart
│ └── udev/
├── lib/
│ ├── libosal.so.0 ← TomTom OS Abstraction Layer
│ ├── libhal.so.0 ← Hardware Abstraction (pilote fb0)
│ ├── libttmp.so.0 ← TomTom Multimedia
│ └── LoquendoTTS/ ← moteur TTS Loquendo
├── sbin/
│ ├── init ← script shell → exec /sbin/upstart
│ ├── mount_sd_loopback
│ ├── mount_sd
│ ├── run_gprscomd
│ └── ttsystem_present
└── (sur partition userfs au runtime)
└── /mnt/sdcard/script/
├── TTTaskList.lua ← liste complète des TASK_* (300+)
└── liblua.so ← VM Lua chargée par ttn via dlopen
| パーティション | マウントポイント | タイプ | オプション |
|---|---|---|---|
mmcblk0p3 | /mnt/flash | ext3 | defaults,sync,noauto |
mmcblk0p5 | /content | ext3 | defaults,sync,noauto |
| (fstab 外) | /mnt/sdcard | ext3 | 正確なメカニズムは未検証 |
/mnt/sdcardは内部 NAND であり、外部 SD ではありません。これは TomTom の命名規則の名残で、"sdcard" が組み込みストレージを指していました。正確なマウントメカニズム(おそらくシェル/sbin/initより前段のブートローダー/initramfs によるもの)は本分析では検証されていません。これは/contentに対するmount_internalのremount,rwが事前のマウントを前提としていることから示唆されるものです。
SD は unionfs を介して /mnt/movi にマウントされ、設定は以下のとおりです:
# Script /sbin/mount_sd_loopback (simplifié)
sd_mount="/media/sdcard" # FAT32, RO
loop_mount="/media/loopback" # ext3_loopback, RW upper
union_mount="/mnt/movi" # unionfs des deux
mount -t vfat /dev/mmcblk1p1 $sd_mount \
-o rw,noatime,nodiratime,nosuid,nodev,noexec,sync
mount -o loop $sd_mount/loopdir/ext3_loopback $loop_mount \
-o rw,noexec,data=journal,commit=3600,async