【Ethernet】車載ネットワーク その6【BLFファイル⑥】

車載ネットワーク

バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-network-backnumber/

はじめに

Vector社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

BLF解析可否

フクさん
フクさん

とりあえず、いろいろ予想しながら調べてみた。

太郎くん
太郎くん

結局なんとかなりそうなの?

フクさん
フクさん

まぁ何とか目星がつき始めてきたって感じ。

太郎くん
太郎くん

ホント?!
じゃー早く解説を!

BLF解析結果(圧縮方式)

フクさん
フクさん

まず圧縮か暗号化されていると思わしきところはzlibによる圧縮だね。

太郎くん
太郎くん

zlibって?

フクさん
フクさん

恒例のWikipediaから情報引っ張ってきた。

zlibは、データの圧縮および伸張を行うためのフリーのライブラリである。可逆圧縮アルゴリズムのDeflate (RFC 1951)を実装している。ヘッダーやフッターなどのデータ形式はRFC 1950 (ZLIB Compressed Data Format Specification)として仕様化されている。また、これ以外のデータ形式としてRFC 1952 (GZIP File Format Specification)及び、RAW形式(ヘッダーやフッタなし)もサポートする。

Wikipediaより
太郎くん
太郎くん

ようわからんが、フリーの圧縮ライブラリってのは分かった。

太郎くん
太郎くん

でも、よくzlibが使われてるってわかったねぇ。

フクさん
フクさん

まぁバイナリ形式で圧縮するとなるとzlibくらいしか無いんだよねー。

太郎くん
太郎くん

いやー、Vector社独自方式ってパターンもあるんじゃない?

フクさん
フクさん

まぁあり得るけど、Vector社からしたら、別にここで変に頑張る理由も無くて、
フリーのライブラリで解決するなら、それ使うんじゃないかなーって予想したわけだ。

太郎くん
太郎くん

あーなるほど。確かにVector社からしたら圧縮という目的が達成できれば良いから、そこに独自性はいらないのか。

フクさん
フクさん

まぁラッキーと言えばラッキーではあったけどねー。

BLF解析結果(オブジェクト)

フクさん
フクさん

オブジェクトとしては、複数あって、どれもzlibで圧縮されているものだった。
つまり、全体をzlibで圧縮するわけでは無くリアルタイムに小分けに圧縮した情報をオブジェクトといして追記しているんだと思う。

太郎くん
太郎くん

確かに、CAN回線、Ethernet回線を収録することを考えると、
全体を取った後に圧縮よりも定期的に圧縮&追記の方が収録ファイルを作成し易いそうだもんね。

太郎くん
太郎くん

あと、オブジェクトの開始位置がイマイチ特定しにくかった件はどうなったの?

フクさん
フクさん

うーん、結局わからないんだけど、恐らくオブジェクトサイズ分skipして”LOBJ”という文字列を探してるんじゃないかなーって思ってる。

太郎くん
太郎くん

その感じだと根拠薄いって感じかー。

フクさん
フクさん

4byteアライメントの可能性もあったのだけど、必ずしも4byteで切り揃ってるわけでもなさそうだったんで、
消去法で”LOBJ”文字列探索ってことにした。

太郎くん
太郎くん

でも、それでうまくオブジェクトを切り出せるんだったらそれで良いんじゃん?

フクさん
フクさん

そうだねぇ。
これ以上煮詰めてもあまり案も出てこないし、調査はここらへんで切り上げよう。

今後の方針

太郎くん
太郎くん

で、次はどうするの?

フクさん
フクさん

とりあえず、オブジェクトを切り出してzlibで解凍したものを連結してみる。

太郎くん
太郎くん

とりあえずって・・・。
それでなんかわかる感じ?

フクさん
フクさん

予備実験で1オブジェクトだけzlibで解凍してみたんだけど、先頭に”LOBJ”のシグネチャが居たんだよね。

太郎くん
太郎くん

ほう。これは見込みありそう。

フクさん
フクさん

と言うわけでなにかしらプログラム組んでBLFを一括で解凍してしまおう。

まとめ

フクさん
フクさん

まとめだよ。

  • BLFの中身はzlibで圧縮されたもの。
  • オブジェクトは”LOBJ”というシグネチャを先頭に始まるルールのもよう。

バックナンバーはこちら。

コメント

タイトルとURLをコピーしました