2013-06-11 4 views
0

나는 내 컴퓨터의 모든 mac 주소를 찾아서 암호화 한 후 레지스트리에있는 암호화 된 값과 비교하는 내 소프트웨어에 대한 오리지널 라이센스 키가 있습니다. 레지스트리의 값이 방금 찾은 값 중 하나와 일치하면 소프트웨어가로드됩니다. 나는 항상 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; 
      } 
     } 
+3

_ "왜 아무도 MAC 주소가 고정되어 있지 않은 이유를 설명 할 수 있습니까?"- 그렇지 않기 때문입니다. 그 이유는 기계 관리자에게 문의하십시오. 여러 가지 이유가있을 수 있습니다. _ 또는 "이 문제를 극복하는 방법"_ _ "하드웨어 기반 소프트웨어 라이센스 키 구현 방법"_에 대한 300 개 이상의 질문을 참조하십시오. – CodeCaster

+0

쿼리를 다음으로 변경했습니다. theQueryBuilder.Append ("SELECT MACAddress FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = true"); 이렇게하면 하나의 네트워크 어댑터로 제한됩니다. 이는 라이센스 키가 네트워크 어댑터를 변경하는 경우 다시 입력해야한다는 의미입니다. 그러나 적어도 당분간은 상수 값과 비교한다는 의미입니다. –

답변

0

여러 가지 이유 :

  1. 그들은
  2. 의 WMI 열거 다른 순서로 반환 할 수 있습니다 네트워크 카드를 (내가 어떤 정렬을 볼 수 없습니다 변경 될 수 있습니다)
  3. 실제로 MAC 주소가 변경 될 수 있습니다 (예 : this is possible)
  4. ...

그런 이유로 MAC 주소가 실제로 라이센스 키를 만드는 데 좋은 참조가 아닙니다.

관련 문제