4

.NET実行可能ファイルを特定のマシンに制限して、そのマシンでのみ実行できるようにすることは可能ですか。

4

8 に答える 8

10

はい、私は自分のアプリでそれを行います。それは素晴らしく機能します。

WMIを使用すると、システム情報(CPUID、MacID、HDDの詳細)を簡単に取得できます(強くお勧めします)。

私は(あなたがプロのハッカーでない限り)実質的に絶対確実なシステムを作成しました。

私のアプリがユーザーのPCに初めてインストールされると、Webサービスを使用してサーバーに戻ります。彼らはパスワードハッシュを使用して自分自身を識別し、クライアントの認証コード/注文IDを探します。

クライアントが正しい認証コードを持っている場合、アプリケーションはシステムの詳細を暗号化してクライアントのコンピューターに保存し、情報のハッシュをサーバーに送信して保存します。次に、いくつかのハッシュフラグを使用してクライアントのコンピューターでソフトウェアがアクティブ化され、アプリが実行されるたびに、システム情報がファイル内のハッシュ情報と比較されます。

クライアントがコンピューターを再フォーマットする場合、必要なのは、ソフトウェアを自動的に再度アクティブ化するための注文IDだけです(プログラムがサーバーに確認するときに、システムの詳細が検証され、一致する場合は承認されます)。クライアントがソフトウェアを別のマシンにインストールする場合は、サポートチームに連絡して承認を得る必要があります。

-すべての情報は暗号化およびハッシュ化されます(二重暗号化)。-すべてのコードは難読化されてパックされています。

現在、かなり安全に機能しています。

そうです、それは可能です。フィールドテストが行​​われ、他の保護システムと同様に機能することが確認されています。

于 2009-07-18T06:02:48.303 に答える
2

プロセッサIDを使用して毎回確認することはできません(?)

これは私がしばらく前に書いたサンプルコードです。

Imports System.Management

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        'Declare following three object variables

        Dim objMOS As ManagementObjectSearcher
        Dim objMOC As Management.ManagementObjectCollection
        Dim objMO As Management.ManagementObject

        'Now, execute the query to get the results
        objMOS = New ManagementObjectSearcher("Select * From Win32_Processor")

        objMOC = objMOS.Get

        'Finally, get the CPU's id.
        For Each objMO In objMOC
            MessageBox.Show("CPU ID = " & objMO("ProcessorID"))
        Next

        'Dispose object variables

        objMOS.Dispose()
        objMOS = Nothing
        objMO.Dispose()
        objMO = Nothing

    End Sub
End Class
于 2009-07-17T09:21:40.563 に答える
2

マシンにNICがあると仮定すると、MACアドレスを使用できます。

.NETのネットワークアダプタからMACアドレスを読み取る

于 2009-07-17T13:34:38.053 に答える
1

箱から出して-いいえ。

インストール中にマシン署名を生成してみて、署名ファイルが存在しないか、この特定のマシンで無効な場合にアプリケーションが起動しないようにロックすることができます。

于 2009-07-17T09:23:54.503 に答える
1

.NETは、一般的に利用可能なツールを使用してソースコードに戻すのが非常に簡単であるため、ひどいものです。(約2分で.NETをクラックするデモを行います)。Cyrilのソリューションは、ターゲットマシンに対して暗号化と指紋のハッシュを使用しているため、良さそうです。残念ながら、これらのソリューションは、ある種の中間者攻撃に対して脆弱ですが、彼のソリューションはほとんどのソリューションよりも優れています。マシンバインディングの問題の1つは、使用するフィンガープリントトークン(MACアドレス、CPUシリアル番号など)をOS呼び出しで取得する必要があることです。これは、中間レベルのクラッカーによってスプーフィングされる可能性があります。

CodeMeter、Hasp HL、KeyLokなどの優れたドングルを使用するソフトウェアの$値に応じて、重要な保護が提供されます。ただし、「悪い」ドングルを使用しても少しは役に立ちません。

于 2011-03-22T21:43:07.190 に答える
0

このためには、マシンのMAC ID、HDD ID、CPUIDなどから生成されたある種のマシンコードを使用してライセンスコードを埋め込む必要があります。

次に、この埋め込みコードを、ソフトウェアの実行時に生成されたマシンコードで確認します。これらが一致しない場合は、ソフトウェアが別のマシンで使用されていることを意味します。

このシナリオをサポートする既製のライセンススキームが必要な場合は、CryptoLicensingを参照してください。

于 2010-12-13T09:53:53.013 に答える
0

EXEにデジタル署名し、証明書を使用して何らかの保護を支援することもできますが、EXEが特定のPCで実行されないようにする場合は、ユーザーにパスワードの入力とキーファイルの使用を求める方がよいでしょうか。

.NET暗号化の http://aspnet.4guysfromrolla.com/articles/112002-1.aspxhttp://www.eggheadcafe.com/articles/20020630.asp

于 2009-07-17T13:24:14.760 に答える
0

このシナリオをサポートする既製のライセンススキームが必要な場合は、CryptoLicensingを参照してください。

これは実際には真実ではありません。CryptoLicensingはコンピューター名のみを使用し、CPUIDは使用しません。

于 2012-04-03T00:54:45.173 に答える