web-dev-qa-db-ja.com

Androidゲームがハッキングされ続ける

それで、これを数回繰り返して、ゲームを(安価に)リリースし、誰かがそれをハックしてミラーに置きます。すべてのアプリにGoogleアラートを設定しているため、ハッキングを行っているユーザーが毎日通知されます。これまでのところ、Googleが提案したライセンスサービスを実装しました。一意のデバイスIDでライセンスが開始されるたびに、ソルトがランダムに作成されます。アプリケーションが初めて起動されたときに、チェックサービスを1回実行します。次に、キーと保存された値に対して512文字のハッシュを生成し、そこからSharedPreferencesで比較します。

今、私は一度確認することはおそらくアプリケーションがブロックされている場所であることを知っています。私たちのバイトコードは、おそらくチェックを開始する行なしで調べられ、再コンパイルされています。

ここからは、以前に壊れていたコードを難読化したくありません。私はもう少ししっかりしたものが欲しいですし、これを適切に行う方法も学びたいです。ハッキングされたバージョンを探す人はたったの2%であるため、この時点でお金を稼ぐよりも学ぶことに興味があります。

これまでのところ、私は自分で、ゲームのいくつかのスタートアップエリアに配置される乱数ジェネレータを考え出しました。開始されると(たとえば、50回に1回)、ライセンスがチェックされます。クラッカーは各ケースを排除し、コンパイルし、排除し、コンパイルしなければならないので、これによりハッキングが難しくなることを知っています。しかし、この方法はまだクラック可能です...だからあなたたちは何を提案しますか?繰り返しますが、私はこのセキュリティのプロセスに本当に興味があるので、これを教育し、難読化やタイムスタンプに基づいた定期的なチェックに関する議論に変えないでください。

ありがとう

142
BajaBob

私の考えはハッカーの証拠ではありませんが、ゲームをハッキングすることに対する興味の一部を取り除くかもしれません。

フリーミアムモデル

1)最初の5〜10レベルを無料にすることで、人々はゲームを学び、お金を払わなくても楽しい時間を過ごせます。以下は、最初のレベルをハックしたいと思うでしょう、そして、ゲームはフリーミアムモデルによってさらに広がるでしょう。

Shareware/clustered levelpacks

2)ゲームのレベルまたはロジックの一部をオンラインのままにします。例えば。レベル5または10または15に達したら、ゲーム用の小さなパーツをダウンロードし、ゲームから進捗ログを送信するたびに、可能な値+ハッシュコードに対してこれを検証します。これにより、ハッキングされたアカウントを自動的に閉鎖できる可能性があります。

ステルス詐欺師の保護

3)また、ゲーム内に配置する「小さな警告フラグ」をカウントすることもできます。最初に「検証」をチェックするだけでなく、これらのフラグをゲームロジック自体に組み込みません。誰もそれを探すことはないので、ゲームプレイを壊さないでください。次に、ユーザーがレベルモンスターの終わりに達したら、ログに記録された警告フラグがあるかどうかを確認します。これらはゲーム内に表示されないので、ハッキングされたエディションの知らないユーザーは、数時間/数日間遊んでいて、ゲームに「バグ」があったため、ゲームを終了できないか次のレベルに進むことができないことに突然気付く可能性があります。ユーザーが知らなかったのは、このバグはハッキングされたクライアントでのみ発生するということです。

結論

クラッカーよりも賢くなります。仕事が終わったと思うように彼らをだます。コピープロテクションを作成し、より高度なクラッカーがそれを削除できることを確認します。しかし、彼らはおそらく、クラックが完全に機能するかどうかをチェックするために50レベルをプレイしたくないでしょう。

この問題に気づいたら、彼らもそれをクラックし始めるかもしれません。ただし、ゲームをレベルパックに分割しても、各パックのダウンロード間で検証できます。したがって、ハッキングされたクライアントハッシュデータを受信したら、例外を実行してクライアントでゲームをクラッシュさせるだけです。ゲームがクラッシュしました。ハッキングされているため、そのことを伝えないでください。プログラムエラーが発生する可能性があります。 :-)

繰り返しますが、ハッカーの証拠ではありません。しかし、それは次のゲームに進むのに彼らを困らせるかもしれません。最後に、ゲームの定期的な更新を行うこともできます。最新バージョンのみが「記録を投稿」できるようにする必要があります。そのため、アクティブユーザーはループを維持するために更新する必要があります。

116
BerggreenDK

この投稿から私のソリューションから取られました apk cracked

独自のライセンスライブラリを実装する

また、Google I/O 2011のYouTube録画からこれを確認することもお勧めします。

海賊の回避と吸血鬼の停止

