Androidゲームがハッキングされ続ける[終了]


143

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

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

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

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

ありがとう


27
あなたがお金を稼ぐよりも学ぶことにもっと興味があると自分で言わなかったなら、私の答えは単に「頭痛の価値はない」でしょう。あなたは頭痛自体に興味があるので、私は先に進みますと言います(しかし、私はあなたに答えはありません。他の皆と同じようにこの質問に従います)。
チアゴアライス

4
同じゲームがハッキングされ続けている場合、問題のあるスタッフメンバーがいないことに自信がありますか?検討するのは良いことではありませんが、起こり得ることです
Phil Lello

3
2万行を超えるコードですが、プロセス全体を自分で管理しています。
BajaBob、

3
@BajaBobその後、あなたはモルです:D
スルフカイン

回答:


117

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

フリーミアムモデル

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

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

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

ステルス詐欺師保護

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

結論

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

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

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


5
うわー、素晴らしいアイデア。これを本当に感謝し、レベルを作成してサーバーに投稿し、それらに対して検証することさえ考えていませんでした。Versoning ...素晴らしいアイデア。全員を更新し続け、クラックするのを無理にしてください。トンありがとう、これでしばらく忙しくなりますよ!
BajaBob 2011

12
ため息、あまりにも悪いあなたは答えを+2することはできません:) 1つのコメント:問題が海賊行為されているゲームにあることをどのように示すことができますか?海賊版のコピーでゲームがバギー/奇妙なものになった場合、人々はそれがバグであると考え、フォーラムでゲームを悪口を言うかもしれません。大勢のユーザーがいるフォーラムはそれほど多くないので、これはAndroidではそれほど大きな問題ではないと思いますが、「海賊版のコピーが正しく機能しない可能性がある」という免責事項を前もって置くのは理にかなっているのではないでしょうか。
EboMike

3
コピー防止機能が削除された場合にランダムに動作するTRS80の1978年のゲームを覚えています。有効性チェックは1つしかありませんでした。これを削除すると、自由にゲームをコピーできますが、奇妙なゲームプレイエラーは正規のコピーでは発生せず、ハッキングされたコピーでのみ発生します。それが開発者のせいだとは誰も思っていませんでした...
フィクシー:

1
@EboMikeコピー防止に関する私のアイデアの最も重要な部分は、「可能な限り正常に機能する」ことであり、クラッカーに厄介な保護スキームの手がかりを与えないようにすることです。これは彼らをより好奇心から保護を狩るようにするだけです。それを楽しむためだけに。覚えておいてください、彼らの多くはお金のためにそれをしていませんが、それを誇示できるからです。だから彼らを誘惑しないでください。カジュアルに行動してください。:o)それらより賢くなります。
BerggreenDK 2011

2
@Fixeeとその他最近のバットマンアーカムアサイラムゲームは、それに類似したものを持っています。海賊版のコピーでは、重要な動きが停止し、ゲームのかなり早い段階でスタックしてしまいます。そして、誰かがフォーラムの「バグ」について不平を言ったとき、開発者はにやにや笑って「それはゲームのバグではなく、それはあなたの道徳的なコードのバグです」と言うことができます。
Nzall 2013年

20

私はしばらくapkの逆コンパイルとハッキングを行ってきました(ウェアーズではなく、ほとんどの場合googleアプリとandroidフレームワークへの改造とハッキングで、常にxda-developersポリシーを遵守しています)。

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

とはいえ、あなたへの私の提案は、ある種のオンラインスコアリングテーブルなどを実装することです。ユーザーがオンラインでスコアテーブルを見ると、実装したハッシュコードを確認して、関連するGmailアカウントと比較できます。このようにして、ハッキングをグーグルに報告し、不快なメッセージをウェアーズのユーザーに送信して、それが違法である理由を説明できます。

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

幸運を。


更新

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


3
多くの人々がアプリを「自宅に電話をかける」ことで問題を抱えていることを言及しておきます。個人的には、それは愚かなことです-Androidフォンは多くの点で非常に多くの方法で「フォンホーム」になり、それは本当に重要ではありません。匿名のライセンス検証チェックの問題は何ですか?まだそれを捨てたかった-一部の人々は、特にそれが明らかにされていないとき、「家に電話をかける」ことについて大きな悪臭を放つ。
EboMike

3
まあ、アプリが「自宅に電話をかけて」ユーザーに知らせないと問題が発生する可能性があることは理解できます。しかし、Webベースのスコアテーブルは、喜んで接続するユーザーなので、それを解決します
Aleadam

確かに、しかし「匿名で」スコアをアップロードし、Gmailアカウントのハッシュを送信するはずの接続を使用すると、それは別の問題になります。繰り返しますが、私にはありません。これは完全に合理的だと思います。個人的には、このスキームを自分のアプリに実装したくなります。文句を言う人は少数派になります(そして、おそらくアプリを購入します)。
EboMike

