データのバンドル/暗号化には何を使用しますか?


14

ますます多くのゲームがデータ駆動型のルートを進んでいます。つまり、簡単な操作を取り巻くセキュリティのレイヤーが必要です。ゲームがアセット(オーディオ、アート、データ)を完全にバンドルする場所を見てきましたが、それをどのように管理しているのでしょうか?アセットをバンドルして管理するのに役立つアプリケーション/ライブラリはありますか?そうでない場合、パッキング/アンパック/暗号化のために指し示す良いリソースはありますか?

この特定の質問はC ++を中心に展開しますが、C#/ XNAでもこれがどのように管理されているかを聞いていただければ幸いです。

明確にするために、ハッキングを防ぐためのソリューションを設計するつもりはありません。基本レベルでは、すべて0と1を操作しています。しかし、ゲームをプレイする人々の99%が、ゲームの世界を構築するために使用されるXMLファイルを単純に変更することを避けたいのです。私は多くのゲームがすべてのリソースを一緒にバンドルしているのを見てきました。私は単に彼らが使用している方法に興味があります。


良い質問です。私は信じられませんが、100%保護する方法はありますが、圧縮と難読化のきちんとした方法があると信じています。それについてもっと知りたいと思います...
Prix

アート/オーディオアセットを「センシティブ」と見なすべきかどうかを質問する価値があります。多くのゲームは、健全なMODコミュニティをサポートするために、意図的に資産をプレーヤーに公開します。これにより、ゲームにさらに価値を追加できます(開発者にとっても実質的に無料です)。
イアンシュライバー

主に、データ駆動型ゲームを駆動する機密データ(xmlファイルなど)に関心があります。ゲームがすべてを1つまたは2つのファイルにまとめているのを見ました。
デビッドマグロウ

4
そのデータをいじっているプレイヤーの何が問題になっていますか?
jsimmons

私自身のドラムを打つために.. CFL:iki.fi/sol/cfl
ジャリコンパ

回答:


8

良い戦略は、独自のアーカイブ形式を最初から作成し、アーカイブにシーケンシャルファイル全体を保存するのではなく、データチャンクを指すテーブルを持つインデックス付き形式にすることです。次に、インデックステーブルを暗号化し、LZMA / Bzip2。

別のアプローチは、手続き型データジェネレーターをあちこちで使用することです(そこまで行きたい場合は、追加の手段としてオンラインサーバーからジェネレーターの「パラメーター」を取得することもできます)、そして作業の一部をオフロードすることによってGPUに対しては、完全なメモリダンプを防ぎ、パフォーマンスの低下を補うこともできます。

しかし、一般的にパフォーマンスを妨げ、開発時間を浪費するこのような手法は、エンドユーザーには何も提供しませんが、潜在的な問題と不要なバグを提供します。

それでも、100%安全なものはありません。


+1。圧縮は、難読化のニーズを満たし、ロード時間とアプリのフットプリントを改善します。いずれにせよ、データのアーカイブ/パッキングには抽象化レイヤーが必要になるため、所定の場所にロード/解凍できるものと組み合わせることは、あまりエンジニアリングするべきではありません。圧縮を使用する場合は、圧縮/解凍ロジックをロード/アーカイブのものとは別にしてください。後日、より良いアルゴリズムに交換できます。必要なインフラストラクチャはアルゴリズム間で変わりません。
MrCranky

@MrCranky:EAが.package(DBPF)アーカイブ形式(SPOREおよびThe Simsゲームで使用)でそれを行う方法を見ると、実際にこれが動作していることがわかります。それらのエンジンには、使用するアルゴリズムの内部コードである「圧縮タイプ」のインデックステーブルに追加のフィールドがあります。これらは、チャンクタイプに基づいて異なる圧縮アルゴリズムを使用します(テキストチャンクは、たとえば特別な圧縮を使用します)。使用するバージョン管理システムは、MODの統合と下位互換性も可能にします。DBPF形式の詳細はこちら:simswiki.info/DatabasePackedFile
voodooattack

おもしろいこと:コンパイル時に#defineを使ってやったことがありますが、ランタイムはいくつかの素晴らしい可能性を開きます(ゲームのすべてのファイルを再構築することなく圧縮タイプを変更できるなど)。
MrCranky