編集:

プレゼンテーションノート fromEvading Pirates and Stopping Vampires

いくつかの基本的なキーポイント

20
TryTryAgain

私はしばらくの間apkの逆コンパイルとハッキングを行ってきました(ウェアーズではなく、ほとんどがGoogleアプリとAndroidフレームワーク、常にxda-developersポリシーに準拠)に対するmodとハック)。

Smaliの読み方を学ぶと、元のJavaコード(ただし、より多くのLOCがあります)を読むのとほぼ同じです。したがって、キーをチェックするために追加したコードはすべて検出および削除または置換できます。毎回再コンパイルして複数のコードを削除する必要もありません(一部の検索では、似たようなコードを見つけるために奇跡を起こします)。また、それらを見つけるためにコンパイル/再コンパイルサイクルが必要な場合でも、1つまたは2つの問題です。コンパイルに数分:すべてがapktoolによって自動化され、さらにapkmanagerによって自動化されます。

そうは言っても、オンラインスコアリングテーブルなどを実装することをお勧めします。ユーザーがスコアテーブルをオンラインで見ると、実装したハッシュコードを確認して、関連するGmailアカウントと比較できます。そうすれば、ハッキングをグーグルに報告し、それが違法である理由を説明する厄介なメッセージをウェアーズのユーザーに送信できます。

もちろん、得点表を削除するために新しいハックを実装することもできますが、それはウェアーズの興味を減らすでしょう。

幸運を。


更新

この質問に答えるために調査した後: APKにコードを挿入する (Amazon DRMメカニズムについて)、Amazonがアプリをどのように保護しているかについて少し説明できます:インストールの有効性をチェックする方法が含まれていますeverywhere(その質問に対する私の答えで、彼らがそれをどのように行うかの例を見ることができます)これにより、アプリをハッキングする試みはそれほど難しくありませんが、非常に退屈です。私はそれが長所であると信じています:ハッカーはそれほど多くの繰り返しのタスクをするのにそれほど時間を費やしたくないでしょう:それは挑戦的ではない退屈な。私がそのアプローチで見ている主な欠点は、もちろん、Amazonアプリ自体をハッキングして常に有効な答えを返す可能性です。しかし、現在のハッシュチェックとメソッドに散らばっている何らかのオンラインチェックを混在させると、ハッキングされる可能性が大幅に減少する可能性があると思います。

20
Aleadam

私はあなたが本当に難読化に夢中ではないことを知っていますが、私は本当にこれに反応する必要があります:

ここからは、以前に壊れていたコードを難読化したくありません。もう少ししっかりしたものが欲しいのですが、これを適切に行う方法も学びたいです。

私の経験では、ProGuardは非常に信頼性が高く、AIDLや、Javaメソッドを呼び出すネイティブコードなどのいくつかの高度な機能を使用していますが、ドキュメントを読んだり、適切に処理を行いますが、ProGuardは非常に信頼性が高く、アプリを最適化します。

カスタムセキュリティ/暗号化のトリックは優れていますが、難読化なしでは、私の謙虚な意見では水に石を投げるようなものです。

私は何ヶ月も本番環境でProGuardを使用しましたが、問題なく動作します。

学習に興味がある場合は、ProGuardのマニュアルを注意深く読み、実験して、出力ログを調べてください。

8
olivierg

YOU(すべてのプログラマーに適用)よりも才能のあるプログラマーがいる可能性は100%です。そして、それが本当なら、ハッキングを修正することはできません。しかし、あなたは破産するためにそれに多くの時間と努力を費やすことができます。

真剣にお金を稼ぐには、ターゲットユーザーグループと行動科学に関する調査を行う必要があります。ユーザーに新しいお金をもたらすプレイをさせる必要があります。

その上、あなたはそれをすべて間違っていました。ハッカーはユーザーベースの最もアクティブなメンバーであり、意図しない方法で動作します。

たとえば、FacebookでZyngaのゲームを考えてみてください。あなたはハッキングされると思いますか? -もちろん、約+100000のプレイヤーのみがプレイできます。なぜなら、あなたはすべてを自動化するボットを使用できるからです。

実際のユーザーの巨大なアクティブユーザーベースボットネットがあるため、アーカイバータイプのゲーマーはゲームをプレイしたいと思うようになります。 Avarage Joeがプレイする場合、彼の友人はプレイしたいと思うかもしれません。あなたはおそらく他のことを気にかけないでしょう。 Avarage Joeの友人は、Joeよりも良くなるために喜んでお金を払うでしょうが、むしろ、あなたが彼らをより良くできるものに投資したいと思います。

