144

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

これで、1 回チェックすると、おそらくアプリケーションがブロックされていることがわかりました。私たちのバイトコードは、チェックを開始する行なしで調べられ、再コンパイルされた可能性があります。

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

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

ありがとう

4

11 に答える 11

118

私のアイデアはハッカーの証拠ではありませんが、ゲームをハッキングすることへの関心をいくらか取り除くかもしれません.

フリーミアム モデル

1) 最初の 5 ~ 10 レベルを無料にして、人々がお金を払わずにゲームを学び、楽しむことができるようにします。最初のレベルをハックしたくなることが少なくなり、フリーミアム モデルによってゲームがさらに広がります。

シェアウェア/クラスター化されたレベルパック

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

ステルス詐欺師の保護

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

結論

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

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

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

于 2011-04-08T23:40:06.557 に答える
20

私はしばらく apk の逆コンパイルとハッキングを行ってきました (warez ではなく、主に Google アプリと Android フレームワークに対する mod とハックであり、常に xda-developers のポリシーを順守しています)。

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

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

もちろん、新しいハックを実装してスコアリング テーブルを削除することもできますが、それではウェアーズの関心が低下します。

幸運を。


アップデート

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

于 2011-04-08T20:35:41.460 に答える
20

この投稿の私のソリューションから取得した apk のクラックを避ける

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

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

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

編集:

海賊の回避と吸血鬼の阻止からのプレゼンテーションノート

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

于 2012-03-17T08:48:14.783 に答える
8

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

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

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

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

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

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

于 2011-04-15T10:56:39.920 に答える
4

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

あなたがいくつかの深刻なお金を稼ぎたいのなら、あなたはあなたのターゲットユーザーグループと行動科学についていくつかの研究をする必要があります。あなたは新しいお金をもたらすユーザーをプレイさせる必要があります、そしてそれはそれです。

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

FacebookのZyngaゲームを例にとると、ハッキングされたと思いますか?-もちろん、すべてを自動化するボットを使用できるため、約+100000人のプレイヤーしかプレイできません。

実際の人々の巨大なアクティブユーザーベースのボットネットを持っているため、アーカイバタイプのゲーマーはゲームをプレイしたいと思うようになります。Avarage Joeがプレイする場合、彼の友達はプレイしたいと思うかもしれません。あなたはおそらく他に何も気にしないでしょう。そうすれば、彼/彼女の友達よりも上手くなり、時間をつぶしたり、何か話したりすることができます。Avarage Joeの友達は、Joeよりも上手になるためにお金を払うことをいとわないでしょうが、むしろあなたは彼らがより上手になることができるようにする何かに投資したいと思っています。

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

于 2011-04-08T21:30:04.277 に答える
3

著作権侵害は常に問題になります。概して、クラッカーは、開発者よりも、このセキュリティが曖昧なゲームをプレイするのが得意です。

于 2011-04-08T20:34:49.483 に答える
2

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

于 2011-04-08T21:22:11.970 に答える
2

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

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

ここで、これが頭痛の種になる可能性があることを前もって言っておく必要があります。明らかに、雑然とした厄介なコードはデバッグが難しく、エラーが発生しやすくなります。最悪の場合、正規に購入したアプリケーションで誤検知が発生します。

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

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

于 2011-04-08T21:47:43.977 に答える
1

まず、私は自分自身を SW セキュリティ分野のプロだとはまったく思っていませんが、

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

もちろん、違法な SW の場合に取るべき制裁はさまざまです。違法に使用されたときにアプリケーションをクラッシュさせたいと思うかもしれませんが、アプリケーションを実行したままにして、ユーザーに合法的なコピーを購入するように求めるメッセージだけを送信したいかもしれません。アプリケーションの。

これがあなたが聞きたくないことである場合は、お時間をいただき申し訳ありません:)

于 2011-04-08T20:38:46.463 に答える
0

Android ユーザーは、絶え間ないテレフォン ホームの苦痛を受け入れなければなりません。唯一の安全な Android アプリは、常時接続の Android アプリです。

これは主に、Google が Apple のようにインストールをロックダウンすることを拒否したためです。IOS では、電話をジェイルブレイクする必要があります。Android では、任意の APK をストックの工場インストールでロードできます。

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

于 2012-12-19T00:25:12.953 に答える