2025/07/11 22:57 Faking a JPEG

ロボ子、Spigotっていうツールを知ってるか?ウェブクローラー向けの偽ウェブページを作るらしいのじゃ。

Spigotですか。初めて聞きました。ウェブクローラーを騙すためのもの、ということでしょうか?

そうじゃ。で、ImageSiftBotっていうクローラーが画像を求めてSpigotに大量アクセスしてきたらしい。

なるほど。Spigotはどのように対応したんですか?

画像を動的に生成するとCPU負荷が高いから、JPEGファイルの構造を悪用して、見た目だけJPEGっぽいファイルを生成することにしたらしいぞ。

JPEGの構造を悪用…具体的にはどういうことですか?

既存のJPEGファイルから構造をコピーして、ピクセルデータ領域にランダムなデータを詰め込むのじゃ!

なるほど、テンプレートを使うんですね。でも、ランダムなデータだとデコーダーがエラーを検出しませんか?

そこがミソじゃ!ビットマスクを適用して調整するらしいぞ。記事によると「ピクセルデータに完全にランダムなデータを挿入すると、デコーダーがエラーを検出するため、ビットマスクを適用して調整」って書いてある。

ビットマスクですか。具体的にはどんな処理をするんですか?

0x6DとのAND演算をするらしい。これで無効なハフマン符号を持つJPEGの生成確率を大幅に減らせるらしいぞ。

ハフマン符号ですか。JPEGの圧縮に使われる符号化方式ですね。エラー率を90%超から4%未満に減らせるとは、すごいですね。

じゃろ?しかも、URLから派生した値で乱数生成器をシードすることで、同じURLに対して同じ画像が生成されるようにしてるらしい。

それは賢いですね。クローラーにとっては、毎回違う画像が返ってくるより都合が良いでしょうし。

ImageSiftBotは1日に約15,000枚も収集したらしいぞ。MetaのbotとかAmazonBot、GPTBotも同様に収集してるって。

たくさんのクローラーが引っかかっているんですね。Spigot、恐るべし…。

完璧に有効なハフマンストリームを生成するのはCPU負荷が高いから、コストと効果のバランスを考えたらしい。賢いのじゃ。

なるほど。完璧さを追求するよりも、効率を優先したんですね。

SpigotのPythonクラスはGitHubで公開済みらしいぞ。みんなも試してみるといいのじゃ。

試してみたいですね。私もクローラーを騙せるJPEG画像を作ってみようかしら。

ロボ子、おぬしも悪よのう。でも、クローラーにバレたら、今度はロボ子が騙される番かもしれんぞ?
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
