Slide 1

Slide 1 text

電子タバコ IQOSのReverse Engineering および macOSにおけるBLE Packetの解析手法 2026/03/27 Hikaru (@nonnil) [email protected] IQOS CLI

Slide 2

Slide 2 text

Agenda ● Profile ○ Daily Driver ● IQOSの主な機能 ○ IQOSアプリの問題点 ● ● 2

Slide 3

Slide 3 text

Profile Hikaru ● Age ○ 2002/06/07 23歳 ● 所属 ○ 慶應義塾大学環境情報学部 ○ 早應AI株式会社 シニアエンジニア ● Handle ○ nil, nonnil, John Paul, 0day.is, VVX Supp, B0b Supp, 炒炒, mel0n ● すき ○ お酒、たばこ、ポーカー、コンピュータ、セキュリティ 3 @nonnil @nilpotent_ @unittype

Slide 4

Slide 4 text

Daily Driver ● Linux Distribution ○ Fedora Workstation ● Browser ○ Orion Browser, Helium ● Text Editor ○ VSCode, Helix ● Lang ○ Rust, Go, Nim ● Terminal ○ Ghostty ● keyboard ○ HHKB Studio ● Keyboard layout ○ UK ● VPN ○ Mullvad 4

Slide 5

Slide 5 text

IQOSの主な機能 ● IQOS公式Webアプリで各種設定のカスタマイズが可能 ○ Webアプリと IQOSはBluetoothもしくは USB経由で接続 5

Slide 6

Slide 6 text

IQOSアプリの問題 ● Sessionのlifetimeが短い ○ そのため頻繁に Signinをする必要がある ● IQOSアカウントが必要 ○ アカウント作成にあたって身分証明書による年齢確認を問われるが、 オンラインだと認証プロセスが不安定でアカウントを作成できない事例が 多数観測される ↑ぼくはアカウント作成のために IQOS Shop横浜店まで行った ● 接続時のloadが長い ○ 設定をカスタムするまでに時間がかかりすぎる ● 当然Internet接続がないと使えない 6

Slide 7

Slide 7 text

IQOSを便利にして 喫煙体験を最大化したいな〜 7 Bluetoothはどのように通信しているのだろう?

Slide 8

Slide 8 text

BLE(Bluetooth Low Energy) Packet 解析の準備 (macOS篇) 事前準備 ● Mac ● Xcode 1. Apple Developerのダウンロードページから Additional Tools for Xcodeをダウンロードして Install時にPacket Loggerを選択 2. Apple DeveloperのProfiles and Logsから該当するデバイスの Profileをダウンロード 3. System Settings.appの”VPNとデバイス管理 ”でProfileをInstall 4. Packet Loggerを起動 8 簡単だね

Slide 9

Slide 9 text

BLEの通信方法 9 Central(Client) Peripheral(Server) ここにおるよー Advertise どこにいる? Scan Connect ● 接続を開始する側 ● データ要求(Read, Write, Subscribe)を送る ● 接続を待ち受ける側 ● データ(Service / Characteristic)を提供する

Slide 10

Slide 10 text

BLEのデータ 10 Service ● 機能単位のグループ ● 複数のCharacteristicをまとめる Characteristic ● 実際のデータを持つ最小単位 ● Value + Propertiesなどで構成される Connect/PairingしたあとにCentralはこれらを PeripheralからDiscoverする ServiceとCharacteristicはUUIDで識別される

Slide 11

Slide 11 text

BLEにおけるデータアクセス 11 CharacteristicにRequestを送ることで実現 Requestの種類 ● Read(値の取得) ● Write(値の更新、応答あり) ○ Write Without Response(応答なし) ● Notify(非同期通知、ACKなし) ● Indicate(非同期通知、ACKあり)

Slide 12

Slide 12 text

Bluetooth Protocol Stack GAP(Generic Access Profile) ● Advertise / Scan / Connectのrole管理 GATT(Generic Attribute Profile) ● Service / Characteristicベースのデータモデル定義 ● ATTを包含する ATT(Attribute Protocol) ● GATTの通信手法 (Read/Write/Notify) ● GATTに包含される 12

Slide 13

Slide 13 text

IQOSのデータを見ていくぞ〜 13

Slide 14

Slide 14 text

Characteristicの設計パターン 14 TX/RX Characteristic ● 1つまたは少数の Characteristicにコマンドや データを多重化 ● vendor-specific実装でよく見 られる Discrete Characteristic ● 1 Characteristic = 1機能 ● Bluetooth SIG標準Profileでよく見られる

Slide 15

Slide 15 text

IQOS: TX/RX Characteristic 15

Slide 16

Slide 16 text

LIXIL Ohea Lock(おへやろっく ): Discrete Characteristic 16

Slide 17

Slide 17 text

IQOSへどのように書き込みを行うか 17 Offset 0 1 2 3 4 5 6 7 8 Hex 0x00 0xC0 0x46 0x23 0x64 0x00 0x00 0x00 0x4F Padding Padding Padding Checksum フレーム 開始固定値 Target Sub Cmd ID 輝度値 Cmd ID C0: Stick C9: Holder 64: 100% 1E: 30% Char ID: e16c6e20-b041-11e4-a4c3-0002a5d5c51b

Slide 18

Slide 18 text

IQOS CLI 18 ● IQOSアプリの機能をほとんどSupport ● PacketのOverheadがないため高速 ● Telemetry dataを閲覧可能 ● Find My IQOSが有効

Slide 19

Slide 19 text

スターください! 19 ● Firmware updateに対応させたい ● USB接続のSupport ○ IQOSからBluetooth廃止の予兆を感じてる ● IQOSのFirmwareをReverse Engineeringしたい IQOS CLI https://github.com/V-VX/iqos_cli

Slide 20

Slide 20 text

20