バックナンバーはこちら。
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”というシグネチャを先頭に始まるルールのもよう。
バックナンバーはこちら。
コメント