私は自分のソフトウェア用に大雑把なライセンス キーを持っています。このライセンス キーは、マシンのすべての 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;
}
}