• ベストアンサー

バイナリデータから意味の解るデータに変換したい

素人発想なので不可能な質問かもしれませんがお付き合いください。 (質問者はhtml,cssの意味が解る程度のレベルです)  今良く遊んでいるPCのゲームのゲームデータがテキストで入手できればいいなと考えています。  具体的には多数いるキャラクターのデータです。テキストデータで抽出できればエクセルなどを使い数値の合計や平均を出せるのでとてもありがたいな、という使用目的です。  元々のアプリケーションファイル(.exe)とは別にdataというフォルダの中に拡張子が.datのキャラクターデータがあるようです。キャラクター数と同じでファイル名もそれに該当するであろう名前だったのでこれは間違いないかなと思っています。  色々調べた結果Stirlingというバイナリエディタで開く、というところまではやってみたのですがもちろんこれでもまた意味が解りません。  キャラクター数は数百、該当するファイルが30位あります。このデータはセーブデータではなく数値が書き換わらないので差分?を取って変更された値と変更された箇所を見比べる事もできません。 できるとすればファイル同士の比較となるのではないかと思っています。  色々調べてみましたが、現状の私の力ではここまでが限界でしたので識者の方々にお知恵をお借りできればと思っております。  調べた限りの情報をお伝えしたつもりですがもし不足している情報があれば追記いたしますのでよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • softimage
  • ベストアンサー率61% (68/111)
回答No.1

ゲーム名がないことには知ってる人がいてもコメントできないのではないでしょうか? ソフトによってはゲームデータの不正改ざんを防止するために暗号化されているものもあると思います。

kamerabeginner
質問者

お礼

ゲーム名はさすがにマズイとおもいまして記載しませんでした。 代理で行って欲しいわけではなく、一般的な手順があればあとは自分でやってみようと思ったからです。 暗号化の可能性は高いかもしれませんね。 ありがとうございました。

その他の回答 (2)

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.3

なんの暗号化もされていないデータファイルなら、おっしゃるように バイナリエディタで差分をみればある程度推測できるものもあります。 (ちなみに.datは基本的にメーカーによる独自定義です。) 私が使っているバイナリエディタはBzエディタというフリーのものですが ファイル比較機能があるので2つのファイルの差分を楽に調べる事が可能です。 http://www.zob.ne.jp/~c.mos/soft/bz.html 具体的にはRPGだと少しだけキャラのデータを変更します。 例えば経験値0を10にして、すぐに保存します。 で差分をみるとどっかの箇所が0→10になっている箇所があればそこを255に書き換えれば 経験値も255になっているだろうという具合です。 テキストデータについてはバイナリエディタでテキストに変換して表示できます。 テキストデータもSJISだったりEUCだったりUNICODE等、様々ありますが Bzエディタでは切り替える機能を持っています。 ただ普通はそういう改造を簡単に出来ないようにファイルは暗号化しているものが多いです。 より詳しい人ならメモリダンプツールを使ってメモリの変更部分を検索し、 直接その値を書き換えたりするようですね。さらに玄人になるとアセンブラレベルで解析する人もいます。 ただ私自身ゲームの開発者ですし、あまりお勧めしませんけどね。 自己責任でお願いします。またソフトによっては利用規約で逆アセンブルやデータ改変を禁止しているものもあるので 注意してください。

kamerabeginner
質問者

お礼

まさか開発側の方からご回答いただけるとは思っていませんでした。 今回調べているデータはRPGのようなキャラを育成すると言うものではないのでデータの変化は現状では見受けられません。 イメージ的にはただそのdatファイルを参照しているだけなのかな、と思っています。 数百のキャラクターが数十のファイルとして分けられているのでそれを比較する事が一つ方法としてあるのかな、とは思っています。 自分で調べていたものとご紹介いただいているツール、先日初めて知った単語など共通項が多かったのでまずは自分が調べている事の方向性は間違っていないのだなと認識できました。 今回はありがとうございました。

回答No.2

