[解決済み] Androidゲームがハッキングされ続けている件【終了しました
質問
私たちはこれまで何度か、ゲームを (安価に) リリースし、誰かがそれをハッキングしてミラーにアップする、ということを経験してきました。 私たちはすべてのアプリに Google アラートを設定したので、誰がハッキングを行ったかを毎日知ることができます。 今のところ、Googleが提案したようにライセンスサービスを実装しており、私たちの塩は、ユニークなデバイスIDでライセンスが開始されるたびにランダムに作られます。 チェックサービスは、アプリケーションの初回起動時に一度だけ実行されます。 そして、キーと保存された値に対して 512 文字のハッシュを生成し、以降 SharedPreferences で比較されます。
今、私は、一度のチェックが、おそらくアプリケーションがブロックされている場所であることを知っています。 バイトコードはおそらく、チェックを開始する行がないまま調べられ、再コンパイルされたのでしょう。
ここから、私は以前それが破られるのを見たので、コードを難読化したくありません。 もう少ししっかりしたものが欲しいですし、また、これを適切に行う方法を学びたいのです。 ハッキングされたバージョンを探す人は 2% しかいないので、この時点ではお金を稼ぐことよりも学ぶことに興味があります。
今のところ、私自身は、ゲームのいくつかの起動領域に配置される乱数ジェネレータを思いつきました。 開始されたとき (たとえば、50 回のうち 1 回) に、ライセンスがチェックされます。 この方法では、クラッカーは、コンパイル、排除、コンパイルと、それぞれのケースを排除しなければならないので、ハッキングが難しくなることは承知しています。しかし、この方法はまだクラック可能です...そこで、皆さんは何を提案しますか? 繰り返しますが、私はセキュリティのこのプロセスに本当に興味があるので、これを難読化やタイムスタンプに基づく定期的なチェックに関する議論に変えないで、教育してください。
ありがとうございます。
どのように解決するのですか?
私のアイデアはハッカー対策ではありませんが、ゲームをハックする興味をなくすことができるかもしれません。
フリーミアムモデル
1) 最初の5~10レベルは無料にして、人々がゲームを学び、お金を払わずに楽しむことができるようにする。最初のレベルをハックしたいと思う人は少なくなり、ゲームはフリーミアムモデルによってさらに普及するでしょう。
シェアウェア/クラスターレベルパック
2) ゲームのレベルやロジックの一部をオンラインにしておく。例えば、レベル5や10、15に到達したとき、ゲームの小さなパーツをダウンロードし、毎回ゲームから進捗ログを送信し、可能な値+ハッシュコードに対してこれを検証します。これはおそらく、ハッキングされたアカウントを自動的に閉鎖することを可能にするでしょう。
ステルス チーター保護
3) ゲーム中に配置する小さな警告フラグを数えるだけでもよいでしょう。ゲームロジック自体にこれらのフラグを構築することはありません。ゲームプレイを中断させるようなことはしないでください。 そして、ユーザーがレベルモンスターの終わりに到達したとき、ログに記録された警告フラグがあるかどうかをチェックします。これらはゲーム内に表示されないので、ハッキングされたエディションで知らないユーザーが何時間も何日もプレイしているうちに、突然、ゲームにバグがあるためにゲームを終了したり次のレベルに進むことができないことに気がつくかもしれません。そのユーザーは、このバグがハッキングされたクライアントでのみ発生することを知りませんでした。
結論
クラッカーより賢くなれ。仕事が終わったと思わせて、彼らをだますのです。コピープロテクトを作成し、より高度なクラッカーがそれを取り除くことができることを知っています。しかし、彼らはおそらく、クラックがすべて動作するかどうかを確認するために50レベルをプレイすることを望んでいないでしょう。
この問題に気づいたら、彼らもクラックを始めるかもしれません。しかし、ゲームをレベル パックに分割すれば、各パックのダウンロードの間に検証を行うことができます。ですから、ハックされたクライアントのハッシュ データを受け取ったら、例外処理を実行して、クライアント上でゲームをクラッシュさせればいいのです。おっと、ゲームがクラッシュしました。ハックされたからとは言わせません。プログラム エラーが発生する可能性があります。)
繰り返しますが、これはハッカーの証拠ではありません。しかし、次のゲームに移るには十分なほど、彼らを困らせるかもしれません。最後に、ゲームの定期的な更新を行い、最新バージョンのみが記録を投稿することができるようにすることもできます。
関連
-
Androidで、onTouchEventでダブルクリックを実装し、ダブルクリックイベントとして判定する方法
-
Android ProgressBarの色を変更する
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] Androidの「コンテキスト」とは何ですか?
-
[解決済み] AndroidでPythonを実行する方法はありますか?
-
[解決済み] AndroidのListViewで画像を遅延ロードする方法
-
[解決済み] EclipseのAndroidプラグインで "Debug certificate expired "エラーが発生する。
-
[解決済み] Androidで画面の大きさをピクセル単位で取得する方法
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
android.os の NetworkOnMainThreadException。
-
[android studio]com.android.ide.common.process.ProcessException: aaptの実行に失敗しました
-
GIF、Lottie、SVGA
-
RuntimeException: アクティビティを開始できません ComponentInfo solution
-
ArrayAdapter は、リソース ID が TextView であることが必要です。
-
telnet'が内部コマンドまたは外部コマンドとして認識されない 解決方法
-
ライブラリをモジュールとしてインポートする際にエラーが発生しました。Error:A problem occurred configuring project ':library'.
-
Windowsのadbシェルでデータディレクトリにアクセスするとパーミッションが拒否される
-
AndroidでListViewを使ってカスタムテーブルを描画する
-
Android TextViewは、テキスト内容が表示省略記号を超えているかどうかを判断する