ソースコードをダウンロードする代わりに、なぜフレームワークを逆コンパイルするのですか?
Phil Lello、2011

1
@PhilはtouchwizまたはセンスFWのソースコードにアクセスできないため、特定の電話を改造したい場合、最も簡単な方法はそれを逆コンパイルしてsmalisを変更することです。
Aleadam

20

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

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

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

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

編集:

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

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


上記のリンクは、リンクされたページに常に移動するとは限らないようです... OSとブラウザに依存して、たまにしか機能しないようです。したがって、#%3ar.page.15URL の末尾に注意してください。そのページに自動的にリダイレクトされない場合は、リンクを参照して、どこにどのページを表示しているかを確認してください。
TryTryAgain

1
いいね!私は彼らがフリーミアムを信じており、ゲーム内の特定の「エラー」を隠しているのを見ています(ライセンス技術を使用しているだけです)。Androidのみのライセンスサーバーではなく、クロスプラットフォームソリューションが必要です。でも面白い。
BerggreenDK 2013

ところで。おかしい、この答えは15の親指を上に持っています、私のものはすでに90を超えており、正しい答えとは見なされません:-)
BerggreenDK

8

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

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

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

カスタムのセキュリティ/暗号化のトリックは良いですが、難読化しないと、私の考えでは、石を水に投げ込むようなものです。

私は何ヶ月もプロガードを運用で使用してきましたが、問題なく動作します。

学習に慣れている場合は、ProGuardマニュアルを注意深く読み、それを試し、出力ログを調べてください。


読み取ることができるものはすべて逆コンパイルすることもできます。これは、CPUパワーとスタバネスの問題です。難読化によってコードを実行できるため、コードの逆コンパイル/解読中に、クラッカーは実行中のバージョンを元のバージョンと比較できます。クラッカーを遅らせたり、経験の浅いクラッカーを停止したりできますが、フェイルセーフではありません。
BerggreenDK 2015

4

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

深刻なお金を稼ぎたい場合は、ターゲットユーザーグループと行動科学について調査する必要があります。あなたはそれをプレイするユーザーに新しいお金をもたらすようにする必要があります。

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

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

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

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



2

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


1
今日の時点で、Lucky PatcherアプリはAmazon DRMもクラックしました!ProGuard以外に、DexGuardが別のソリューションとなる場合があります。しかし、DexGuardの購入には数百ユーロの費用がかかりますが、コードが海賊行為から保護されるかどうかは確信が持てません...
ChuongPham

2

私の意見の重要な要素の1つは、コードを広げて、すべてが1か所にあるわけではないことです。ライセンスを取得してチェックするLicenseChecker.checkLicense()と呼ばれる関数がある場合は、それがすぐに無効になることを確認できます。

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

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

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

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


1

まず、私はソフトウェアセキュリティ分野の専門家ではないと思いますが、

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

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

これがあなたが聞きたくなかったものであるなら、私はあなたの時間をごめんなさい:)


7
アプリがクラッシュした理由を明確に示さない限り、海賊版が検出されたときにアプリをクラッシュさせると、裏目に出る可能性があります。著作権侵害対策チェックに失敗した場合、ランダムな期間後にゲームをクラッシュさせた一部のゲーム開発者について読んだことを思い出します。もちろん、多くの人が海賊版を作成しましたが、クラッシュが海賊版を実行していたためにクラッシュしたことに気づきませんでした。これは開発者にとって多くの悪い報道となり、彼らの売り上げを傷つけたかもしれません。
ミッチリンドグレーン2011

3
@ミッチ-同意する。私はそれを1つの可能性として与えましたが、おそらく「最良の」技術戦略はおそらく最良の「ビジネス」戦略ではありません。
MByD 2011

0

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

これは主に、Appleのように、Googleがインストールのロックダウンを拒否したためです。IOSでは、電話を脱獄する必要があります。Androidでは、ストックのAPKを工場出荷時にインストールできます。

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


明確化:どちらのプラットフォームでもルート権限を取得できますが、実際にインストールを恐れるのは少数のIOSユーザーだけです。また、世界の多くの地域では、Androidアプリの代金を支払うことは困難または不可能であり、海賊行為を煽っています。
yetimoner '19

これは実際、2011年の私の回答からのアイデアの1つでした...なぜもう一度投稿するのですか?
BerggreenDK 2013

0

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

部分的にそれを回避する方法を私が見ることができる唯一の方法は、代わりにオンラインゲームを作ることでしょう。または、特定の機能をオンラインで処理します。または、これまでdenuvoのような改ざん防止暗号化がAndroid / iOSで利用できる場合。

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