CreepJS を解説
CreepJS は、研究者やアンチディテクトの開発者が最もよく使うフィンガープリンティングのテストです。合否は出さず、ブラウザが何を明かしているか、どこで値が矛盾しているか、そしてどれだけヘッドレスやステルスらしく見えるかを示す 3 つのパーセンテージを表示します。
Abraham Juliot によるオープンソースの研究プロジェクト. CreepJS を開く
CreepJS とは?
CreepJS は、Abraham Juliot によるオープンソースのフィンガープリンティング研究ページで、GitHub Pages でホストされています。WebGL やオーディオから、フォント、ワーカー、WebRTC まで非常に幅広いシグナルを収集し、セクションごとにハッシュ化するので、2 回の訪問の間にフィンガープリントのどの部分が変わったかを正確に確認できます。
際立っているのは、嘘(lies)を探す点です。つまり、JavaScript で書き換えられた値や、ページと Web Worker の間で一致しない値です。「Headless」セクションは、それを 3 つの数値にまとめています。オープンソースなので、各チェックの仕組みをそのまま読んで確認できます。
CreepJS のチェック項目
Headless(ヘッドレス)
3 つのパーセンテージです。ブラウザがどれだけヘッドレスに似ているか(「like headless」)、ヘッドレスの決定的な兆候がどれだけあるか(「headless」)、ステルス用パッチの兆候がどれだけあるか(「stealth」)。
Lies(嘘)
JavaScript で上書きされたブラウザの関数。ほとんどのステルスプラグインはこの方法で動いており、CreepJS はそこを捕まえます。
Workers(ワーカー)
Web Worker 内で読み取り、ページ側と比べる値:ユーザーエージェント、GPU、タイムゾーン、言語、コア数、メモリー。
描画
Canvas、WebGL、オーディオ、フォント、DOM rect の計測値。それぞれハッシュ化されます。
WebRTC、タイムゾーンなど
ネットワークの候補、タイムゾーンとロケール、画面、そのほか数十の小さなセクション。
CreepJS の結果の読み方
- % like headless
- ヘッドレスブラウザによく見られるものの、普通のブラウザにも現れる弱いシグナルです。ここが 0 でないのは普通です。
- % headless
- ヘッドレスブラウザや自動化されたブラウザの決定的な兆候です。注目すべきはこの数値です。
- % stealth
- 関数の上書きなど、ステルス用パッチの兆候です。JavaScript のステルスプラグインはここに現れます。
- FP ID と fuzzy hash
- フィンガープリント全体の識別子です。何かが変わるたびに変わるので、訪問同士を比べるためのもので、ブラウザを評価するためのものではありません。
実際のブラウザの結果
2026 年 9 月 20 日と 21 日に、オランダの家庭用光回線につないだ Windows 11 PC 1 台(NVIDIA RTX 3070)で、プロキシも VPN も使わずに計測しました。ブラウザは 3 つです:広告ブロッカーを入れ、人が手で操作する普段使いの Chrome 153、同じ本物の Chrome 153 を Playwright で操作したもの、そしてフィンガープリントのシードを指定して Playwright で操作した Clearcote 153。
| ブラウザ | CreepJS の判定 |
|---|---|
| 普段使いの Chrome 153(手動) | 19% like headless · 0% headless · 0% stealth |
| 本物の Chrome 153(Playwright) | 25% like headless · 33% headless · 0% stealth |
| Clearcote 153(Playwright + シード) | 25% like headless · 0% headless · 0% stealth |
自動化が表れたのは「headless」の数値でした。Playwright で操作した本物の Chrome は 33%、Clearcote と人が普段使っている Chrome は 0% です。Clearcote の stealth が 0% なのは想定どおりです。JavaScript で関数を上書きするのではなくエンジン内で値を変えているため、嘘の検出(lie detection)が見つけるものが何もないからです。
普通のブラウザでも出る結果
- 「like headless」が 0% ではないこと。人が普段使っている Chrome でも 19% でした。
.localで終わる WebRTC のホスト候補がリークと判定されること。これは Chrome の mDNS 保護がローカルアドレスを隠しているのであって、漏らしているのではありません。そのため Clearcote の監査ではこれを合格として扱います。
よくある質問
CreepJS の良い結果とは?
重要なのは headless 0% と stealth 0% です。「like headless」が 10〜20% 台なのは普通で、私たちのテストでは人が普段使っている Chrome でも 19% でした。
CreepJS のフィンガープリント ID が毎回違うのはなぜですか?
この ID は計測したすべての値のハッシュなので、フォントの追加からウィンドウサイズの違いまで、何かが変われば ID も変わります。2 回の訪問を比べるためのもので、スコアではありません。
CreepJS は puppeteer-extra-plugin-stealth を検知できますか?
CreepJS は JavaScript で上書きされた関数を捕まえるように作られており、このプラグインはまさにその方法で動いています。それが lies や stealth のパーセンテージに表れます。この方式がなぜ自ら正体を明かしてしまうのかは、ステルスプラグインとの比較をご覧ください。
CreepJS は Clearcote の監査と同じものですか?
いいえ。CreepJS は生の調査結果を見せる研究用のページです。Clearcote の監査は 294 項目の整合性チェックを実行し、結果を 1 つずつ解説します。両者には重なる部分もあれば、mDNS の WebRTC 候補の扱いなど、見解が分かれる箇所もいくつかあります。
すべてのチェックの解説を見たい方へ
Clearcote の監査は、開いたブラウザに対して 294 項目の整合性チェックを実行し、項目ごとに平易な英語の解説と修正方法を示します。無料、アカウント不要です。
関連記事