ターニングポイントさん!?

ブラウザゲーからデータを引っこ抜く論

ブラウザで遊ぶことができるゲームがある。Webで遊べているということは、データがブラウザに落ちてきているということだ。

だから、うまくやればデータを抜き取って保存することもできよう。

◆2022/2/7追記

各個別のゲームについて質問がある場合、以下のページにコメントをすること。以前までこの記事につけられていたコメントは集約した形にして削除した。

◆データ抜けないやつ

映像だけがブラウザに連携されているやつ。「クラウド版」とか書かれていたらあやしげ。

つまり、サーバーで描画された映像をこっちのモニタに移しているだけなので、その画面を録画することしかできない。ゲームのリソースをぶっこぬくことはできない。

◆超面倒くさいやつ

データが暗号化、エンコードされている場合。暗号化されていると、そのままじゃ読めなくなる。暗号化されたデータは復号という操作をすれば内容を確認できるようになる。

その復号するためのカギとなる情報もブラウザには落ちてきているわけだが、それを探すのは結構に骨の折れる作業だな。無理ではないけど。

◆抜き取る方法の考え方

▼Flash

昔よくあったやつ。これはゲームごと抜き取ることができる。
商用のFlashゲーは、リソースを持っているサーバーと通信する場合はありけれけども、普通のエロフラなら素材ごとまるまる抜ける。

swfを抽出してやればいい。そのswfの内容を読み取るソフトウェアもある。今後なくなるから深くは説明しない。

Flash Video Downloader

Web上から消えていた場合、Wayback Machineを掘れ。URLがわからないなら無理だけど。

メモ:https://stackoverflow.com/questions/18190229/flash-audio-recorder-with-realtime-mp3-encoding

メモ:ファイルシグネチャ検索https://filesignatures.net/index.php

▼HTML

まず、ChromeだのFireFoxだののブラウザを使用されていることと思うが、「開発者ツール」というものの存在を知らねばならん。

「F12」を押すと開発者ツールが出てくる。はず。ググれ。

開発者ツールにはタブがある。重要なのは「Elements」「Sources」「Network」だな。

・Element

Elementsでは、ブラウザに諸々を描画するための要素、エレメントを確認することができる。開発者ツールを開かずとも、画面を右クリックして「検証」的なメニューをクリックすれば開けたりもする。

一番簡単なパターンでは単に画像を右クリして保存できるのだが、直でアクセスできることも少ない。だから開発者ツールが必要になる。

Elementタブでは、階層構造になっているそれぞれの要素を確認することができる。「▶」をみつけてクリックすると、開いたりする。要素にマウスカーソルを乗せると、ブラウザ上で対応する要素が青く網掛けされる。それを参考にしながら辿れ。

ちょっと難しい話になるが、探すコツとしては「img」とか「image」とか「picture」という要素(タグ)を探すか、「background」とか「background-image」というCSSプロパティを持つ要素を探せ。

見つからないこともあるからその時は諦めろ。

・Network

通信の内容を確認できる。画像を通信したらその内容が確認できるわけだ。

「XHR」「JS」「CSS」「Img」「Media」だの、通信の種類が選べると思う。画像が欲しかったら「Img」だな。音声が欲しかったら「Media」。

んで、Imgで画像が落ちてこないことがある。これはスクリプトとかElementに直接画像データが埋め込まれているパターンだ。探せるけど、ほどほどで諦めたりしろ。

「Clear」のボタンがあるはずだから、通信内容をいったん消したくなったらうまく使え。

また、Networkで落ちてきたデータの行をダブルクリックすると別タブで開いたりDownloadフォルダに落とすことができる。

・Souces

ソース。フォルダ階層が表示されるから、死ぬ気で辿れ。

▼補足:HTML

Chromeには「プラグイン(extension)」という外部ツールを導入する仕組みがある。ElementとかNetworkを掘るのがだるい人は、その辺のキーワードで「chrome plugin xxx」みたいな感じでプラグインの検索をかけてみろ。いい感じのツールもあるかもしれない。

抽出は英語で「Extract」です。あとは単純に「download」「downloader」とか「Export」とかかなぁ。

▼Unity

