7

アプリケーションをリリースしようとしていますが、海賊版を使用したくありません...ライセンスを持っていても、アプリケーションをクラックするラッキーパッチャーのようなアプリがあります...

誰でもこれから保護する方法を知っていますか?

4

8 に答える 8

12

アプリがクラックされた形式で配布および再パッケージ化されるのを防ぐには、以下の署名チェックを参照してください。少なくとも、あなたのアプリを機能させることができるのは、LuckyPatcher をインストールした人だけです。LuckyPatcher が変更された APK を作成すると、署名が変更されます。

リリース バージョンを実行したときに、署名が何であるかを確認する必要があります。以下の例では -343553346 です。

String sigChk = MySigCheck.MySigCheck(context);
if (sigChk.equalsIgnoreCase("Y")){
    handle signature pass
}

クラスを作成する

public class MySigCheck {
public static String MySigCheck(Context context) {
    String sigChk = "B";

    Signature[] signature = new Signature[0];

    try {
        signature = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES).signatures;

        Log.d("yourapp", Integer.toString(signature[0].hashCode())); << Prints your signature. Remove once you know this and have changed it below.

    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    }

    if (signature[0].hashCode() == -343553346){
        sigChk = "Y";
    }

        return sigChk;
    }
}
于 2014-06-26T22:34:10.400 に答える
11

短い答えはそうではありません。

ライセンス API などを使用するためのいくつかのベスト プラクティスについての Google IO チャットを見ることができますGoogle IO Anti Pirate

怠惰な海賊を阻止するための一般的なパターンについても別の話があることは知っていますが、URL が見つからないようです。

一般に、保護が if/then ロジックに依存している場合、誰かがしなければならないことは、コードにパッチを当ててそのロジックを反転するか、すべてをバイパスすることです。これは Java では非常に簡単です。

これを行っている場所を難読化したり、多くの場所で実行したり、ランダムに実行したり、プロガードの難読化などを追加してカジュアルなハッカーを思いとどまらせたりすることで、より困難にすることができます。

返品パッケージが何らかの方法で使用されない限り (コンテンツのロックを解除するためにユーザーまたは電話情報と同期される暗号化トークンや、オンライン コミュニティ コンテンツへのアクセスに必要なユーザー ID 検証スキームなど)、サーバー側のロジックでさえバイパスするのは簡単です。 .)

最終的には、誰かが決断力とスキルを持っていれば、すべてを回避できます。深刻な収益を失っていない限り、寝坊する価値はほとんどないと思います。これは、私たち全員が抱える必要がある問題です!

これを20年間(商用開発)行った後、私のアプローチは、上記のパターンを使用してそれを困難にし、時々変更することです. それは怠惰な海賊を排除します。

それなら忘れて、海賊版に盗まれる価値のあるアプリを作ることに専念してください。

私のアプローチ

私のアプリは主にコンテンツ駆動型です。

一般に、誰かがコンテンツを購入すると、サーバー側のトークンを使用して暗号化され、同じものを使用して暗号化が解除されます (これらは保存されませんが、デバイスとユーザーのトークンを使用して各セッションで生成されるため、正直にスプーフィングするのが少し難しくなります)。

その後、ユーザーとデバイスの組み合わせによってアクセスを追跡できます。ハッカーにとってのマイナス面は、一度支払う必要があることです。彼らのトークンが突然合理的な制限を超えて使用されると、その事実が警告され、必要に応じてそのアカウントをオフにすることができます (そして私は持っています)。

私は社会的に、情報が自分に関連付けられている場合 (実際に起こったことはありますが)、誰かが情報を使用して不正行為を行うことを許可する可能性ははるかに低く、それが戻ってくる可能性がはるかに低いことを発見しました。

私はまだ IO/Dev ブログなどからのすべてのアドバイスに従っており、改ざんを検出した場合は、ユーザーに通知し、N 期間放置して、ユーザーが私に連絡するか、自己修正できるようにします。

また、アプリを強制終了することはありませんが、マルウェアを使用していることをユーザーに伝え、データなどを盗んだ人を本当に信頼しているかどうかを尋ねます。そのようなポップアップにはビット付きのメッセージがあるため、単純な文字列検索が勝ちました仕事などをせず、人々に恐怖を与える

また、ポイズントークンセットをデバイスに送信する方法もあります。これにより、ロックを解除しない限り、デバイスに蓄積されたデータを本質的にロックアウトできますが、核攻撃を行う前に、彼らが泥棒であることを確認する必要があります.

また、分析を検出方法として軽視しないでください。また、海賊版が検出されたときに取るべき適切なアクションを決定してください。

ブログ投稿と IO が言及したガイドラインに従い、それらを適用する際に創造的になり、いくつかの独自のソリューションを組み合わせてから、海賊に適合するように頻繁に変更します。

于 2012-05-14T15:37:25.740 に答える
6

