0

私は自分のソフトウェア用に大雑把なライセンス キーを持っています。このライセンス キーは、マシンのすべての MAC アドレスを見つけて暗号化し、レジストリに保持されている暗号化された値と比較します。レジストリの値が、今見つけた値のいずれかと一致する場合、ソフトウェアが読み込まれます。MAC アドレスに対して常に同じ値が得られると期待していましたが、一部のマシンではそうではありませんでした。MACアドレスが固定されていない理由、またはこの問題を克服する方法を誰か説明できますか?

ありがとう

        //// GET MAC ADDRESS
        String sMacAddress = String.Empty;
        ManagementScope theScope = new ManagementScope("\\\\" +Environment.MachineName + "\\root\\cimv2");
        DGCSLogger.log.Trace("Management scope");

        StringBuilder theQueryBuilder = new StringBuilder();

        theQueryBuilder.Append("SELECT MACAddress FROM Win32_NetworkAdapter");
        ObjectQuery theQuery = new ObjectQuery(theQueryBuilder.ToString());

        DGCSLogger.log.Trace("Creating searcher");

        ManagementObjectSearcher theSearcher = new ManagementObjectSearcher(theScope, theQuery);
        DGCSLogger.log.Trace("Creating collection");
        ManagementObjectCollection theCollectionOfResults = theSearcher.Get();

        DGCSLogger.log.Trace("Got management objects");

        //// GET VALUE FROM REGISTRY
        String sSavedScrambled = RegistryHelper.GetCurrentUserValue(@"Software\VB and VBA Program Settings\FMPos\settings", "LicenceKey");
        String sSavedLicenceKey = String.Empty;
        if (sSavedScrambled != null)
            sSavedLicenceKey = DGCS.Common.Password.UnScramblePassword(sSavedScrambled);

        String sMacNoLicenceKey = String.Empty;
        String sMacNo  = String.Empty;


         ///// COMPARE VALUES WITH REGISTRY VALUE
        foreach (ManagementObject theCurrentObject in theCollectionOfResults)
        {
            DGCSLogger.log.Trace("foreach object");

            if (theCurrentObject["MACAddress"] != null)
            {
                DGCSLogger.log.Trace("foreach object: " + theCurrentObject["MACAddress"].ToString().Substring(0, 5));

                String macAdd =  theCurrentObject["MACAddress"].ToString();

                sMacNo = DGCS.Common.Password.ScrambleMacNumber(theCurrentObject["MACAddress"].ToString());
                sMacNoLicenceKey = DGCS.Common.Password.CreateMacNoPassword(sMacNo);

                DGCSLogger.log.Trace(": " + theCurrentObject["MACAddress"].ToString().Substring(0, 5));

                if (sMacNoLicenceKey.Trim() == sSavedLicenceKey.Trim())
                    lkCheck.HasLicenceKey = true;
            }
        }
4

1 に答える 1

0

考えられるさまざまな理由:

  1. 彼らはネットワークカードを変更した可能性があります
  2. WMI 列挙は、それらを異なる順序で返す場合があります (並べ替えは表示されません)。
  3. 彼らは実際にMACアドレスを変更する可能性があります(はい、これは可能です
  4. ...

そのため、MAC アドレスは実際にはライセンス キーを作成するための適切な参照にはなりません。

于 2013-06-11T09:34:12.947 に答える