さらに、真の価値がゲームを無料でプレイすることである場合、無料のハッキングされたバージョンを使用するユーザーは、ほとんどの場合、それに対して支払いをすることはないでしょう。しかし、あなたはAvarage Joesとその友人たちです。だから、これはあなたが持つことができる最も安いコマーシャルのようなものです。大規模なユーザーベースで収益を上げたい場合は、レベルとグラフィックを少し変更するだけで新しいバージョンのゲームを作成できます。

4
Margus

海賊行為は常に問題になります。大規模なクラッカーでは、開発者よりもこれをプレイするのが上手です Security Thought Obity ゲーム。

3
rook

私の意見で重要な要素の1つは、コードを1か所に分散させないようにすることです。ライセンスを取得してチェックするLicenseChecker.checkLicense()という関数がある場合は、すぐに無効になることを確認できます。

あなたが持っている1つの利点は、クラッカーがあなたのコードのコメントを見ることができないということです(そして、もしあなたが難読化すると、メソッド/変数名)、それで奇妙な何かを思いつきます。 1つのアクティビティのonCreate()で、ライセンスIDを取得します。 onResume()では、チェックする別の値を取得します。スレッドを作成して、そこでいくつかのチェックを行うこともできます。そして、他の無関係なコード(おそらくプレイヤーコントロール)が値を取得して比較し、結果をどこかに保存します。次に、他の3つの無関係なコードがすべて独立してその値をチェックし、一致しない場合はアプリケーションを無効にします。

今、私はこれがあなた自身に頭痛を引き起こす可能性があることを言うべきです-明らかに、乱雑で厄介なコードはデバッグするのが難しく、エラーを引き起こす傾向があります。最悪の場合、合法的に購入したアプリケーションで誤検知を作成します。

そしてもちろん、すべてをリバースエンジニアリングすることができます。クラッカーがアプリが無効になっている場所を見つけると、読み取られた値をたどります。その後、保存されている場所をさかのぼって追跡し、さかのぼって追跡することができます.....または、もっと簡単に、最終チェックを無効にすることができます(そのため、3つの異なる場所、すべてのトリガーを遅延させることをお勧めします)。セキュリティは、最も弱いリンクと同じくらい良いです。

海賊行為を止めることはできません。最善の策は、アプリに関する最初の誇大広告が落ち着くまで、海賊版の拡散を遅らせることです。

2
EboMike

なんて面白くて不安な質問でしょう。 :-)演習として、Amazonからアプリをリリースしてみてください。独自のDRMメカニズムがあります。 ProGuardよりもうまく機能するのだろうか...

2
George Freeman

最初に、私は[〜#〜] not [〜#〜]を実行しますが、SWのセキュリティ分野での自分はプロだと考えますが、

重要なことは、アプリケーションが署名チェックに一部依存するようにすることだと思います。すぐに影響を与えないで、フラグを設定したり、値を変更したりします。後で、それらのフラグを使用し、それらをチェックして、それらの不在/不正確さにより、おそらくアプリケーションを終了させる何らかの種類の例外を引き起こします。署名チェックが現時点でのみ関連している限り、それをバイパスし、行を削除するのは簡単です。コード内のより多くの領域に触れると、アプリケーションはハッキングが難しくなります(または簡単ではなくなります...)。また、私が見るように、すべてのチェックが制裁のために同じルーチンを呼び出す必要はありません。これにより、保護メカニズムを見つけて終了することも簡単になります。

もちろん、違法ソフトウェアの場合の制裁は異なる場合があります。違法に使用された場合はアプリケーションをクラッシュさせたいかもしれませんが、実行を継続し、合法的なコピーの購入をユーザーに求めるメッセージのみを送信したい場合がありますアプリケーションの。

これがあなたが聞きたくなかったものなら、ごめんなさい:)

1
MByD

Androidユーザーは、絶え間ない電話の苦痛を受け入れようとしているだけです。唯一の安全なAndroidアプリは、常時接続のAndroidアプリです。

これは、主に、Apple has。On IOS電話をジェイルブレイクする必要があります。 Android在庫、工場出荷時に任意のAPKをロードできます。

サーバー上のコンテンツの一部/ほとんど/すべてを保持します。チャンクで配信します。各呼び出しでライセンス/セッションを検証します。

0
yetimoner

このようなov動作を禁止することは非常に困難です。クライアント側で処理されるものはすべて、APKの逆コンパイルと改造、 Game Guardian ectなどのソフトウェアによるメモリ編集を使用してハッキング可能です。

それを部分的に回避する方法を確認できる唯一の方法は、代わりにオンラインゲームを作成することです。または、特定の機能をオンラインで処理します。または、Android/iOS。

0
Techinator