27

アプリ、有料アプリをリリースしました。4日後、ユーザーから、中国に私のアプリをホストしている別のWebサイトがあると言われました。そこからダウンロードしましたが、デバイスで正常に動作します。

ここには、パッケージ名を変更してapkを再公開できるという投稿があります。しかし、これは私の場合ではありません。クラックされたバージョンはまだ同じパッケージ名を使用しています。プログラムでAndroidVendingLicensingを使用しましたが、クラックされたバージョンではライセンスチェックがまったく行われません。私はProGuardを使用して難読化しましたが、それでもハッカーの意欲を削ぐことはありません。

質問1:Googleの指示に従ってapkファイルに署名しました。しかし、それでも、彼らはコードを変更し、ライセンスチェックの部分を取り除いた。apkファイルに署名することは、人々がファイルの内容を改ざんしないように設計されているというのは間違っていますか?

質問2:Win32 .exeプログラムの場合、ファイルが変更されているかどうかを判断するためにチェックサムを使用していました。仕組みは次のとおりです。.exeを作成するときに、ツールを使用してファイルのバイトコンテンツの合計を計算し、ファイルのどこかに、たとえばテキストパターン「MYSIGNATURE」の4バイト後に詰め込みます。 。次に、実行時に、プログラムは.exeファイルを開き、バイト合計を計算して、署名後の整数と比較します。

誰かがapkファイルでこのアプローチを試しましたか?あなたの経験を共有してみませんか?

4

4 に答える 4

30

最終的に、Androidに組み込まれているアプリの保護は非常に貧弱です。これがあなたのベストプラクティスです。

1)はいコードの難読化、署名されたコード、およびライセンス検証サーバーを使用するというGoogleの推奨事項は、ソフトウェアの盗難を防ぐように設計されています。ただし、それらの実装には大きな欠陥があります。APKを実行する必要がある唯一の要件は、APKが署名されていることです。誰が署名したかは関係ありません。あなたの署名が署名されたものであるというチェックはありません。したがって、それをクラックするには、ライセンスチェックを削除し、必要な証明書を使用して再署名するだけです。次に、ユーザーは[非市場アプリを許可する]をオンにして携帯電話にロードできます。

Googleライセンスをそのまま使用しないでください。コードを大幅に変更します。キーを生成するときに使用するいくつかの新しいパラメータを追加します。コードを移動/再構築します。Googleライセンスライブラリをライブラリプロジェクトとして含めないでください。コードに直接入れてください。コードを可能な限りひねくれた、ぎこちないものにします。何もしない関数を追加しますが、その場で値を変更します。後でそれらを元に戻す他の関数を作成します。コードベース全体にライセンス検証を広げます。

これらの手順を実行しないと、コードが自動的に解読される可能性があります。これらの手順を実行することにより、少なくともクラッカーはそれを手で割るのに時間をかける必要があります。それはおそらくせいぜい数時間しかかからないでしょう。しかし、数時間は、標準のGoogleライセンスレイヤーを即座にクラックするよりもはるかに長い時間です。新しくリリースされたAndroidパッケージを実際に自動ダウンロードするクラッカーツールがあり、標準のAndroidライセンスを使用している場合は、それらをクラックして、クラックされたAPKをこれらのタイプのWebサイトにアップロードします。バニラ実装ではなく実装を作成することで、ほんの数時間の労力で、物事をはるかに難しくします。

2)これは一般的な亀裂防止技術です。必要に応じて、Androidでこれを行うことができます。しかし、それは約5分で割れる可能性があります。あなたがグーグルなら、この特定のテクニックをクラックする方法についてのチュートリアルがあります。基本的には、コードでCRC呼び出しを探し、CRCが戻った後にチェックを削除するだけです。

Androidには固有のセキュリティはありません。あなたはどんな電話でもroot化してAPKをダウンロードすることができます。APKを簡単にハッキングしてデバッグを有効にし、コードをステップ実行するだけで、コードに保存されているキーを確認できます。だから結局、私はこれにあまり時間をかけないでしょう。Androidアプリを保護することは不可能です。上記のリストにある常識的なことをして、次に進みます。

3)本当にパラノイアの場合は、独自のライセンスサーバーに独自のライセンスを実装できます。これは私が採用したアプローチですが、盗難からアプリを保護するためのアプローチではありません。GooglePlayを持っていないユーザーでもアプリを購入できるように、ウェブサイトから直接アプリを販売するメカニズムを提供するためです。

于 2011-12-23T04:18:33.213 に答える
12

パッシブ/アグレッシブな自沈

私は@metalideathに同意します。ライセンスコードを難読化して隠蔽することは、絶対確実ではありません。

