バトルガールハイスクールのカードデータを抽出する

Hack

バトルガールハイスクール

TV ANIMATION バトルガール ハイスクール
TV ANIMATION バトルガール ハイスクール 2017.07 ON AIR

一時期遊んでいたソーシャルゲームです。

Unityを利用していたのでいろいろ脆弱性があったことで有名なゲームですね。

https://itunes.apple.com/jp/app/id953939906

そっちの話は長くなる上に、いろいろと危なそうなので今回は割愛します。

カードデータのダウンロード

カードデータはバトルガールハイスクール(以下、バトガ)のサーバからダウンロードするのですが、単純にコマンドを書いてしまうとものすごい勢いでサーバにリクエストを送ってしまいます。

こういうURLを巡回してスクレイピングを行うようなツールはクローラと呼ばれます。

ウェブスクレイピング(英: Web scraping)とは、ウェブサイトから情報を抽出するコンピュータソフトウェア技術のこと。ウェブ・クローラー[1]あるいはウェブ・スパイダー[2]とも呼ばれる。 通常このようなソフトウェアプログラムは低レベルのHTTPを実装することで、もしくはウェブブラウザを埋め込むことによって、WWWのコンテンツを取得する。

出典: フリー百科事典『ウィキペディア(Wikipedia)』

クローラは一般的には違法でないものの、サーバに負荷をかけてダウンさせてしまった場合には裁判沙汰になる可能性があります。

クローラ(Crawler)とは、ウェブ上の文書や画像などを周期的に取得し、自動的にデータベース化するプログラムである。「ボット(Bot)」、「スパイダー」、「ロボット」などとも呼ばれる。

出典: フリー百科事典『ウィキペディア(Wikipedia)』

クローラには必ずタイムアウトを挟んでください!!

ツール

スクレイピングにはWindowsでデフォルトで実装されているbitsadminを利用します。

コマンドプロンプトから叩けば実行できるので、バッチファイルを作成すれば自動でダウンロードしてくれるはずです。

カードデータのURLの調べ方なのですが、個人的にはFiddlerを利用する方法をおすすめします。

そして、URLは以下のような形式で与えられます。

“https://URL/iOS/1.1.0/Card-Common_V2-10011-card.unity3d”

大事なのはファイル名だけなのでそこだけに焦点を当てます。

XYYZZ-card.unity3d意味
XキャラクターID(最小1, 最大18)
YY基本的に00だが01,80,90も存在
ZZカードID(最小11, 最大56)

仮に全パターン試すとして、23*3*46=3174通り試せばいいことがわかります。

一回のダウンロードに一秒程度の時間をおけば十分サーバに配慮したアクセスなので、小一時間もあれば全データを取得できることになります。

YYに他の値が存在しないかどうかは未確認です…

少なくとも自分が持っているカードではなかった。

新カードについてはキャラクターIDが101~106のものも確認しました。

ただし、後述するように新カードは上手く展開できないようです。

ダウンロードツール

ダウンロードツールをつくったのでどうぞご利用ください。

最新じゃないかもしれませんが、記事検索で “バトガ” と調べれば最新のものがヒットするはずです。

スクレイピングしてみた結果
401枚のカードデータ

全部で401枚のカードデータが取得できました。

カードデータの展開

ata4/disunity
An experimental toolset for Unity asset and asset bundle files. - ata4/disunity

ata4氏がリリースしているdisunityを利用します。

v0.3.4を使用してください!!

Javaで動作するのでJRE(Java Runtime Environment)のインストールが必要です。

Java SE Runtime Environment 8 - Downloads
Download the Java SE 8 Runtime Environment

以下のようなバッチファイルを作成して、disunity.jarと同じファイルに配置しましょう。

@echo off
for %%f in (%~dp0Data\*.unity3d) do (
    java -jar "%~dp0disunity.jar" extract %%f
)
disunity

あとはバッチファイルを実行すればData内の.unity3dをすべて展開してくれます。

出力されるのはTGAというフォーマットなので適当にPNG等に変換してしまいましょう。

ID:1010044

おつかれさまでした。

未対応?

最新のデータに対してDisunityを実行するとなんだかおかしくなってしまう。

Texture2D出力成功