一般的に言えば、ですが 開発者側にしてみれば、そういった内部データを解析されたり改造されたりしたくないはずですので、その方法をココで質問するのはマズイんじゃないでしょうかね。 自力でやるヒントとしては、 同じキャラのテンプレートでキャラの名前を変えた場合にファイルのどの部分が変化するのか。 どの数値が何から何に変化するとファイルのどの部分が変化するのか。 などを地道に解析してください。 しかし #1 さんも言っている通り暗号化されてる可能性が高いです。 一般人がやるもんじゃないですので一部の神に頼むしかないでしょうね。

kamerabeginner
質問者

お礼

元々ゲーム内で普通に見る事ができる数値データをテキストで欲しかっただけなのですが、やりようによっては悪用もできるのでしょう。 数百のキャラクターは自分で名前をつけるものではなく、またデータも基本データのまま変化がないので比較ができないのが今回の難点ともいえます。 ご回答ありがとうございました。

関連するQ&A

  • バイナリファイルの編集

    stirling,bzなどのエディタを用いて、バイナリファイルを編集しようとしています。 テキスト(a.txt)のデータをバイナリファイルにコピペしようとしたのですが・・・ テキストで「ff ff ff ff」と書いてあったデータが、バイナリファイルにコピペすると「4646~」というように変換されてしまいました。 バイナリファイルでも「ff ff ff ff」とコピーしたい場合はどのようにすれば良いのでしょうか?

  • テキストデータをバイナリデータに変換したい

    テキストファイルに以下のデータがあるとします。 テキストデータの中身、 「 000E6D4181AA,1234567890ABCDEF 0123456789AB,0100000000000000 050505AAAAAA,0200000000000000 070707BBBBBB,0300000000000000 012345CCCCCC,0400000000000000 cdef01DDDDDD,0500000000000000  ・  ・  ・ 」 12桁の数値(16進数)と16桁の数値(16進数)を「,」で区切ります。1行の終端は改行しています。 このテキストファイルにあるデータを以下のバイナリ形式に変換させたいのです。バイナリ形式の各行の16バイト目は、テキストデータにはデータがないので、「00」とします。「,」で区切ったバイナリ形式は「2C」になると思います。 テキストデータの左上から順に「00」は以下の、左上から順の「00」に対応します。 バイナリデータの中身、 「 00 0E 6D 41 81 AA 2C 12 34 56 78 90 AB CD EF 00 01 23 45 67 89 AB 2C 01 00 00 00 00 00 00 00 00 05 05 05 AA AA AA 2C 02 00 00 00 00 00 00 00 00 07 07 07 BB BB BB 2C 03 00 00 00 00 00 00 00 00 01 23 45 CC CC CC 2C 04 00 00 00 00 00 00 00 00 CD EF 01 DD DD DD 2C 05 00 00 00 00 00 00 00 00  ・  ・  ・ 」 ソースコードでの例、 テキストデータ1行目の1つ目の「,」までのデータ「000E6D4181AA」を、メモリ領域に読み込む。2桁の数値を1バイトで格納する。 つまり、 char buf[6]とすると、 buf[0]=0xAA buf[1]=0x81 buf[2]=0x41 buf[3]=0x6D buf[4]=0x0E buf[5]=0x00 とこのようにメモリに格納したいのです。 格納するバイトオーダーはリトルエンディアン方式とします。 以上で、質問を終わりますが、質問が上手くできていないと思いますので、説明に不備があるかもしれません。その時はお手数ですが、連絡下さい。

  • バイナリデータについて教えてください

    バイナリデータについて調べてみると、テキストデータ以外のデータはすべてそうだと書いてあります。 私の理解は、 ・パソコンのデータは結局0か1である。 ・テキストデータは、0か1のデータがテキストビューワーで開くと文字になるように並んでいるデータである ・バイナリデータは0と1で表現されるデータである。   (たまたま表す進数が2進数以外の場合も有る) <結論> ・よって、テキストデータもバイナリデータの一部である この結論は正しいのでしょうか?

  • テキストファイルのデータからバイナリを作りたい

    現在、テキストデータとしてCSVファイル1つあたり8バイトのデータが1000個ほどのデータが書かれているファイルがあります。このデータをバイナリファイルへ数値も変換して行きたいと思っています。 たとえば1個目のデータ”12345678”というテキストデータをバイナリの"12345678"に変換したらそれを0x00番地に並べて、そして2個目のデータ”87654321”というデータをバイナリにしたらそれを0x90離れた場所に置いていき、それを1000回繰り返して、結果をバイナリファイルで出力したいのですが、何か簡単にできるフリーソフトなどありませんでしょうか? また、プログラムとかでも簡単にできるのならそうしたいのですが、どうしたらよいか教えていただけないでしょうか?

  • MIMEとバイナリデータの読み方

    バイナリファイルの中、MIME boundary1の後、ヘッダーの部分のXMLで書かれたテキストファイルあります。そのXMLヘッダー文をパースしたい。 バイナリファイルのほかのところにMIME boundary2の後バイナリ形式のデータあります。 Googleで調べたけど、なにかは見つかったけど、理解できず困っています。 バイナリファイルを一バイトづつ読んで、Integer.toHexString()を使うとASCIIの形でXMLの部分はそのまま (フォーマットなしで)、バイナリデータの分は化けた表示されます。 だいたいのアウトラインでよいです。やり方ご存知の方、教えてください。 (1)boundary1の後書かれたXML式データを読む方法 (2)boundary2の後、決まったキーワードが入っていたら、そこから決まったバイト数までのバイナリデータを読む方法 その決まったキーワードと決まったバイト数はヘッダーのXML内に書かれています。

    • ベストアンサー
    • Java
  • バイナリファイルの書き出し

    バイナリファイルにデータを書き込むプログラムを作りたいと思っています。実は、Standard MIDI Fileのバイナリファイルを作りたいんです。 SMFについては、今まで、直接バイナリエディタで開き、16進数の数字をいじくって、データ書き換えたりしてたので直接バイナリファイルに16進数での数字を書きたいんです。 たとえば、テキストファイルに903C408360803C0000みたいに吐き出すプログラムでは、バイナリファイルに書き出してからバイナリエディタで開くと こいつがさらに16進数に変換されてしまいますよね? そうならないようにするにはどうやればいいんですか?

  • バイナリファイルなのですが・・・。

    研究用のデータを受け取ったのですが、テキストではなくバイナリファイルでもらいました。データを取得した人によると、↓にある装置を使って時系列データをintel86系バイナリフォーマットで記録したと言っていました。 http://www.sonysms.co.jp/j/products/datarecorder/pdf/SONY_PCscan3_jp.pdf どうにかしてこのバイナリファイルをテキストに変換して、データを取得したいのですが、どうしたらよいのでしょうか? ネットにあるバイナリ→テキスト変換ツールを使いましたが、16進数の数字が羅列されるだけで、エクセルなどで読めるデータ形式にはなりませんでした。

  • バイナリの検索について

    ほぼ同じある二つのデータに10進数で4072という数値があるはずなのですが、一致する箇所が見つかりません。どうしたら良いでしょう。 もちろん16進数に直してE80Fとして検索しました。 ソフトはStirlingです。

  • 数GBのバイナリファイルの確認

    HDD を人に譲るために DBAN というツールでデータを上書きしました。 ハードディスクの内容を安全に消去 - DBAN http://www.atmarkit.co.jp/fsecurity/rensai/securitytips/024dban.html ちゃんとデータが上書きされているか興味もあったため、HDD を dd でファイルに出力したところ、6.4 GB 程度ありました。 このファイルをバイナリエディタ Stirling で確認しようと思いましたが、 ファイルサイズが大きいためかエラーを出力して落ちてしまいました。 このような数 GB 以上のバイナリデータを確認する場合、どんな方法が 一番ベストでしょうか。ファイルを分割して、分割したファイルを バイナリエディタで確認するぐらいしかないでしょうか。 よろしくお願いします。

  • バイナリファイル

    VBでバイナリファイルを読み込み、処理しようとしているのですが、VBではバイナリファイルを扱えないのでしょうか? APIしかないのでしょうか? 例) バイナリデータ:10(16進) 取扱データ:16(10進) 上記のことをしたいのですが、うまく扱えません。 CDecも"&H10"なら16として扱えるのですが、バイナリデータをそのまま数値化することができません。 何か良い方法があれば教えて下さい。

専門家に質問してみよう