AssetBundleというものを手に入れればいい。これはF12でNetworkを監視してれば落ちてくるのがわかるはずだ。あるいは、Chromeのキャッシュを掘ればいい。ググれ。

・AssetBundleの見つけ方

NetworkでXHRをながめて、「assetbundle」的な文言を含んでいるやつを探せ。あるいは妙にデータサイズの大きいデータ。Chromeの開発者ツールだと検索窓があるから「asset」とか入力してみてもいいだろう。

たとえば「.dmm」という拡張子であっても、ファイル内容のプレビューに「UnityFS」という記述があったらそれはAssetBundleです。

・AssetBundleの開き方

AssetStudioというソフトウェアを使う。ダウンロードは以下から。

Releases
⇒本家はアーカイブされてるので、メンテされてるaelurum/AssetStudioというフォークを使ってもよい。

※とりあえず一番新しいやつ使えばいいと思うけど「Pre-release」とかのバッヂが付いているものはちょっと動作が不安定かもね。

・AssetStudio

  • 「AssetStudioGUI.exe」を起動して
  • 「File」→「Load File」で落としてきたAssetBundleを読み込んで
  • 「Asset List」タブでお目当てのエロ画像を探す。

・Asset List

  • テーブル上部の「Type」をクリックすると、リソースの種類で並べることができる。
  • クリックでAssetを選択できるんだが、Shift + Clickでまとめて選択できる。Ctrl + Clickでもいいよ。
  • 選択したAssetは、右クリックで「Export selected assets」する。

▼Unity WebGL

コメントで聞かれたやつ。

例えば

https://osawariheaven.sakura.ne.jp/home/p05/

のようなゲーム本体をローカルにて起動するにはまた違う方法をとる必要があるのでしょうか。

Chromeでローカル実行できるように落としてみる。

ただし、あのコメントで聞かれたゲームだからこそ可能な方法かもしれない。Unityワカラナイデス。

  • フォルダを作成。名前と場所は任意。
  • ゲーム遊べるページを開いて「Ctrl + S」を押してさっき作ったフォルダに保存。
  • ダウンロードされてきたhtmlファイルの名前を「index.html」に変更。
    • フォルダのルートにあるhtmlファイルだけをリネームする。
  • フォルダに生成されてるはずの「なんちゃら_files」を開き「Build」ってフォルダを作る。
  • ゲーム遊べるページにてF12を押して「ネットワーク」タブを開く。
  • ネットワークタブ内の検索窓に「build」って入力して、「Build.json」とか「Build.wasm.framework.unityweb」とか「Build.wasm.code.unityweb」とか「Build.data.unityweb」とかをさっき作った「Build」フォルダに保存する。
    • 対象の行をダブルクリックすればダウンロードできるはず。jsonファイルだけタブが開かれてくるから、その開かれたページで「Ctrl + S」すればいい。
  • Chromeで「Web Server for Chrome」って検索して出てきた拡張機能をインストールする。
  • chrome://apps」をChromeで開き「Web Server for Chrome」を実行。
  • 「CHOOSE FOLDER」ボタンを押して初めに作ったフォルダを開く。
  • (検証のため、ネットワークを切る)
  • 「Web Server URL(s)」に表示されているURLを開く。
  • 実行される。
  • 嬉しい。

・何が起こったのか

  • Chromeに限らず「Ctrl + S」でページを保存できるし、そこから落ちてきたhtmlファイルをブラウザで開けばなんとなくページ開ける。
  • 件のサイトで試したところ「It seems your browser does not support running Unity WebGL content from file:// urls. Please upload it to an http server, or try a different browser.」とか言われたので、「file」スキームじゃなくて「http(s)」スキームでアレしたい。つまりローカルにサーバーを建てて実行したい。
  • 「Web Server for Chrome」でローカルにサーバーを建てることできる。ただし、ローカルサーバー建てるだけであれば必ずしもChromeは要らない。VS Codeの拡張機能とかでもいけるな。コマンドで実行できたりもするけどPC汚れるんでちょっといやだ。ブラウザ汚れるほうがマシ。
  • Webサーバーってものは設定を変えない限り「index.html」という名前のファイルをまず参照しがちだから、開きたいhtmlファイルをリネームしてやればいい。あるいは「/元のファイル名.html」ってパスを指定して開くとか。
  • ページ開くことはできたが、ゲームの実行できてないので足りないファイルがある。F12でNetworkを眺めて通信失敗している(赤くなってる)行を見てみる。
  • 「Build/~」系のファイルがなんか怪しい気がするので、満たしてみる。
  • 動いた。

