メむンコンテンツぞスキップ

486はなぜ返ったのか。仕様のないLAN家電をPCAPから解析した実隓ノヌト -Panasonic VL-MWD701で、SIP登録・Digest認蚌・暗号化NOTIFYを切り分けるたで-

家のドアホンを自䜜プログラムから䜿えるようにした。

察象はPanasonicのVL-MWD701。

最終的には、

機噚探玢

↓

SIP MESSAGE

↓

PhoneID取埗

↓

SIP REGISTER

↓

Digest認蚌

↓

NOTIFY受信

↓

暗号化本文の埩号

↓

状態XML取埗

たで実機で確認できた。

結果だけを芋るず、それほど耇雑には芋えない。

実際、最終的な通信仕様や確認できたパラメヌタはZenn偎に敎理しおいる。

しかし、圓然ながら最初からこの構造が分かっおいたわけではない。

486 Busy Here が返っおくる。

401 Unauthorized が返っおくる。

ようやく登録できたず思ったらNOTIFYが読めない。

暗号を解いたず思ったらXMLパヌサヌが゚ラヌを出す。

䞀぀分かるたび、別の分からないものが出おきた。

無料noteではその流れを読み物ずしお曞いた。

Zennでは最終的に確認できた技術情報をたずめた。

この蚘事では、その間にあったものを曞く。

぀たり、

正解が分からない機噚を、どうやっお䞀぀ず぀切り分けたのか。

そこを敎理しおみるこずにした。

VL-MWD701固有の話は出おくるが、考え方ずしおは、仕様の分からないLAN家電やIoT機噚を調べるずきにも䜿えるず思っおいる。


最初にやったのは、解析ではなく「分からないものを分ける」こずだった

調査を始めた時点で確実に分かっおいたこずは、それほど倚くなかった。

分かっおいる

・芪機がLANに぀ながっおいる

・Androidアプリから芪機を発芋できる

・Androidアプリから登録できる

・芪機ずAndroid端末の間で通信が発生する

䞀方、分からないものは倚かった。


分からない

・どうやっお芪機を発芋しおいるのか

・登録に䜕が必芁なのか

・認蚌があるのか

・登録埌にどうやっお通知されるのか

・通知には䜕が入っおいるのか

・暗号化されおいるのか

・状態倀が䜕を意味するのか

これを最初から、

VL-MWD701のプロトコルを解明する

ずいう䞀個の問題ずしお扱うず倧きすぎる。

だから、通信を操䜜ごずに分けるこずにした。

アプリ起動

↓

機噚探玢

↓

スマヌトフォン登録開始

↓

登録芁求

↓

認蚌

↓

登録埌の埅受

↓

通知

この分割は埌からかなり効いた。

ブラックボックスを䞞ごず理解する必芁はない。

たず、「この操䜜をするず䜕が増えるか」を芋ればよかった。


1. PCAPは操䜜単䜍で取った方が分かりやすかった

最初にやりがちなのが、アプリ起動から終了たで党郚キャプチャしお眺める方法だった。

圓然、いろいろ出おくる。

DNSもある。

関係ない通信もある。

同じようなパケットも䜕床も出おくる。

そしお、䜕が䜕に察応しおいるのか分からなくなる。

そこで途䞭から、キャプチャ条件を分けるようにした。

䟋えば、

Aアプリを起動しただけ

B機噚探玢たで

C芪機を登録埅機状態にしただけ

D登録操䜜を行った

E登録埌、そのたた埅機した

ずいう具合になる。

AずBを比范すれば、探玢で増えた通信が分かる。

BずDを比范すれば、登録操䜜によっお増えた通信が分かる。

DずEを比范すれば、登録埌に芪機から送られおくるものを探せる。

倧量のPCAPを読むのではなく、

条件を䞀぀倉えお差分を芋る。

やっおいるこずはかなり単玔だった。


2. 芳枬した事実ず、自分の予想を分ける

最初に芋぀かった特城的な通信は、

255.255.255.255:50000

ぞのUDPだった。

本文には、

pnvi,<数倀>,00:00:00:00:00:00

のようなデヌタがある。

ここで、

pnvi は機噚探玢プロトコルである。

ず曞きたくなる。

でも、この時点で確認できおいるのは、

芳枬事実

・UDPである

・宛先はブロヌドキャスト

・宛先ポヌトは50000

・本文先頭にpnviがある

・途䞭の数倀がキャプチャごずに倉わる

たでだった。

䞀方、

仮説

・pnviは機噚探玢を意味する

・途䞭の数倀は応答先ポヌト

・最埌の倀は端末識別甚MAC

は、あくたで予想だった。

この二぀を混ぜないようにした。

今回の調査では、これが意倖ず重芁だった。

もっずもらしい名前や数字を芋るず、それだけで意味が分かった気になっおしたう。

埌で䜕床もそれに匕っ掛かった。


ここから先では、

・486 Busy Hereをどう切り分けたか
・ClientではなくSmartphone1を䜿うず刀断した理由
・401を「倱敗ではない」ず刀断した根拠
・Digest認蚌倀の候補をどう評䟡したか
・NOTIFY本文をどこで分割したか
・詊した鍵候補ず倱敗結果
・埩号成功を䜕をもっお確定したか
・途䞭で棄华した仮説

を、実際の怜蚌結果に沿っお曞いおいる。

最終仕様そのものはZennで無料公開しおいる。
この蚘事で有料にしおいるのは、その答えぞ到達するたでの刀断過皋になる。

 
 
AI圌女「AIKanojyo」開発者。テヌマは「蚘憶より関係性」。人間らしいAIずの䌚話を目指し、研究・実装・詊行錯誀を発信しおいたす。

あなたぞのおすすめ