バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-network-backnumber/
はじめに
zlib解凍ずみBLFをバイナリエディタで解析。
登場人物
博識フクロウのフクさん
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
zlib解凍ずみBLFをバイナリエディタで見てみる。
前回はテキストエディタでオブジェクトの配置状況を雰囲気で見たけど、
今回はバイナリエディタで追いかける。
で、実際のフレームはそこそこ後ろの方にあるって話だったね。
うん。
最初に出てくるのはCANフレームだね。
BLF内のCANフレーム
というわけで
まずはCANフレームがどのように埋まっているか見てみる。
DLCは8。
CANIDは0x111。
データは、
0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88
って感じで入っているようだ。
たしかにCANっぽい。
なんでここがCANって分かったの?
オブジェクトヘッダのmObjectTypeを見た・・・
と言いたいところなんだけど、
仕様書には具体的な数値は無かったんだよねー。
よって、ほぼ勘だ。
(すげーな。いやマジで。)
ちなみにCANフレームのmObjectTypeは0x56で、
適用した構成は仕様書内で記載されているVBLCANMessage2になる。
これはオブヘクトヘッダ内のオブジェクトサイズから予測した感じだね。
(すげーなー。と思う反面、こえーな。)
BLF内のEthernetフレーム
次はEthernetフレーム。
mFrameLengthが1514か。
となるとmFrameDataに埋まっているのが1514byteってことかな?
そうなるね。
ちなみにmObjectTypeは0x78で
仕様書内のVBLEthernetFrameExが該当すると思われる。
mFrameDataの先頭の方が
0x01 0x00 0x5E 0x00 …
は何なのかな?
あー、たぶんMACアドレス・・・。
なんだけど。
これの場合はたぶんマルチキャスト用のMACアドレスだな。
マルチキャスト用MACアドレス??
何それ?
普通のMACアドレスと違うってこと?
そうだねー。
そのうち説明するんで、
現時点では「マルチキャスト用MACアドレス」であって、
「NetworkInterfaceに割り付けられたMACアドレス」とは異なる。
って程度の認識でいてよ。
じゃー、それで覚えてく。
(これは伏線?)
次回の方針
とりあえず、これらの解析情報を元に、
zlib解凍済みのBLFを分解して、
CANフレームとEthernetフレームをテキストで出力する。
ってプログラムを組んでみるよ。
今回もPython?
そうだねー。
前回がPythonだったんで、ここで使用言語変えるってのあれだし、
LOBJのシグネチャの頭出しロジックとかは使いまわしたいしー。
よって、Python。
まぁ楽な方が良いよね。
まとめ
まとめだよ。
- zlib解凍済みBLFをバイナリエディタで覗いて各フレームを抽出。
- CANフレーム抽出。
- Ethernetフレームを抽出。
- mObjectTypeと仕様書上のオブジェクト構成はオブジェクトヘッダのサイズから雰囲気で特定。
- フレーム抽出&テキスト化のプログラミング言語はPythonを使用予定。
バックナンバーはこちら。
コメント