Beispiel #1
0
        //The name of the file needs to be consequent with the parameters inside the file
        #region         private bool ControlNombre(DatosFile myFileData)
        private bool ControlNombre(DatosFile myFileData)
        {
            bool blnReturn = false;

            try
            {
                if (myFileData.ProductID == _productID && myFileData.ProductVersion == _productVersion)
                {
                    blnReturn = true;
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine("BuscarControlar:Controlar.ControlNombre - " + ex.ToString());
            }

            return(blnReturn);
        }
Beispiel #2
0
        //Checks if the evaluation date (Relative) is not expired
        #region         private bool IsInsideTimeRelative(DatosFile myFileData)
        private bool IsInsideTimeRelative(DatosFile myFileData)
        {
            bool blnReturn = false;

            try
            {
                //Make a key for the register (using ProductID and VersionID, encrypted and based in the LicenseID
                CryptoString myCrypto        = new CryptoString();
                string       RegKeyDirectory = myCrypto.Encrypt((myFileData.ProductID + myFileData.ProductVersion), myFileData.LicenseID);
                string       RegKeyValue     = myCrypto.Encrypt(DateTime.Today.ToShortDateString(), myFileData.LicenseID);

                //If the key exists in the register, retrive his value
                string strInitiationDateFromReg = ReadFromRegistry(string.Empty, RegKeyDirectory);

                //If the key not exists in the register, make one with the date of today (also encrypted)
                if (strInitiationDateFromReg == string.Empty)  //Key doesn't exist --> make a new one
                {
                    WriteToRegistry(string.Empty, RegKeyDirectory, RegKeyValue);
                }

                //Compare the value in the register with today
                strInitiationDateFromReg = ReadFromRegistry(string.Empty, RegKeyDirectory);
                DateTime InitiationDateFromReg = DateTime.Parse(myCrypto.Decrypt(strInitiationDateFromReg, myFileData.LicenseID));
                DateTime ExpirationDate        = InitiationDateFromReg.AddDays(int.Parse(myFileData.DaysToExpiration));
                if (DateTime.Today <= InitiationDateFromReg)
                {
                    blnReturn = true;
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine("BuscarControlar:Controlar.IsInsideTimeRelative - " + ex.ToString());
            }

            return(blnReturn);
        }
Beispiel #3
0
        public bool Aceptado()
        {
            bool          blnReturn = false;
            bool          FileFound = false;
            bool          FileCorrectlyDecrypted = false;
            bool          FileNameCorrect        = false;
            bool          LicenseGoodValidated   = false;
            List <string> myMACs       = new List <string>();
            List <string> myIPs        = new List <string>();
            DatosFile     myFileData   = new DatosFile();
            TextReader    myTextReader = null;

            try
            {
                //Debug.WriteLine("** Begin Comprobation - " + DateTime.Now.Millisecond);

                //Search for spsprofessional.lic file in %windows32% directory
                FileFound = EncontrarFile(ref myTextReader);

                if (FileFound == true)
                {
                    //Try to decrypt the file, checks that everything is correct and fill the Object with the values
                    FileCorrectlyDecrypted = LeerFile(myTextReader, ref myFileData);

                    if (FileCorrectlyDecrypted == true)
                    {
                        //Test code
                        //Debug.WriteLine("ProductName - " + myFileData.ProductName);
                        //Debug.WriteLine("ProductID - " + myFileData.ProductID);
                        //Debug.WriteLine("ProductVersion - " + myFileData.ProductVersion);
                        //Debug.WriteLine("LicenseID - " + myFileData.LicenseID);
                        //Debug.WriteLine("RawData - " + myFileData.RawData);
                        //Debug.WriteLine("EngineVersion - " + myFileData.LicenseEngineVersion);
                        //Debug.WriteLine("LicenseDate - " + myFileData.LicenseDate);
                        //Debug.WriteLine("LicenseSort - " + myFileData.LicenseSort);
                        //Debug.WriteLine("EvaluationDate - " + myFileData.DateExpiration);
                        //Debug.WriteLine("EvaluationDays - " + myFileData.DaysToExpiration);
                        //Debug.WriteLine("MAC - " + myFileData.MacAddress);
                        //Debug.WriteLine("IP - " + myFileData.IpAddress);
                        //Debug.WriteLine("Domain - " + myFileData.DomainName);
                        //Debug.WriteLine("ClientName - " + myFileData.ClientName);
                        //Debug.WriteLine("Other - " + myFileData.OtherInformation);

                        //The name of the file need to be consequent with the parameters inside the file
                        FileNameCorrect = ControlNombre(myFileData);

                        if (FileNameCorrect == true)
                        {
                            //Based in the type license, check if the license is correct
                            switch (myFileData.LicenseSort)
                            {
                            case DatosFile.TypeLicense.EvaluationDate:
                                LicenseGoodValidated = IsInsideTimeAbsolute(myFileData.DateExpiration);
                                break;

                            case DatosFile.TypeLicense.EvaluationDays:
                                LicenseGoodValidated = IsInsideTimeRelative(myFileData);
                                break;

                            case DatosFile.TypeLicense.MAC:
                                myMACs = DireccionesM();
                                LicenseGoodValidated = FoundInList(myMACs, myFileData.MacAddress);
                                break;

                            case DatosFile.TypeLicense.IP:
                                myIPs = DireccionesI();
                                LicenseGoodValidated = FoundInList(myIPs, myFileData.IpAddress);
                                break;

                            case DatosFile.TypeLicense.Domain:
                                //Search for Domain Name
                                //TODO
                                break;

                            default:
                                LicenseGoodValidated = false;
                                break;
                            }

                            blnReturn = LicenseGoodValidated;
                        }
                    }
                }

                //Debug.WriteLine("** End Comprobation - " + DateTime.Now.Millisecond);
            }
            catch (Exception ex)
            {
                Debug.WriteLine("BuscarControlar:Controlar.Aceptado - " + ex.ToString());
            }

            return(blnReturn);
        }
Beispiel #4
0
        //Decript the Licence File
        #region         private bool LeerFile(TextReader myTextReader, ref DatosFile myFileData)
        private bool LeerFile(TextReader myTextReader, ref DatosFile myFileData)
        {
            /* File Schema:
             * File Format: spsprofessional_[ProductID]_productVersion].lic
             *
             * spsProParts                          --> Always
             * http://www.spsprofessional.net           --> Always
             * ProductName: productAAA              --> Product Name, doesn't have any meaning
             * ProductVersion: 1.0.0.0              --> Needs to be the same as in the name of the lic file (used internally without dots)
             * ProductID: 123456789ABCDEF           --> Needs to be the same as in the name of the lic file
             * LicenseID: 987654321QWERTY           --> IMPORTANT: needed als public key to decrypt the raw data
             * RXpTjTdBl7RP1oQqfqScDlYXQxgAYPg+m    --> Raw data
             *
             * Raw data format:
             * EngineVersion|LicenseDate|TypeLicense|EvaluationDate|EvaluationDays|MAC|IP|Domain|Client|Other
             * 1.0|20071125|mac|||112233445566|||ClientAAA||
             * EngineVersion                        --> The version of this Class. In the future, the class can change
             * LicenseDate                          --> Date of issuance of the License - yyyymmdd
             * TypeLicense                          --> can be: mac - ip - days - date - domain
             * EvaluationDate                       --> If the expiration evaluation periode is absolute - yyyymmdd
             * EvaluationDays                       --> If the expiration evaluation periode is relative - number of days
             * MAC                                  --> MAC Address to check, if TypeLicense is "mac"
             * IP                                   --> IP Address to check, if TypeLicense is "ip"
             * Domain                               --> Domain name to check, if TypeLicense is "domain"
             * Client                               --> Client name and other information
             * Other                                --> Reserved for other information
             */

            bool   blnReturn   = false;
            string OneLine     = string.Empty;
            int    LineCounter = 1;

            string[] TempString = new string[2];

            try
            {
                //Read each line of the File, inclusive the raw data (last line), and set it in the object
                while ((OneLine = myTextReader.ReadLine()) != null)
                {
                    //Console.WriteLine(OneLine);

                    switch (LineCounter)
                    {
                    case (1):
                        //Nothing to do --> "spsProParts"
                        break;

                    case (2):
                        //Nothing to do --> "http://www.spsrproparts.net"
                        break;

                    case (3):
                        TempString             = OneLine.Split(':');
                        myFileData.ProductName = TempString[1].Trim();
                        break;

                    case (4):
                        TempString = OneLine.Split(':');
                        myFileData.ProductVersion = TempString[1].Trim().Replace(".", string.Empty);
                        break;

                    case (5):
                        TempString           = OneLine.Split(':');
                        myFileData.ProductID = TempString[1].Trim();
                        break;

                    case (6):
                        TempString           = OneLine.Split(':');
                        myFileData.LicenseID = TempString[1].Trim();
                        break;

                    case (7):
                        myFileData.RawData = OneLine;
                        break;

                    default:
                        break;
                    }
                    LineCounter++;
                }
                myTextReader.Close();

                //Read the values of the encrypted last line, and set it in the object
                CryptoString myCryptoString = new CryptoString();
                string       RawLine        = myCryptoString.Decrypt(myFileData.RawData, myFileData.LicenseID);
                //string RawLine = myCryptoString.Encrypt("1.0|20071125|days||1|11223344556677|||clientAA||", myFileData.LicenseID);
                //Console.WriteLine(RawLine);

                TempString = RawLine.Split('|');
                myFileData.LicenseEngineVersion = TempString[0].Trim();
                myFileData.LicenseDate          = TempString[1].Trim();
                //Type Licenses can be: mac - ip - days - date - domain
                switch (TempString[2].Trim().ToLower())
                {
                case ("mac"):
                    myFileData.LicenseSort = DatosFile.TypeLicense.MAC;
                    break;

                case ("ip"):
                    myFileData.LicenseSort = DatosFile.TypeLicense.IP;
                    break;

                case ("days"):
                    myFileData.LicenseSort = DatosFile.TypeLicense.EvaluationDays;
                    break;

                case ("date"):
                    myFileData.LicenseSort = DatosFile.TypeLicense.EvaluationDate;
                    break;

                case ("domain"):
                    myFileData.LicenseSort = DatosFile.TypeLicense.Domain;
                    break;

                default:
                    break;
                }
                myFileData.DateExpiration   = TempString[3].Trim();
                myFileData.DaysToExpiration = TempString[4].Trim();
                myFileData.MacAddress       = TempString[5].Trim();
                myFileData.IpAddress        = TempString[6].Trim();
                myFileData.DomainName       = TempString[7].Trim();
                myFileData.ClientName       = TempString[8].Trim();
                myFileData.OtherInformation = TempString[9].Trim();

                blnReturn = true;
            }
            catch (Exception ex)
            {
                Debug.WriteLine("BuscarControlar:Controlar.LeerFile - " + ex.ToString());
            }

            return(blnReturn);
        }