個人が1つのデバイスで複数の無料試用を受けることなく、各デバイスに1つの無料試用を提供するサービスを提供することは可能ですか?不可能な場合は、複数の無料試用を受けることが困難になる方法を知っていますか?デバイスごとに1つの試用をすることは可能ですか?
答えて
デバイスの一意のID、要求日、および独自の秘密鍵に基づいてライセンスキーを生成して、特定の日付までしか有効でないライセンスを作成することができます。
アプリケーションは、ライセンスキーが公開鍵でデコードされ、有効期限とデバイスIDが比較されることで、ライセンスキーが有効であることを確認します。ライセンスキーは所定の日付と特定のデバイスIDに対してのみ有効なので、人々は偽の要求を偽造することはできません。
(ヒント:公開鍵暗号について読んで)
しかし、それは完全に誰にでもできるではありません。実際に決定された攻撃者は、自分のデバイスをルートでき、 "getDeviceId()"によって返された識別子を制御できるカスタムファームウェアをインストールできます。これは大部分の人がやりたいことではなく、ほとんどの人が代わりの無料アプリを見つけたり、そのルートを経由するのではなくアプリを購入したりするだろう。そのような決意とスキルを持つクラッカーたちに対して、あなたができることはあまりありません。
攻撃の代替手段は、アプリケーションに付属する公開鍵を攻撃者の秘密鍵/公開鍵の組み合わせに置き換えることで、偽造アプリケーションのライセンスキーを生成する鍵生成プログラムを作成する可能性があります。自分の実行ファイルの自己検証によってこの攻撃を難しくすることができます。
セキュリティ方式は絶対に使用できません。java/androidアプリケーションをリバースエンジニアリングすることができ、決定されたハッカーがアプリケーションを偽装し、ライセンスチェックを無効にできます。許可されていないアプリケーションの使用を防ぐ唯一の方法は、アプリケーションをまったく配布しないことです。
確かに、自分のサーバーにデバイスIDを保存するように設定する必要があります。 iPhone上で、あなたが
UIDevice *device = [UIDevice currentDevice];
NSString *uniqueIdentifier = [device uniqueIdentifier];
を使用してUDIDを取得することができますが、データベースの呼び出しを行うと、保存されたリストにuniqueIdentifier
をacompare、唯一の裁判は、デバイスごとに起動することができることを確実にするかもしれません。
アンドロイドでは、getDeviceID()
は固有のデバイス識別子を提供します。これについてはthe documentationをチェックしてください。
私が何かを見逃していないなら、私の解決策は簡単でしょう。私は、アプリケーション自体ではなく、アプリケーションによって提供されるサービスを期限切れにする予定です。これは、oAuthのようなトークンメカニズムを使用して行うことができます。 (かなりの寿命を持つ有効期限のあるトークン、この場合は試用期間)。クライアント登録プロセス中に、私はアンドロイドデバイスIDと要求された時間の関数としてリクエストトークンを作成します。 Checkout oAuth、それは面倒かもしれませんが、ほとんどの主要なサービスプロバイダがそれを使用しています。
頭がおかしい単純な方法で、より複雑なスキームの効果の99%を得ることができると思います。試用期間が終了したことを示すデバイスのどこかにファイルを保存してください。確かに、ハイテクに精通したユーザーはファイルを見つけて削除することができますが、大多数は気にしません。デバイスは謎の魔法のスラブです。内部のファイルに戸惑っていると、小さなノームが激しく画面。
ロックファイルを隠し、デバイスIDに基づいて名前と場所を変更することで、試行スキームを回避する方法について誰かが説明を共有するのがさらに難しくなります。
他の回答として、システムは絶対に安全ではありません。常にあなたよりもきれいで、あなたの計画を傷つける人は誰かあります。トリックは、あなたの時間を無駄にしないで、この人に精神的なトレーニングを与え、代わりに大多数の人に対応します。
Wi-FiアダプタのMACアドレスを保存するのはどうですか?おそらくあなたとあなたのアプリはそのMACが既に登録されている場合、サーバーにクエリを実行します。
ユーザーの許可が必要です。アプリの最初の実行時に、現在のデバイスのMACアドレスが既に登録されているかどうかをサーバーに照会しますか?そうでない場合は、サーバーにMACアドレスを格納します。すでに登録されている場合は、引き続き使用するためにアプリを購入するようユーザーに依頼します。
この方法は、追加のセキュリティとロックおよび/または試用期間を提供するために、Lie Ryanが提案したいくつかの暗号化アルゴリズムで補うことができます。
私はiPhoneについてよく知らないけど、すべてのiPhoneにはWi-Fiアダプタがあり、Wi-Fiアダプタごとに固有のMACアドレスがあると信じています。また、MACを保存するとプライバシーに関する問題や懸案事項が発生する可能性があるため、このソリューションの正当な側面を確認してください。したがって、これを使用する前に、該当する法律を確認してください。
- 1. gdbインスタンスごとに1つのスレッドを持つことは可能ですか?
- 2. TeamCityにSVNコミットごとに1つのビルドを作成させることは可能ですか?
- 3. AirConsoleでユーザーごとの永続データを持つことは可能ですか?
- 4. 2つのMySQLデータベースを1つにマージすることは可能ですか?
- 5. 2つのxcodeアプリを1つにマージすることは可能ですか?
- 6. は、PHPベースのソフトウェアの試用版を作ることは可能ですか?
- 7. I2Cスレーブインターフェイスだけを持つ2つのデバイスと通信することは可能ですか? ATtiny841とHDC1080センサ
- 8. インターフェイスとドメインオブジェクトを1つのソリューションに含めることは可能ですか?wcfサービスの別のソリューションで実装することは可能ですか?
- 9. ダイナミックメニューの1つのクエリでサブカテーテルサブサブカテゴリをフェッチすることは可能ですか?
- 10. 1つのサーバーに2つのブログ用に2つのドメインを持つことは可能ですか?
- 11. は、かつてここで[OK]を秒ごとに1
- 12. 1つで2つのアクティビティをマージすることは可能です
- 13. 1つのasp.netサイト/ DNNサイトに2つのバージョンのMSレポートライブラリを使用することは可能ですか
- 14. 2つの "パネル"に1つの.net ASP MVCコントローラを使用することは可能ですか?
- 15. findViewByIdではなく、ビューごとにボタンを見つけることは可能ですか?
- 16. スプリングセッションを使用して2つのセッションを1つのセッションで作成することは可能ですか
- 17. BackupAgentにはデバイスごとに1つのクラウドバックアップがありますか?
- 18. 1つのプロジェクトでMEFとプリズム(CAL)を使用することは可能ですか?
- 19. VueJs。 1つを<slot>に渡すことは可能ですか?
- 20. 2つのモデルを1つのビューで使用することは可能ですか
- 21. 私はAndroidのデバイス番号を取得することは可能ですか
- 22. ffmpegでASIOデバイスからオーディオをキャプチャすることは可能ですか?
- 23. AndroidデバイスにHALドライバをインストールすることは可能ですか?
- 24. 複数のデバイスでオーディオチャンネルをストリーミングすることは可能ですか
- 25. 2つのWARファイル+ 1つのEJB.jarファイルを使用してアプリケーションをデプロイすることは可能ですか
- 26. これら2つのデータベース列を1つに結合することは可能ですか?
- 27. すべてのVkFrameバッファに1つのVkCommandBufferを使用することは可能ですか
- 28. linuxでは1つのコマンドに2つの同じフラグを追加することは可能ですか?
- 29. は、win32アプリケーションでactiveXコントロールを使用することは可能ですか?ことは可能であるが、
- 30. 1つのデータフレームを別のデータフレームから分割することは可能ですか?ここで
アンドロイドIDは明らかにユニークではないことに注意してください。つまり、すべてのデバイスが同じIDを持つモデル/ファームウェアバージョンが存在するとします。 –
私はそれを行う:)また、Windows Mobile。一意の端末IDはAndroidでは非常に難しいことに注意してください。 –
Settings.Secureで取得したデバイスIDは、デバイスの工場出荷時のリセット時に変更できます。 TelephonyManagerで取得したデバイスIDが存在しない可能性があります(デバイスが電話でない場合など)。 –