バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-network-backnumber/
はじめに
Vector社BLFを解析してみた。
登場人物
博識フクロウのフクさん
![](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
![](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
BLF解析可否
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
とりあえず、いろいろ予想しながら調べてみた。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」10アップ.png)
結局なんとかなりそうなの?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
まぁ何とか目星がつき始めてきたって感じ。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
ホント?!
じゃー早く解説を!
BLF解析結果(圧縮方式)
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まず圧縮か暗号化されていると思わしきところはzlibによる圧縮だね。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
zlibって?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
恒例のWikipediaから情報引っ張ってきた。
zlibは、データの圧縮および伸張を行うためのフリーのライブラリである。可逆圧縮アルゴリズムのDeflate (RFC 1951)を実装している。ヘッダーやフッターなどのデータ形式はRFC 1950 (ZLIB Compressed Data Format Specification)として仕様化されている。また、これ以外のデータ形式としてRFC 1952 (GZIP File Format Specification)及び、RAW形式(ヘッダーやフッタなし)もサポートする。
Wikipediaより
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
ようわからんが、フリーの圧縮ライブラリってのは分かった。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
でも、よくzlibが使われてるってわかったねぇ。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/考え中フクロウ.png)
まぁバイナリ形式で圧縮するとなるとzlibくらいしか無いんだよねー。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
いやー、Vector社独自方式ってパターンもあるんじゃない?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まぁあり得るけど、Vector社からしたら、別にここで変に頑張る理由も無くて、
フリーのライブラリで解決するなら、それ使うんじゃないかなーって予想したわけだ。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者03アップ.png)
あーなるほど。確かにVector社からしたら圧縮という目的が達成できれば良いから、そこに独自性はいらないのか。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
まぁラッキーと言えばラッキーではあったけどねー。
BLF解析結果(オブジェクト)
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
オブジェクトとしては、複数あって、どれもzlibで圧縮されているものだった。
つまり、全体をzlibで圧縮するわけでは無くリアルタイムに小分けに圧縮した情報をオブジェクトといして追記しているんだと思う。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
確かに、CAN回線、Ethernet回線を収録することを考えると、
全体を取った後に圧縮よりも定期的に圧縮&追記の方が収録ファイルを作成し易いそうだもんね。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
あと、オブジェクトの開始位置がイマイチ特定しにくかった件はどうなったの?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/考え中フクロウ.png)
うーん、結局わからないんだけど、恐らくオブジェクトサイズ分skipして”LOBJ”という文字列を探してるんじゃないかなーって思ってる。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
その感じだと根拠薄いって感じかー。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
4byteアライメントの可能性もあったのだけど、必ずしも4byteで切り揃ってるわけでもなさそうだったんで、
消去法で”LOBJ”文字列探索ってことにした。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
でも、それでうまくオブジェクトを切り出せるんだったらそれで良いんじゃん?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/考え中フクロウ.png)
そうだねぇ。
これ以上煮詰めてもあまり案も出てこないし、調査はここらへんで切り上げよう。
今後の方針
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
で、次はどうするの?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
とりあえず、オブジェクトを切り出してzlibで解凍したものを連結してみる。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」10アップ.png)
とりあえずって・・・。
それでなんかわかる感じ?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
予備実験で1オブジェクトだけzlibで解凍してみたんだけど、先頭に”LOBJ”のシグネチャが居たんだよね。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
ほう。これは見込みありそう。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
と言うわけでなにかしらプログラム組んでBLFを一括で解凍してしまおう。
まとめ
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まとめだよ。
- BLFの中身はzlibで圧縮されたもの。
- オブジェクトは”LOBJ”というシグネチャを先頭に始まるルールのもよう。
バックナンバーはこちら。
コメント