LuckyPatcher がハッキング目的で odex 置換を使用するという事実に基づいています。現在の実装を無効にする控えめな方法は、重要なコードを別の dex にコンパイルし、DexClassLoader を介してロードすることだと思います。

参照: http://android-developers.blogspot.pt/2011/07/custom-class-loading-in-dalvik.html

于 2013-12-04T17:08:23.547 に答える
3

私のやり方は、ラッキーパッチャーのパッケージ名が変更された場合に備えて、そのパッケージ名を監視することです。そのため、実行時にインストールされているかどうかを確認します。アプリを購入した場合でも、実際に電話にインストールされている場合は、アプリの使用を許可しません。ユーザーに警告し、アプリを強制終了します。したがって、彼はそれをクラックする別の方法を見つける必要があります。私が得ることができるより悪いことは、彼が私のアプリを購入しなければならず、確かに1つの悪いレビューを置くことです。しかし、正直なところ、私は1日に1000部の海賊版よりも、ハッカーからの1件の悪いレビューを好みます。

于 2013-02-05T19:39:09.213 に答える
2

私が聞いた唯一の方法は、サーバーの検証を行うことです...アプリをサーバーに接続して、サーバーがアプリを購入したことを確認してもらいます。

これはGoogleを介したアプリ内課金に関するものですが、リモートサーバーでの署名検証がデバイスよりも安全なのはなぜですか?

Google Play全般に関する開発サイトのいくつかの良い情報はここにあり、アプリ内課金は特にここにあります

残念ながら、私は他に多くを見つけていません...

于 2012-05-14T15:17:50.610 に答える
1

プロの IT エンジニアであり、一般的なパワー ユーザー (Linux、Windows、Android、OS X、iOS) として、コマンド ライン インターフェイスをグラフィカルと同様に快適に使用できるため、自由にツールを使用して目的を達成しています。ルート化されていない Android デバイスを使用することは想像できませんでした。通常、ルート化を必要とする多数のユーティリティがロードされています。少なくとも、お気に入りのデバイスに通常付属している義務的なブロートウェアを制御し、独自のシステム アプリを挿入し、美学、快適さ、および利便性のために正当な変更を加える自由を楽しんでいます。

作成者がルート化されたユーザーを不自由にすることを選択したアプリで適切な機能を実現するためだけに、私はいくつかの危険な道を歩むことを余儀なくされました. 私のデバイスが (たとえば) Virgin TV Anywhere から「無許可の変更」を受けていると言われると、私の血が沸騰します。期待される機能を追求するために利用できる唯一のオプションである場合、喜んで彼らのコードを破り、いくつかのライセンス契約に違反します。

この点に関して、前述のメディア アプリケーションのような過酷な道を選択した場合、憤慨した悪意や単なるユーティリティによって、多くのユーザーを招待して努力を失敗させていることに同意します。これは、コードの「修正された」バージョンが合法的な販売よりも急流として普及するようになると、アプリの著作権侵害を完全に助長する可能性さえあります.

個人的には、自分の安心感を飲み込み、それを機能させるためにほとんど信頼できないツールでそれを壊すことを余儀なくされたときでさえ、私はいつも有料オプションを選びます. しかし、多くの場合、彼らがあなたの製品に最初に触れるのは悪意のあるチャネルを通じてであり、彼らは合法的で絶望的に不自由なバージョンにお金を払うつもりはほとんどありません.

一部のコーダーがこれらの選択を余儀なくされる理由を理解しています。また、知的財産を保護する正しい方法について賢明な質問がなされるのを見るのは良いことです。

答えに意味が見られると、さらに心強いです。

ちょうど私のタペンス。

于 2016-01-26T09:18:00.993 に答える
0

彼らがルート化されたデバイスを持っている場合、アプリを使用するために su バイナリを非表示にすることもできますが、ルート化されていないバージョンの自由で使用できない場合は、ルートをチェックすることが最善の方法であり、それを修正する必要があります。ゲームキラーのようなハッキングツールにチェックを入れると、怠惰な人を止めることができますが、文字列を逆コンパイルして別の文字列に変更できる人はそうではありません.

于 2015-05-07T09:37:37.227 に答える
-5

ラッキーパッチャーはルート化されたデバイスで動作します。電話がルート化されているかどうかを確認します。最初のアクティビティで、電話がルート化されているかどうかを確認し、アプリがロックされているかどうかを確認します。それ以外の場合はアプリが開きます。

チェックは以下の方法でルートです:

    private static boolean isRooted() {
    return findBinary("su");
}



public static boolean findBinary(String binaryName) {
    boolean found = false;
    if (!found) {
        String[] places = {"/sbin/", "/system/bin/", "/system/xbin/", "/data/local/xbin/",
                "/data/local/bin/", "/system/sd/xbin/", "/system/bin/failsafe/", "/data/local/"};
        for (String where : places) {
            if ( new File( where + binaryName ).exists() ) {
                found = true;
                break;
            }
        }
    }
    return found;
}
于 2015-01-12T16:14:21.760 に答える