だからつまり、「index.html」ファイルを良い感じに自作すればいいと思う。ローカルに落とした各ゲームへのリンクを配置したら便利な感じになるよね。「Webサーバー建てて自動でブラウザ開く」ように工夫すれば、もっと手軽に実行することもできるでしょう。

▼動画

動画がそのまま落ちてくることもある。「.webm」とか。Networkに怪しいファイルがあったら、その行をとにかくダブルクリックしろ。バイナリのデータであってもヘッダーを見れば何のファイルか判ったりもするだろう。さっきの「UnityFS」とかな。

▼Live2D

試してねぇけど行けると思う。

「moc3」拡張子がついているファイルを引っこ抜くとかAssetBundleから抜き出すとかすれば「Cubism Viewer」というので見られそう。フリーで使える。

moc3ファイルだけじゃなくて、その周辺に転がっているmthだのjsonだのpngだのも一緒に扱わないとダメだろう。

ただ、「moc」っていう昔のLive2Dで使われてたファイルタイプもあるっぽくて、以前のバージョンのCubismが必要かもな。探せ。

◆例えば持っていないキャラクターの画像が欲しい

無理と思ったほうがいい。URLが予測不能にされていたり、URLが予測可能であってもURLパラメータとかリクエストヘッダーとかCookieに正しいトークン(あらかじめ決めた文字列みたいなもの)を詰めないとアクセスできないようになっているんじゃねぇかな大抵は。

◆補足:バイナリよみ

バイナリの読み方について最低限のことを書いておく。コメ欄で質問来ていた話をベースに。

▼バイナリとは?

ググれ…!と言いたいけどそういう話じゃないと思うので説明する。

「バイナリ」って言ってんのは、バイナリファイルのこと。この世にはテキストファイルバイナリファイルの2種類がある。バイナリファイルは「Networkタブで見たときにすっごい文字化けしとるやつ」です。語弊しかないけど。お前の欲しい画像、音声、動画はすべてバイナリファイルだろうな。jpgとかpngとかmp3とか。

▼マジックナンバー

なんか知らんがめっちゃ文字化けしてる故、バイナリファイルは可読でない。人間が読むようにできてないから読めないんだけど、実際のところ読めなくもない。

バイナリファイルには色んな種類がある。そして大抵の場合、そのファイルが何であるのかという自己紹介をしている箇所がある。それがマジックバイト。マジックバイトにはマジックナンバーが記されていて、そのバイナリが何であるのかということを読み取ることが出来たりもする。

たとえば「mp3が欲しいけどNetworkに落ちてきていない」時は、他のバイナリデータに埋まっている可能性がある。「mp3 wiki」とかでググってマジックナンバーを知る必要がある。

音声ファイルはmp3と限らんし、コメ欄の質問の例では「ogg」だったからそれは「OggS」というマジックナンバーで検索できる。16進で言えば「4f 67 67 53」ですね。それで少なくともデータの存在確認はできる。データが暗号化されていないってことがわかる。

▼文字も入ってるかも

バイナリとはいえ、読める文字が埋まっていることも多い。半角英数記号(ASCII)とかは読めがち。眺めてみてもいいかもね。

▼ダウンロードして読む

Networkタブでファイルをダブルクリックしてもダウンロードできない場合がある。そういうときはコマンドを叩けばいい。Linuxで言えばwgetを使え。Windowsでもできる。

Windowsでwgetする色々な方法

読む時はテキストエディタで読んでも良いんだけど、バイナリエディタ、あるいはバイナリビューワーというツールも存在している。定番どこだとStirlingだのBZだの。最近のツールは知らん。

Vector | バイナリファイル処理

バイナリファイルの指定位置から指定位置までを別のファイルに保存できる機能が必要だろうな。ダンプ(Dump)という文言があるか見ればわかる。