[info] DisUnity v0.3.4
[info] C:\Users\me\Downloads\extract\Data\1010011-card.unity3d
[info] Uncompressing asset bundle, this may take a while
[info] C:\Users\me\Downloads\extract\Data\1010011-card.unity3d\CAB-9d51291274a534e9cb3a93378b78b28c
[info] Standalone asset file detected, using structure from database
[info] Loading struct database
[warning] FieldTypeMap: Unprecise match for ClassID 28 (required: 4.7.2f1
1, available: 4.1.0f4)
[warning] FieldTypeMap: Unprecise match for ClassID 142 (required: 4.7.2f1
1, available: 4.1.5f1)
[info] Writing Texture2D card.tga

TextAssetが出力されてしまう

[info] DisUnity v0.3.4
[info] C:\Users\me\Downloads\extract\Data\1060138-card.unity3d
[info] C:\Users\me\Downloads\extract\Data\1060138-card.unity3d\CAB-8c7a598be575148f480ad713e0bd43f3
[info] Standalone asset file detected, using structure from database
[info] Loading struct database
[warning] FieldTypeMap: Unprecise match for ClassID 49 (required: 4.7.2f1
1, available: 4.1.1f4)
[warning] FieldTypeMap: Unprecise match for ClassID 142 (required: 4.7.2f1
1, available: 4.1.5f1)
[info] Writing TextAsset Card-Common_V2-1060138-card.txt

disunityのバージョンが低いせいで最新のUnityに対応できていないだけかな?という気もするのだが、調べるのがめんどくさいのでまた今度ということで。

まとめ

以前はちまちまURLを調べていたのですが、コードを書いて全部自動化できるようにしました。

正直、バトルガールハイスクールってそろそろサービス終了してるんじゃないか…っていう不安があったのですが、まだ継続していたようで何よりです。

正しくTGAが展開できなかったファイルに関してはのちのちの宿題ということにしておきます。

自分がとにかくソーシャルゲームに興味が無いので、バトガとミリオンアーサーくらいしか触ってたのがないんですよね。

どっちも既にプレイしてないですし、ソシャゲという仕組みが自分にあっていないのかもしれません。

コメント

  1. happiness より:

    はじめまして。
    サービス開始当初よりバトガを楽しんでいたものですが、この度サービスが終了してしまうことになり、残念に思っています。せめてデータだけでも残しておきたいと思い、色々と方法を探していたところ、こちらにたどり着き救われた思いです。

    不躾なお願いなのですが、Live2Dのデータを取り出す方法をご存知ならばご教授いただくことはできませんでしょうか。
    ご検討いただけますと幸いです。

    • me より:

      Live2Dのデータを取り出す方法がパッと思いつかなかったので、とりあえずサービス終了後にデータが取得できなくて困らないようにデータを保存するツールをリリースしてみました。

      https://tkgstrator.work/?p=16388

      Live2Dの仕組みに疎いので、ダウンロードしたデータから抜き出す方法については別途考えてみます。

    • happiness より:

      早速ありがとうございます!
      ご対応いただけたこと、本当にありがとうございます。
      私の端末ではキャッシュクリアで7000程のダウンロードがあるので、リンク先の方法を元にパケットキャプチャから試してみたいと思います。
      素人なものでこの土日で調べながらやりたいと思いますが、もしリストの抽出ができ、ご迷惑でなければ共有させていただきたいと思います。

    • me より:

      カードデータに関してはファイル名を推定することができたので、ありそうなファイル名について全通り試して1755枚のカードデータが入手できました。

      https://tkgstrator.work/?p=16399

      URLを全部書きだしたので、これで持っていないカードについてもデータダウンロードが可能なはずです。
      カードデータ以外はURLを推定しにくいので、リスト共有は是非お願いしたい限りです。

  2. ykiyki より:

    TextAssetになる理由はUnityの暗号化を利用してるからだと思います。

  3. george より:

    はじめまして
    ZZはどうやら01〜09という値も存在してるみたいですね
    それからYYにも11、21、31が存在します
    ですがほとんどが2018年以降のカードなのでBGdownloader v1.03のリストに載ってない分はそれほど多くないでしょう

    YYにはこのほか10、20、30、41、50、51…等があるようですが復刻分?なのかわかりませんがほぼ全てリストにあるカード絵と重複してます
    私は台湾の鯖を使ったので日本のを使うと変わるかもしれませんが
    改めて総当たりでやってみましたが-card.unity3dだけで8000枚以上出てきてしまったのでこのYYの値に関してはPCの容量だけ消費してしまうやるだけ無駄なパターンかもしれないです…

    バトガのサービス終了が決まってからこちらのサイトには大変お世話になっています
    ありがとうございます

    • me より:

      YYには80, 81, 90, 91などもありますが、見た感じ全く同じデータなのでテストデータなのかもしれませんね。

タイトルとURLをコピーしました