これは、GoogleとAmazonにデプロイされたアプリで機能する「scuttling」と呼ばれる簡単に隠された手法です。Scuttlingは、アプリによるフロントエンドの著作権侵害の検出です。検出されたらどうするかは、アプリ作成者の権限にあります。

  • アグレッシブな自沈:例:海賊版アプリの終了および/またはアラーム。ネットワーク通信は必ずしも必要ではありません。
  • パッシブスカットリング:アプリの変更はありません。例えば。追跡を有効にします。
  • パッシブ/アグレッシブな自沈:アプリの微妙な変更。例えば。重要な機能を黙って無効にします。海賊を彼らが失敗したと考えさせ、海賊版アプリを非公開にするように導きます。

アプリの名前が変更されたり、GoogleやAmazon以外のソースからインストールされたりした場合、scuttle()はtrueを返します。

// Dont just copy/paste this code - that is what automated crackers look for - cludge it!
// No network communication is required at runtime.
// myPackageName should decode at runtime to "com.yourpackagename"
// google        should decode at runtime to "com.android.vending";
// amazon        should decode at runtime to "com.amazon.venezia"; 

public boolean scuttle(Context context, String myPackageName, String google, String amazon)
{
  //Scallywags renamed your app?

  if (context.getPackageName().compareTo(myPackageName != 0)
    return true; // BOOM!

  //Rogues relocated your app?

  String installer = context.getPackageManager().getInstallerPackageName(myPackageName);

  if (installer == null)
    return true; // BOOM!

  if (installer.compareTo(google) != 0 && installer.compareTo(amazon) != 0)
    return true; // BOOM!

  return false; 
}

結果

次のスクリーンショットは、Google Analyticsから取得したもので、プレイストア(com.android.vending)からの海賊版追跡無料アプリが、積極的なスカットリングで再デプロイされました(プレイストア以外のインストールが検出されて終了しました)。プレイストア以外の(設定されていない)トラッキングドロップ。追跡は必須ではありませんでしたが、これらの測定では有効になっています。

ここに画像の説明を入力してください

討論

サービス署名がスカットリングで役割を果たすことに注意してください。パッケージマネージャーは、一意の署名を使用して一意のパッケージ名を適用します。

これは、アプリが破壊されたときに何をすべきかという問題を提示します(アプリによって海賊が検出されました)。違法コピーは、アプリの男性化(制御されていない配布)の一形態です。分析追跡バックエンドを有効にすることで、すでに検出可能です。Scuttlingを使用すると、アプリの作成者はトラッキングの有無にかかわらずフロントエンドの応答をカスタマイズできます。

攻撃的な自沈は明らかに海賊によって検出可能です(BOOM!)。これにより、さらに亀裂が発生します。受動的な自沈はそれほど明白ではありませんが、追跡が含まれる場合があります。

違法コピーは防止できない場合がありますが、予測可能、検出可能、追跡可能です。

追跡は海賊に克服できない問題を提示する可能性がありますが、それ自体の倫理的問題も提示します。

上で概説したようにネットワーク通信を必要としない受動的/攻撃的な自沈はおそらく最良の解決策です。(ライセンスとは異なり)簡単に隠すことができ、できるだけ目立たないように調整できます。

于 2014-02-08T00:52:39.413 に答える
1

最善のことはそれについて心配しないことです。中国でそれを海賊行為している人々はあなたの顧客ではなく、決してそうなることはありません。利用可能な海賊版がなかったとしても、おそらく彼らはあなたにコピーの代金を払わないでしょう。それに加えて、アプリが人気になると、iOSアプリと同じように、とにかくクローンが作成されます。すでに実装しているセキュリティシステムは、ほとんどのユーザーがアプリを盗用するのを防ぐため、必要なものはすべて揃っています。

アプリの著作権侵害を防止しようとすると、コードベースが損なわれ、保守が困難になるだけでなく、本物の有料顧客に問題が発生する可能性があります。代わりに、アプリの宣伝と、顧客が支払いと使用を簡単に行えるようにすることに重点を置いてください。機能のリクエストやバグレポートに対応することで、とにかくトロイの木馬である可能性のある中国のWebサイトから危険なひびの入ったコピーを探すのではなく、人々が喜んでお金を払う価値を追加します。

最後に、海賊版のコピーをウイルス対策ベンダーに報告します。APKのコピーを提供します。彼らはデータベースに署名を追加して、潜在的に危険なものとしてフラグを立てます。

于 2014-02-11T13:26:06.310 に答える
0

Googleの市場条件を確認した結果、Googleアプリの市場条件に違反しているため、自分のサイトからアプリを直接販売することはできません。コードにカスタム保護を実装するのが最善の方法だと思います。コードは簡単に分解できるため、標準的な方法は効果的ではありません

于 2012-02-04T00:37:53.260 に答える