▼抽出

「binary [欲しいファイルの拡張子] exract」とか検索すれば怪しいプログラムが見つかるかもしれん。

軽くググったら「mediaextract」っていう怪しいソフトウェアを見つけたので、使い方を書いておく。

  • Releasesのページからzipを落とす。
  • 適当なフォルダに解凍。
  • 「build-xxx」みたいなフォルダが入ってるから、自分のPCにあったやつを選んで開く。Windowsの64bitなら「build-win64」
  • 抽出もとのバイナリファイルをexeにドラッグドロップする。
  • 色々出てくる。

対応しているフォーマットが多くてありがたいな。bmp、gif、jpeg、png、midi、mpeg、ogg、mp4、avi、wmvらへんだろうか。でもこれwmvほんとに出力できてんのかと思った。

▼分割されている場合

バイナリファイルが分割されていた場合は「copy」コマンドにでどうにかする。「/b」で「バイナリファイルだよ」みたいにオプションを指定して差し上げろ。

Windowsのコマンドでファイルを結合する

◆データを引っこ抜かせたくない時

Webに置くな。そもそもインターネットに公開するな。Webに乗せた時点でデータは引っこ抜かれるものだ。そこで抗っても無駄。金の無駄だし時間の無駄。意味ない。割り切れ。逆に考えるんだ。「データ抜かせちゃってもいいさ」と考えるんだ。元から抜けちゃう設計にすれば全てがすんなり通るんじゃないか?前提を疑え。

お前「リソースをダウンロードさせたくないんですが」

俺「じゃあインターネットに置くのは変です」

これ。最終的にはイタチごっこなんだよ。インターネットという道具の使い方に即していないわけだから。

◆以上

わかんなかったらコメントして。あと、Unreal Engineはわからん。多分なんとかできると思うんだけど。それとか、Wasmってので作られたゲームが今後登場すると思うんだけど、その辺もやり方違ってくるだろうから要勉強ですよね。

◆結論

Fanzaはサ終おおすぎ。

課金しろって?んん…断る…!サ終されるから…!

弁護

1を聞いて1を知るが1の意味を落とし込めてない

6件のコメント

  1. 匿名

    FANZA、nutakuで試してはいるけど高度なプログラミングとかの知識無いとほとんどが無理な印象。

    サ開してすぐのソシャゲで未実装のキャラ寝室フラゲしたり、コンシューマゲーのmod作れる猛者もいるけど、それで飯食ってるレベルで長けてるんだろうなと思える
    メガネさんもそうなんでしょうか?

    一般ユーザーが解析用途の自作ツールとか作れるようなレベルになるのにどれだけ時間と根気がいるのかって…。
    タイムイズマネー(課金)とは正に

    (そもそも違法やね(

    • メガネ

      一般ユーザーであっても「何が可能であるか」を理解し、かつ、熱意というか狂気があればフラゲでもMOD作るんでも可能だろうと思う。
      MODしか作れなかった人がゲーム作ったりもするし、何が技術習得の入り口になるかはその人次第。
      楽しいことであれば、かかる時間も気にならない。

      俺自身、オンラインゲームを壊すために色々やって勉強したことも多い。
      世の技術者は高度なプログラミングの知識を持ってないからセキュリティホールもありふれている。

  2. 匿名

    初めまして
    ここを読ませていただきとても興味がわいてやってみようと思いましたが難しい…
    G123系のブラウザゲーなども抜き取りは可能なんでしょうか?

    クイーンズブレイドアンリミテッドなんですができるのでしょうか?

    • メガネ

      知らん。
      そのゲームがどこにあるのか知らんし、そのゲームの何が欲しいのか知らん。
      何を試して何がどう難しいのか聞くのがいいんじゃないか?試してないって言うんなら試せばいい。
      あと個別のサービスについてのページがあるわけだから質問はそっちに書くのが良いと思う。

  3. 匿名

    ソシャゲが死ぬんだ
    ブラウザ版もあるんだ
    こいつを個人的にとっておきたい
    パソコン知識ねえや
    泣きながら通過した

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


Powered by WordPress & Theme by Anders Norén