世界を動かす技術を、日本語で。

HNに表示: リバースエンジニアのためのブラウザを作っています

概要

  • AI時代 においても、AST変換やブラウザ指紋・アンチボット対策に情熱を注ぐ筆者の話
  • 手動での スクリプト解析 作業の非効率さを解決するための独自ツール開発記
  • JavaScriptフック やChrome DevTools Protocol(CDP)活用による自動化アプローチ
  • OOPIF(Out-of-Process IFrame) への対応や、アンチボットの検知回避の課題
  • 実際の 逆コンパイル作業 効率化と検出回避テクニックの紹介

逆コンパイラ向けブラウザの開発記

  • AI技術が進化 する中でも、AST変換・ブラウザ指紋・アンチボット回避に強い関心
  • これまでの 手動解析作業 (スクリプト抽出・デオブスク化)が非効率で課題
  • Webcrackやdeobfuscate.ioなどの 既存ツール ではエンドツーエンドでの効率化に限界
  • 万能ツール(スイスアーミーナイフ) 的なブラウザ開発を決意

MVP開発とJavaScriptフック

  • 最初のアイデアは ブラウザ拡張 での実装
  • 例: Array.prototype.push のフックで全呼び出しをロギング
    • オリジナル関数を保存し、ラッパーでログ+本来の動作維持
  • Chrome Devtoolsで 関数フックの挙動 を確認

Content Scriptの限界と回避策

  • Chromeの Content Script は独立した環境で動作し、ページ本体には影響しない制約
  • <script>タグを直接ページに挿入する案も検討
  • Chrome DevTools Protocol(CDP) の活用で根本解決を目指す

CDPによる早期スクリプト注入

  • Page.addScriptToEvaluateOnNewDocument でページスクリプトより先にフックを注入可能
  • Electron を使い、UI・IPC・デモアプリのPoCを迅速作成
  • 任意のグローバル関数やプロパティの 監視・偽装 が容易に

UI実装とCanvas Fingerprint対策

  • electron-browser-shell をベースにアドレスバー・タブ・サイドバーを追加
  • サイドバーで フックされた関数イベント をリアルタイム表示
  • Canvas API (toDataURL等)やWebGL、フォントプローブなどもフック
  • これらの情報を可視化し、必要に応じて キャンバスの再現 も可能

OOPIF(アウトオブプロセスiframe)問題

  • Cloudflare Turnstile等の OOPIF 内ではフックが機能しない課題
  • CDPのTarget.attachedToTarget イベントで新たなターゲット(iframe等)を検知
  • セッションIDを取得し、 iframe内部にもフックを注入 して解決

フック検知と検出回避

  • アンチボットは ランタイムパッチ検知 (例:Function#toString)で対策
  • フック関数のtoString結果やnameプロパティ等で 改変を見抜かれるリスク
  • toStringtoString.toString等を 偽装 しても新たな検知ベクトルが発生
  • パッチの脆弱性 とイタチごっこ状態

まとめ

  • 逆コンパイル・リバースエンジニアリング 効率化のための専用ブラウザ開発の実践例
  • CDP やElectron、関数フック技術の応用
  • アンチボット検出回避 の難しさと、常に進化する攻防の現状
  • 今後も 自動化・可視化・検知回避 の継続的な工夫が必要

Hackerたちの意見

すごく興味深い、ありがとう!フィンガープリンティングの部分について、JShelterブラウザ拡張機能(https://jshelter.org/)との違いを説明してもらえる?デモ動画でやったように、https://demo.fingerprint.com/playground で確認してみたんだけど(FirefoxでJShelterを使って)、フィンガープリンター検出レポートが出てきたよ。内容はこんな感じ:{ "fpd_evaluation_statistics": [ { "title": "Navigator.prototype.plugins", "type": "resource", "resource": "get", "group": "BrowserProperties", "weight": 0, "accesses": 0 }, { "title": "MediaDevices.prototype.enumerateDevices", "type": "resource", "resource": "call", "group": "BrowserProperties", "weight": 1, "accesses": 2 }, [...] } でも、実際にブラウザが何を生成したのかを表示する方法がないみたい。これが自分のブラウザを作る理由だったの?それとも、JShelterを拡張して同じことができるのかな?

おお、いいね!このプロジェクトは初めて見た!最初は拡張機能として試みたんだけど、ページのウィンドウ関数をオーバーライドできなかったんだ。どうやって実現したのか気になるな。(編集:chrome.scripting APIを見逃してた、顔を叩く)シェアしてくれてありがとう!:) ちなみに、カスタムブラウザのアプローチにはいくつかの利点があると思う(ステルス性とか、プロセス外のiframeで実行できるとか。後者は実際にテストしてないから間違ってるかも!)

私の仕事のほとんどは、主要なウェブサイトビルダー会社のコードをリバースエンジニアリングして、彼らのドキュメントにない機能を活用することなんだ。難しい仕事だけど、あなたのプロジェクトがあれば楽になるかも。これを役立てる人が他にもいると思うよ。

すごくクール、シェアしてくれてありがとう。これがOSSプロジェクトとして登場するのを見たいな。貢献したいと思う人が何人かいるから、もしそういうのを探しているなら教えてほしい。

resworb nwo ym detnaw syawla ev'i dna reenigne esrever a m'I

これはrot13じゃないよ。編集:あ、ちょっと時間かかった!

これは面白いけど、最近のフィンガープリンティングがどれだけ行われているかを見るとちょっと不安になるね。TikTokは気持ち悪いけど、彼らが一番悪いわけじゃないと思う。

これは本当に目を開かせる、すごく興味深いね。XprivacyLuaのような、Androidアプリからのさまざまな呼び出しやリクエストを「暴露」するプロジェクトを思い出したよ。素晴らしい仕事だね!

面白い調査だけど、プロジェクトがリバースエンジニアリングにどう役立つのか、ちょっとよくわからなかったな。主にボットチェックを回避するためのプロジェクトっぽい感じがする、ウェブスクレイピングとかAI自動化用に。

「toString理論」って、そのセクションにぴったりなタイトルだね。

クロミウムのフォークを維持したくない人は、PDBをダウンロードして、実行時にフックしてスプーフィングやコールログのダンプをすればいいよ。フック自体は、PE構造に自分のDLLを依存関係として追加するだけでOK。

でも、それってWindows専用のアプローチっぽいね。

このブログ大好き!まだ「リバースエンジニアリング・ティックトックのVM」のパート2を待ってるよ。