11

機密データを出荷しないでください。

ゲームのみがアクセスできるように、暗号化されたデータを出荷する方法はありません。本当に一生懸命試すことができますが、すぐにDRMの問題に巻き込まれます。

ゲームアセットをpr索好きな目から遠ざけたい場合。

  1. ジップアップ
  2. xor ファイル
  3. 拡張子を退屈なものに変更します(つまりmy_level.zip.xor、使用しませんmy_level.map)。

これにより、悪意のあるユーザーの95%が停止します。他の5%は、あなたが何をしようとも、それを手に入れるでしょう。
実際にzipやzipする必要はありませんxor。代わりにlzmaを使用し、既知のキーでAESを使用できます。ポイントは、それに多くの時間を費やさないことです。


それは私が通常ほとんどのゲームから見ているものです...あなたのためのクッキー。
グランプリ

2
本当にzip + renameだけで十分でしょう。
-coderanger

1
私はそうは思いThat will stop 95% of mischeivieous users.ません、私はそれを壊すのが好きです、私は信じていますが、実際にそれを手に入れる人がまだいますが、すべてではなくてもそれぞれができれば感謝しています。ほとんどの10人のyの古い子供がメモ帳で開いているファイルに方法を知っているし、名前を変更し、これらの日...
グランプリ

1
はい、方法を知っています。気にしない、いや。
-coderanger

zip + renameでは十分ではありません。Linuxは、ファイルの種類を判別するためにファイル拡張子をほとんど使用しません。代わりに、最初の数バイトを見て、それを使用してタイプを判別します。Linuxでは、名前を変更したzipが依然としてzipとして表示されます。Windows XPはこれを行わず、拡張機能を使用します。Windows7がどのようにそれを行うかはわかりませんが、将来的にはWindowsでも同様の手法が使用されることを期待しています。
deft_code

4

これに長い時間を費やすことは、おそらく愚かなことです。テクスチャとモデルデータをGPUから直接取得するツールがあり、サウンドを仮想ループバックデバイスに簡単に向けることができます。本当に安全である必要があるものはすべて、サーバー上に存在し、チャレンジ/レスポンスを介してのみ動作する必要があります。クライアントデータの検証を行うことは別の話で、Valveの-verify_allに似ています。ローカルの実行可能ファイルを実行することを信頼することはできません(または、少なくともエンドポイントのアンチチートシステムを信頼する以上に信頼することはできませんが、これも愚かな考えです)。


4

私の仕事は改ざん防止ソフトウェアです。私は古い学校のゲームクラッカーである誰かを知っています。彼は呼吸のようなゲームをクラックします。彼のような人を止めることはできません。あなたのゲームが十分に人気がある場合、あなたのゲームの複数のクラックされたバージョンは、あなたが何をしようともリリース後わずか数日でトレントサイトにヒットします。私のアドバイスは、このリバースエンジニアリングを刺したいと思うかもしれない平均的なジョーを締め出すために、最低限のことをすることです。


1
それが目標です。私は、ハッカーと戦う意欲はまったくありません。
デビッドマクグロー

1

良い質問ですが、これは質問するのは簡単ではありません。
データセキュリティに関する私の経験から、次のことを考慮する必要があります。

1)そのデータが安全でない場合、あなたは何を保護し、誰から、どのような影響がありますか?セキュリティは、体系的な技術的解決策よりもリスク評価に関してはるかに重要です
2)その場合、あなたのプラットフォームはデスクトップ(Windows / OSXなど)であると仮定しますPS3 / Xenonなどのカーネルレベルのセキュリティで独自の試みがある独自のハードウェアとは異なる問題空間(有効なソリューションであるかどうかは議論の余地があります)
3)暗号化!=セキュリティ。暗号化は、あなたのデータをすることができないことを保証読んで、それはあなたのデータができないことを保証するものではありません、書かれたまたは再生/プロキシを。

データが改ざんされないようにする必要がある場合は、データをハッシュすることを検討する必要があります(SHA-256またはSHA-512を使用することをお勧めします)システム。
また、製品に暗号化技術を追加すると、輸出制限により暗号化技術が法的な意味合いを持つ可能性があることも知っておく価値あります(暗号化技術は、制限付き武器グレードの技術として信じられているかどうかに分類されます)。
最後に-独自の暗号化技術を使用しないでください-AES、Blowfish、RSAなどのよく知られ、文書化され、研究されているアルゴリズムを使用してください

