1

マシンごとに一意のIDを取得できるように、一意のCPUIDを取得したいと思います。私はwindows.hライブラリから__cpuid()をチェックしましたが、問題はそれが取得するIDであり、それはすべてのタイプのCPUのIDです。I3コアプロセッサを使用していて、I3コアプロセッサを使用している場合は、同じ「一意のID」。

これが、同じタイプのプロセッサで同じ情報を返す__cpuid()からCPUIDを作成するために私が思いついたものです。

std::string GetCPUID(){

            int CPUInfo[4] = {-1};
            __cpuid(CPUInfo, 0);
             if (CPUInfo[0] < 4)
            return ""; //Error on retrieving

            stringstream st;
            for(int i = 0; i <= 3; i++){ 
                         st << CPUInfo[i];
                    }

            return st.str();

}

また、正常に動作する「ハードウェアIDエクストラクタ」というプログラムを確認しました。実際には、必要に応じてGUIとしてUNIQUE CPU IDが返されるため、DLLが利用可能になり、生成されたCPUIDを抽出できるようになりました。 DLLを使用した最もクリーンなコードとその例に従いますが、Windows 7で実行しても何も返されないようです。Windows7のGUIが正しいCPUIDを返しても、他の多くの人がDLLを介してWindows7でこれについて不平を言っていました。 。

ハードウェアIDエクストラクタで自分の作業を表示します。

DLLをダウンロードしたサイトは次のとおりです(C ++、VB、.NETのリンクを選択した場所): http: //www.soft.tahionic.com/download-hdd_id/free-download/free%20download.html

ダウンロードするDLL自体は次のとおりです。http://www.soft.tahionic.com/download-hdd_id/free-download/DLL%20compressed/HardwareIDExtractorC.dll

これは、Hardware ID Extractorから取得したコードです(Visual Studio 2008を使用しています)。

#include <iostream>
#include <windows.h>
#include <conio.h>
using namespace std;

int main (){

    char* (__stdcall *GetIDESerialNumber)(BYTE);

    HINSTANCE DllInst = NULL;
    if (DllInst == NULL) DllInst = LoadLibrary("C:\\HardwareIDExtractorC.dll");
    printf( "LoadLibrary error %d\n", GetLastError() );
    if (DllInst) {
        GetIDESerialNumber = (char* (__stdcall*)(BYTE))GetProcAddress(DllInst, "GetIDESerialNumber");

    //Now call the imported function
        cout << "SN: " <<  GetIDESerialNumber(0);   // 0 = first IDE hard drive in your system 
    }else{
        printf(" - Not Loaded");
    }

    _getch();



return 0;
}

Visual Studioの出力では、次のように言ってDLLが実行されたことを示しています。

'Test.exe': Loaded 'C:\HardwareIDExtractorC.dll', Binary was not built with debug information.

そして、私が得るプログラム出力は次のとおりです。LoadLibrary error 998 - Not loaded

アプリケーションHardwareIDExtractorのように、CPU IDを一意にするために私ができることを誰かが知っていますか?CPU IDを取得する必要があります。これは、HDD情報を取得すると、ユーザーがハードドライブをフォーマットして、指定されたコンピューターでのみ動作するように設計しているため、プログラムが動作しなくなる可能性があるためです。

私はWindows732ビットUltimateとIntelI3Core Processorを使用しています(それがとにかく役立つ場合)。

私は私の質問で明確だったと思います。前もって感謝します!

4

2 に答える 2

3

これを機能させることはできません。Intel は、Pentium III の設計に戻って、cpuid で読み取り可能なプロセッサ シリアル番号を導入しました。これはプライバシー上の懸念から大きな悪臭を放ち、Intel は撤退を余儀なくされました。この機能は後の Pentium III 設計で削除され、元に戻されたことはありません。

指紋には別のソースを使用する必要があります。1 つだけを使用せず、束を収集し、複数が変更された場合にのみ無効と宣言します。NIC の MAC アドレス、RAM サイズ、ディスク ボリュームのシリアル番号などを使用します。SOには、それについてすでに何千もの質問があります。

于 2012-04-21T12:14:04.043 に答える
2

Hardware ID Extractorは信頼性が高く、使いやすいです。私はそれを持ってます。ずっと前にDLLソース コードを購入したので、アップグレードを購入する必要はありませんでした。自分でコードを変更しただけです。

Hans さん、回答ありがとうございます。「Hardware ID Extractor」と呼ばれるこのプログラムは、CPU ID を取得すると主張しています。

はい。DLL は、CPU ID と HDD IDE ID だけでなく、他の多くのハードウェア関連の統計 (ID) も提供します。複数の CPU (AMD と Intel の両方) で試してみましたが、魅力的に動作します。

スキーム

最も安価な「保護」はシリアル番号です。それはただ大きな時間を吸います。一人の無知な顧客がインターネットで利用できるようにすると、誰もがあなたのプログラムを無料で手に入れることができます! 言うまでもなく、今日の「ハッカー」はソフトウェアの保護を破ろうとはしません。彼らはあなたのソフトウェアを偽のクレジット カードで購入し、Web 上でキーを公開するか、有効なクレジット カードでソフトウェアを購入し、30 日間の返金ポリシーを使用して返金します。Plimus (はい、Plimus には近づかないでください) などの一部の狂ったソフトウェア再販業者は、ソフトウェア ベンダーに対してこれを強制しています。古典的なシリアル番号は、恐竜と同じくらい死んでいます。

もう1つの推奨事項であるサーバーベースの保護も、まったく良くありません. 偽のクレジット カード「ハッカー」によるごまかしが少し難しくなり、インターネット全体にキーが漏洩することもありません。しかし、最近では誰もがあなたのプログラムがサーバーに接続するのをブロックするファイアウォール/ウイルス対策を持っているため、顧客の少なくとも半分を失うことになります. そして、モバイルのものはどうですか?または、インターネットへのランダム/まれなアクセスしかありませんか? 機関/企業/組織のファイアウォールの内側で働いている人々については、あえて語ることさえありません。これらの企業のほとんどは、インターネットへのアクセスを Internet Explorer (Firefox でさえも) を除くすべてのプログラムを遮断する無知なネットワーク管理者によって「支配」されています。私はそこに行ったことがあります。私はそれをしました。私を信じてください、それは悪夢です!他に、プログラムをインターネットに接続するには、管理者に行き、多くの要求フォームに記入する必要があります。最終的に、プログラムがインターネットにアクセスできるようになる可能性があります。おそらくプロキシ経由で。

いずれにせよ、プログラムに対して信頼できるキーベースの保護を行うのは非常に簡単です: 顧客にキーを送信しますが、従来のキーではなくハードウェアベースのキーを送信します。このようにして、キーはその特定のシステムでのみ機能します。Web サイトにアナウンスを投稿することもできます。「このキーを公開してください。気にしません」:)

単一のハードウェア ID (たとえば CPU のみ) に依存するのではなく、それらすべてに依存してください。1 つを除くすべてのハードウェア コンポーネントをユーザーが変更/アップグレードできるようにします。したがって、コンピュータ全体を変更しない限り、ライセンスは機能します。新しいコンピュータは 3.4 年ごとに購入されるため (インターネットで統計を見つけました)、ユーザーが 3 つの新しいキー (ライセンスの再アクティブ化) を要求できるようにする必要があります。おそらく、3.4 年の間隔が満了する前に新しいバージョンをリリースするでしょう。そのため、顧客はいずれにしてもアップグレードを購入し、新しいキーを取得する必要があります。

于 2012-04-22T14:12:03.190 に答える