10

C# で記述された 1 つのアプリケーションがあり、1 人のユーザーのみが使用します。私はこのソフトウェアを非常に高い月額料金 (> 10,000 ドル) で提供しています。このアプリケーションを他のユーザーが使用できないように保護したいと考えています。また、1 人のユーザーがライセンス料の支払いをやめた場合、アプリケーションの使用を停止できるようにしたいと考えています。

私は完璧な保護スキームがないことを知っています.SOに関する多くの同様の質問を確認しました.セキュリティを大幅に向上させるために、インストールごとに数時間もかかります。

4

9 に答える 9

12

月額 10,000 の場合、ハードウェアではなく、管理しているハードウェアで実行する余裕があります。ハードウェアを、物理的にアクセスできないデータセンターに配置できます。


ハードウェアは、お客様のサイトのハードウェアで実行する必要があります。

ですから、彼らは自分のデータがどこにあるかについて敏感だと思います。

多くのサードパーティ ライセンス ソリューションがあります (たとえば、Infralution、.Net Reactor、Oreans WinLicense、Armadillo、XHEO DeployLX など)。Microsoft 独自のソリューションに興味がある場合は、InishTech のこちらこちらを参照してください。

于 2009-12-07T00:27:02.230 に答える
9

最善の解決策は、おそらく今日使用されている一般的な戦術の組み合わせです。

アプリケーションをロックダウンする

…ホスト オペレーティング システムの MAC アドレス、ハード ドライブのシリアル番号、および Windows プロダクト キー (利用可能な場合) に。サイトで収集した後、これをアプリケーションにハードコーディングできます。間違ったハードウェアが検出された場合は、シャットダウンします。また、VMware または Virtual PC 統合機能の存在を示唆する項目をレジストリで探し、見つかった場合は実行を拒否します

難読化

…そのため、リバース エンジニアリングやライセンスの削除がより困難になります。CIL は非常に簡単にリバース エンジニアリングできるため、他に何を行うにしても、(前述のように) アプリケーションではこれに重点を置く必要があります。特にシリアライゼーションに依存している場合は、これが正しく機能するまでに多くの時間がかかる場合があります。可能であれば、すべてのアセンブリを 1 つの EXE ファイルにラップします。このファイルは暗号化され、管理されていないブートストラップを含みます。

ハートビートを送る

…ハードウェアまたはサイト固有のデータを含むオフサイト サーバーへ。ソフトウェアをコピーして別のコンピューターで起動すると、ヒントが得られる場合があります。これにより、アプリケーションがオフラインになった場合に警告が表示される可能性もあります。さらに、サーバーからの基本的な暗号化された応答を要求するか、シャットダウンするようにアプリケーションを構成できます。

最後に 1 つ注意してください。船外に出ないでください。おそらく、可能性のある代替手段 (それらが何であれ) に対するアプリケーションの経験により、10,000 ドルが支払われます。保護対策を追加すると、考えられる (非常に厄介な) バグの数が増え、メンテナンス コストが追加され、顧客にとって頭痛の種になります。非常に破壊的なライセンス体系は、クライアントに別の考え方をさせる可能性があります。

于 2009-12-07T02:38:52.953 に答える
8

コードを真に保護し、課金できるようにする唯一の方法は、サブスクリプション ベースの Web アプリケーションを作成することです。それを除けば、機能する可能性のあるいくつかのオプションがあります。

  1. 管理するサーバーでアプリを実行し、そのシステムでのみ実行されるようにアプリを更新し、リモート デスクトップ アクセスを許可する
  2. あなたが制御するリモートのサブスクリプションおよび承認システムにプログラムを接続させる (ただし、これはコードをリバース エンジニアリングすることで回避できます)

余談ですが、ソフトウェア パッケージに月額 10,000 ドルを支払ってくれるクライアントを見つける必要があります。笑。

于 2009-12-07T00:30:00.370 に答える
3

ここでは、Windows プラットフォーム (つまり、Mono ではない) を想定しています。

ソフトウェアがインストールされているマシンに証明書を生成してインストールすることを検討することをお勧めします。つまり、ソフトウェアは、マシンがソフトウェアの実行を許可されていることを確認でき、証明書を使用してデータを暗号化および復号化することもできます。IOW では、アセンブリを暗号化してから動的にロードする前に復号化するか、提供するデータに対して暗号化/復号化を使用できます。

このリンクは、これを確認するための良い出発点になる可能性があります。

于 2009-12-07T01:17:19.077 に答える
3

セキュリティはプロセスです。

私は、誰かがアプリケーションに月額 10,000 を支払う理由を疑問に思います。このアプリケーションの機能を複製することは、おそらくそれほどコストがかからないでしょう。それで、それを使用している実体がそれを別のプログラマーに説明した場合、彼らはそれを複製できますか? おそらく。

いずれにしても、彼らのハードウェアにアクセスでき OS のユーザー名とパスワードを管理している場合は、パスワードを毎月期限切れにするだけです。

于 2009-12-07T00:22:39.290 に答える
2

これは、ハードウェア ドングルが適切な状況のように思えます。誰かにお金を払ってハードウェア ドングルを作成してもらい (余裕があるようです!)、顧客に送ります。ソフトウェアを実行するために必要なドングルで暗号化されたもののロックを解除するためにユーザーがパスワードを入力する必要があるように、ソフトウェアを構築します。

認証は一般に、ユーザーの状況の少なくとも 2 つの側面に基づいています。

  1. あなた何か(バイオメトリクス)
  2. 持っているもの(ドングル)
  3. 知っていること(パスワード)

3 つすべてを使いたい場合は、ハードウェア ドングルと指紋リーダーを組み合わせてください。

于 2009-12-07T03:17:28.320 に答える
2

アプリをボックスにバインドできます。ユーザーにログインを提供することで、ユーザーへの使用を制限することもできます。ユーザーが自分の資格情報とボックスを他の人と共有することについて何ができるかわかりません。

ボックスにバインドするだけで十分な場合は、それを行うためのテクニックがあります。つまり、NIC ハードウェア ID にバインドできます。

于 2009-12-07T00:24:19.103 に答える
1

以前、アプリケーションの起動時に「phone home」認証を使用しました。これにより、サーバーが認証を与えた場合にのみ実行できることが保証されます。

もちろん、これには、認証サーバーで非常に高い可用性を提供できること、および十分に難読化されたコード ベースが必要ですが、非常にうまく機能します。

于 2009-12-07T03:41:38.067 に答える
0

ソフトウェア保護とライセンスの開発に関する記事をご覧ください。ソリューションの選択方法、アプリケーションを難読化する必要がある理由を説明し、コードを解読しにくくするための多くのヒントを提供します。

この記事の要点は、開発の開始時からこれらのことを考えるべきであるということですが、それらに対処するのに遅すぎるということは決してありません。

覚えておくべきことは、アプリケーションが別のマシンで実行されると、100% 確実に実行を防ぐ方法はないということです。注意を払えば、ハードルを十分に高く上げて、ソフトウェアをクラックするよりも購入する方が簡単になるようにすることができます。

必須の免責事項とプラグイン: 私が共同設立した会社は、.NET 用の OffByZero Cobalt ソフトウェア ライセンス ソリューションを作成しています

于 2010-01-05T21:55:04.887 に答える