2010-12-03 23 views
5

個人が1つのデバイスで複数の無料試用を受けることなく、各デバイスに1つの無料試用を提供するサービスを提供することは可能ですか?不可能な場合は、複数の無料試用を受けることが困難になる方法を知っていますか?デバイスごとに1つの試用をすることは可能ですか?

+0

アンドロイドIDは明らかにユニークではないことに注意してください。つまり、すべてのデバイスが同じIDを持つモデル/ファームウェアバージョンが存在するとします。 –

+0

私はそれを行う:)また、Windows Mobile。一意の端末IDはAndroidでは非常に難しいことに注意してください。 –

+0

Settings.Secureで取得したデバイスIDは、デバイスの工場出荷時のリセット時に変更できます。 TelephonyManagerで取得したデバイスIDが存在しない可能性があります(デバイスが電話でない場合など)。 –

答えて

11

デバイスの一意のID、要求日、および独自の秘密鍵に基づいてライセンスキーを生成して、特定の日付までしか有効でないライセンスを作成することができます。

アプリケーションは、ライセンスキーが公開鍵でデコードされ、有効期限とデバイスIDが比較されることで、ライセンスキーが有効であることを確認します。ライセンスキーは所定の日付と特定のデバイスIDに対してのみ有効なので、人々は偽の要求を偽造することはできません。

(ヒント:公開鍵暗号について読んで)

しかし、それは完全に誰にでもできるではありません。実際に決定された攻撃者は、自分のデバイスをルートでき、 "getDeviceId()"によって返された識別子を制御できるカスタムファームウェアをインストールできます。これは大部分の人がやりたいことではなく、ほとんどの人が代わりの無料アプリを見つけたり、そのルートを経由するのではなくアプリを購入したりするだろう。そのような決意とスキルを持つクラッカーたちに対して、あなたができることはあまりありません。

攻撃の代替手段は、アプリケーションに付属する公開鍵を攻撃者の秘密鍵/公開鍵の組み合わせに置き換えることで、偽造アプリケーションのライセンスキーを生成する鍵生成プログラムを作成する可能性があります。自分の実行ファイルの自己検証によってこの攻撃を難しくすることができます。

セキュリティ方式は絶対に使用できません。java/androidアプリケーションをリバースエンジニアリングすることができ、決定されたハッカーがアプリケーションを偽装し、ライセンスチェックを無効にできます。許可されていないアプリケーションの使用を防ぐ唯一の方法は、アプリケーションをまったく配布しないことです。

3

確かに、自分のサーバーにデバイスIDを保存するように設定する必要があります。 iPhone上で、あなたが

UIDevice *device = [UIDevice currentDevice]; 
NSString *uniqueIdentifier = [device uniqueIdentifier]; 

を使用してUDIDを取得することができますが、データベースの呼び出しを行うと、保存されたリストにuniqueIdentifierをacompare、唯一の裁判は、デバイスごとに起動することができることを確実にするかもしれません。

アンドロイドでは、getDeviceID()は固有のデバイス識別子を提供します。これについてはthe documentationをチェックしてください。

+0

+1、これは本当に安全ですか?一日の終わりに私は私のサーバーにリクエストを送信しなければなりません、そして、攻撃者がリクエストを偽造するのを止めるのは何ですか? – rook

+0

true; App StoreやMarketplaceのおかげで、アプリの配布を制御することができないので、他の方法はないと私は信じています。これは間違いなく困難ですが、不可能ではありません。 –

+0

@Rook:リクエストを秘密鍵でハッシュし、サーバー上で検証できます。 – donkim

1

私が何かを見逃していないなら、私の解決策は簡単でしょう。私は、アプリケーション自体ではなく、アプリケーションによって提供されるサービスを期限切れにする予定です。これは、oAuthのようなトークンメカニズムを使用して行うことができます。 (かなりの寿命を持つ有効期限のあるトークン、この場合は試用期間)。クライアント登録プロセス中に、私はアンドロイドデバイスIDと要求された時間の関数としてリクエストトークンを作成します。 Checkout oAuth、それは面倒かもしれませんが、ほとんどの主要なサービスプロバイダがそれを使用しています。

4

頭がおかしい単純な方法で、より複雑なスキームの効果の99%を得ることができると思います。試用期間が終了したことを示すデバイスのどこかにファイルを保存してください。確かに、ハイテクに精通したユーザーはファイルを見つけて削除することができますが、大多数は気にしません。デバイスは謎の魔法のスラブです。内部のファイルに戸惑っていると、小さなノームが激しく画面。

ロックファイルを隠し、デバイスIDに基づいて名前と場所を変更することで、試行スキームを回避する方法について誰かが説明を共有するのがさらに難しくなります。

他の回答として、システムは絶対に安全ではありません。常にあなたよりもきれいで、あなたの計画を傷つける人は誰かあります。トリックは、あなたの時間を無駄にしないで、この人に精神的なトレーニングを与え、代わりに大多数の人に対応します。

1

Wi-FiアダプタのMACアドレスを保存するのはどうですか?おそらくあなたとあなたのアプリはそのMACが既に登録されている場合、サーバーにクエリを実行します。

ユーザーの許可が必要です。アプリの最初の実行時に、現在のデバイスのMACアドレスが既に登録されているかどうかをサーバーに照会しますか?そうでない場合は、サーバーにMACアドレスを格納します。すでに登録されている場合は、引き続き使用するためにアプリを購入するようユーザーに依頼します。

この方法は、追加のセキュリティとロックおよび/または試用期間を提供するために、Lie Ryanが提案したいくつかの暗号化アルゴリズムで補うことができます。

私はiPhoneについてよく知らないけど、すべてのiPhoneにはWi-Fiアダプタがあり、Wi-Fiアダプタごとに固有のMACアドレスがあると信じています。また、MACを保存するとプライバシーに関する問題や懸案事項が発生する可能性があるため、このソリューションの正当な側面を確認してください。したがって、これを使用する前に、該当する法律を確認してください。

関連する問題