3

注:これは特に android に関連していますが、最良の答えはプラットフォーム固有ではない可能性があるため、他のタグです。

アングリーバードに似たゲームを考えてみましょう。たくさんのレベルがあります。レベルを終了するたびに、次のレベルをプレイできますが、その前にはプレイできません。プレイヤーが私のゲーム ファイルをハッキングして、利用できないレベルをアンロックするのを困難にするにはどうすればよいですか? 進行状況データがローカルに保存されているとします。

私の考え:

Android では、すべてのアプリ ファイルは、ユーザーが root アクセス権を持っている場合にのみアクセスできるフォルダーに保存されます (デフォルトではアクセスできませんが、通常は、少しググれば非常に簡単に取得できます)。現在、次のような sqlite データベースを使用しています。

LevelId = pk | UnlockStatus = int, 0 = locked, 1 = unlocked, 2 = completed with 1 star, ...

ユーザーが root を持っていないか、アプリ ファイルが保存されている場所にまったく慣れていない限り、これは問題ありません。ただし、ルートがある場合、このファイルは非常に簡単に編集できます。

私が知る限り、.lua少なくともその名前によると、怒っている鳥はそのレベル データをファイルに保存します。レベル情報を含むテキスト ファイルまたは db ファイルが見つかりません。これをテキスト エディタで開く.luaと、意味不明な内容しか表示されません。私は16進エディタを試していません。

SQL テーブルの使用は非常に便利です。ユーザーがそれを理解するのに苦労するように、進行データをSQLテーブルに保存する簡単な方法はありますか? 理想的には、実装に時間がかかりすぎないようにする必要があります。オフライン ゲームなので、プレイヤーがハッキングするかどうかはあまり気にしないので、最高の品質、つまり実装時間のトレードオフを探しています。ただし、品質を大幅に向上させるために実装時間を大幅に増やす理論的な回答も高く評価されます。

4

3 に答える 3

4

何らかの暗号化を使用してデータを保存することをお勧めします。Android では、SQLite はデータベース レベルでの暗号化を提供しません。ただし、テーブル内の値 (レコード) を暗号化し、クエリ後に復号化することはできます。

もう 1 つの方法は、データをキーと値のペアとして内部または外部メモリの何らかのテキスト ファイル (angbirds の .lua の例) に保存し、ファイルの内容を暗号化することです。一方、実行時に復号化し、キーと値のペアを読み取ります。

タダー!問題は解決しました:)

于 2012-04-12T11:13:21.453 に答える
1

デバイスにローカルに (または最終的にはリモートで) 保存されているデータ (ゲーム バイナリ/レベル データ/ハイスコア テーブルなど) のハッキングは、本当にやりたいと思っていて、その方法を知っている人なら、いつでもアクセス (およびデコード) できます。

追加するセキュリティの各レイヤーは、ハッカーにとってより困難になるだけです (そして、より長い時間がかかります)。セキュリティのレイヤーを追加しても、ハッカーがそれを理解するよりも、実装に時間がかかる場合があります。(コンピューティングの歴史には有名な例があり、その 1 つが XBox IIRC です)。

あいまいさによるセキュリティは、ケースでデータを暗号化するときにやろうとしていることです。これは長期的には十分ではありません。特に、プロジェクトが大勢の聴衆に会うとき。

于 2012-04-12T11:34:16.763 に答える
1

簡単な方法:プレイヤーごとに異なるレベル データを保存します。

5 行未満のコード:

//encrypt code:
save_level = "level_txt" + "#"+ md5("gamename" + "playername" + level_txt)

//decrypt code:
level_plaintxt, md5_level = save_level.split("#")
if (md5_level == md5("gamename" + "playername" + level_plaintxt))
  return level_plaintxt
于 2012-04-12T11:17:38.720 に答える