ps Public / Private Keyは大量のデータの暗号化には適していないか実用的ではないため、DRM / PGPなどではハイブリッドRSA + 対称システムを使用します。つまり、RSAで対称キーを保護し、そのキーを使用して標準の対称暗号化を行います

それは非常に大規模で複雑な主題であり、私は間違いなく正義をしていません

役立つことを願っています


1

小さく(圧縮可能)、途方もなく安全で柔軟性があるように設計および構築(おそらく過剰設計)された形式の例が必要な場合は、BlizzardのMPQ形式をご覧ください。

http://wiki.devklog.net/index.php?title=The_MoPaQ_Archive_Format

一般的なアーカイブレイアウトは次のとおりです。

アーカイブヘッダーファイルデータファイルデータ-特殊ファイルハッシュテーブルブロックテーブル拡張ブロックテーブル強力なデジタル署名

この形式にはすべてがあります。ブロックテーブル、拡張ブロックテーブル、セクターに分割されたデータ(ストリーミングを容易にするため)、任意に組み合わせることができる7(!)圧縮アルゴリズム(サウンド圧縮をカウントする場合)のサポート、弱いデジタル署名、強いデジタル署名など。

ファイルアーキテクチャを扱うBlizzardからAPIを購入する場合、必要なものすべてが手に入ります。


リンクのおかげで、私はMPQの詳細を詳細に検討することを考えていませんでした(そして、一般的にそれらは利用できないと仮定していました)
ビル

それが非常に安全である場合、なぜそれがそのような程度までリバースエンジニアリングされ、サードパーティのライブラリと対話することさえあるのですか?;-)
coderanger

* .mpqファイルを操作するためのほとんどの(すべてを読む)ツールは、Stormlibに依存しています。

私の知る限り、Stormlibでは、復号化のキーが実行可能ファイルに保存されているため、アーカイブの元となる元のゲームが必要です。しかし、それが非常に安全である最大の理由は、侵入することが不可能だからではありません。しかし、ネットを介して送信されるオンザフライデータの場合、誰にも負けません。データは非常に高度に暗号化されているため、第三者がその場で復号化するのは無益です。

実際、「World of Warcraft」では、Blizzardはストリーミングテクノロジーの先駆者であり、データ全体のわずか数パーセントをハードドライブにダウンロードしてゲームをプレイできます。* .mpq形式は、この種の仕事に優れています。言うまでもなく、Starcraft 2インストーラーは、ゲームの公式リリースの数日前にBlizzardによってリリースされたとき、そのアーカイブは非常に暗号化されていたため、ゲームのリリース後まで開くことができませんでした。:P

0

これは最近復活したので、あなたの質問(したがって、これまでのすべての回答)はファイルのロードのみを扱っているようです。これは、ロードする実行可能ファイルと同じくらい安全です。PC上には本当に安全なものは何もありません(単に人を遅らせるだけです)、サーバー上のものに対してチェックすることができますが、そのチェックさえ削除することができるので、modded exeは何があっても実行できます。コンソールは依然として「かなり」安全であるため、ほとんどの場合、重要なファイルのハッシュを生成し、秘密鍵でハッシュに署名し、コードに公開鍵を埋め込み、ファイルに対して安全なハッシュを検証します。

私は会話に別の攻撃を投げると思いました。これは、PCにあまり出荷しない傾向があるので、昨年出会ったことです。Cheat Engineは非常にきちんとした小さなプログラムで、独自のハックを作成することをほぼ自動化します(つまり、誰でも使用できます)。それができることはかなり進んでおり、私が見た多くのハック/チートは、これまたは私が見たもの(すべてのマスマーケットのもの)から非常に似たものによって作られています。いくつかの作業を行うと、このようなものから再び保護することができますが、それはすべてゲームの人気度と、誰かが気にするのに十分な気遣いにかかっていると思います。

暗号化に適したライブラリ(C ++)を言及するのを忘れていましたが、LibTomCryptです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.