alien Posted January 22, 2012 Report Posted January 22, 2012 This tutorial will explain the basics of generating and verifying of HWID's.First things first, "What the hell is a HWID??" Most of you already know this so I will keep it short. Ever since Windows XP Product Activation came around, when the OS is installed an unique ID is generated for the basic hardware components in the system. This ensures that a software will be bound to those unique ID, so it can't be moved/run on other machines. Of course there are methods to bypass this, but this is not the scope of this tutorial. Also to make it more "secure" we will be using the triple DES algorithm to crypt the generated CPU and HDD Id's.A short overview:The class will be called Hwid and will contain 2 properties(CpuId,HddId plain text), Generate, Verify and EncryptString methods.The Verify method takes 2 parameters: password(used for DES) and path. The path can be also an URL to a website hosting the file with the HWID's.The void Main() contains a simple console application to see how Hwid class works.The code is commented and self explanatory I would say.Source code: hg clone https://bitbucket.org/rokill3r/hwidHwid class class Hwid { private string _cpuId = string.Empty; private string _hddId = string.Empty; public Hwid() { _cpuId = GetCpuId(); _hddId = GetHddId("C"); } /// <summary> /// Gets first CPU unique ID /// </summary> /// <returns></returns> private string GetCpuId() { ManagementClass cpuManager = new ManagementClass("win32_processor"); ManagementObjectCollection cpuCollection = cpuManager.GetInstances(); foreach (ManagementObject cpu in cpuCollection) { // Return first CPU Id return cpu.Properties["processorID"].Value.ToString(); } return string.Empty; } /// <summary> /// Gets the drives unique ID /// </summary> /// <param name="drive">Drive name(eg: C,D..)</param> /// <returns></returns> private string GetHddId(string drive) { ManagementObject dsk = new ManagementObject(@"win32_logicaldisk.deviceid=""" + drive + @":"""); dsk.Get(); return dsk["VolumeSerialNumber"].ToString(); } /// <summary> /// Encrypts the HWID using tripple DES algorithm /// </summary> /// <param name="Message">String to crypt</param> /// <param name="Passphrase">Password to use when crypting</param> /// <returns></returns> private string EncryptString(string Message, string Passphrase) ... /// <summary> /// Generates an encrypted HWID /// </summary> /// <param name="password">Password for the DES crypt algorith</param> /// <returns>Encrypted HWID</returns> public string Generate(string password) { return EncryptString(_cpuId + _hddId, password); } public string Generate(string password, string path) { try { string cryptedHwid = EncryptString(_cpuId + _hddId, password); // Write the crypted Hwid to file System.IO.StreamWriter file = new System.IO.StreamWriter(path); file.WriteLine(cryptedHwid); file.Close(); return cryptedHwid; } catch (Exception ex) { return ex.Message; } } /// <summary> /// Generates an encrypted HWID using the tripple DES algorithm /// </summary> /// <param name="password">Password for the DES crypt algorithm</param> /// <param name="path">Path where the HWID will be saved</param> /// <returns>Encrypted HWID</returns> public string Verify(string password, string path) { try { string db = string.Empty; if (path.Contains("http")) { WebClient webClient = new WebClient(); db = webClient.DownloadString(path); webClient.Dispose(); } else { System.IO.StreamReader file = new System.IO.StreamReader(path); db = file.ReadToEnd(); file.Close(); } if (db.Contains(EncryptString(_cpuId + _hddId, password))) return "HWID OK"; else return "HWID NOT FOUND"; } catch (Exception ex) { return ex.Message; } }void Main()static void Main(string[] args) { Hwid hwid = new Hwid(); // Change this to your desired password; string password = "secret1234"; if (args.Length < 1) PrintHelp(); else switch (args[0]) { case "--display": { Console.WriteLine("CPU ID: " + hwid.CpuId); Console.WriteLine("HDD ID: " + hwid.HddId); Console.WriteLine(); break; } case "--generate": { if (args.Length < 2) { Console.WriteLine("Path not specified!"); break; } string path = args[1]; Console.WriteLine("Encrypted HWID: " + hwid.Generate(password, path)); // If we don't specify the path it will only return the encrypted string //Console.WriteLine("Encrypted HWID: " + hwid.Generate(password)); break; } case "--verify": { if (args.Length < 2) { Console.WriteLine("Path not specified!"); break; } string path = args[1]; Console.WriteLine(hwid.Verify(password, path)); break; } default: { PrintHelp(); break; } } Console.WriteLine("Press any key to continue . . ."); Console.ReadLine(); } Quote
raynor009 Posted January 22, 2012 Report Posted January 22, 2012 Multumesc, chiar incercam recent sa invat si C# Quote