簡述.Net下的應用程序授權實戰步驟

  看了「看了下面那篇「Crack別人應用程序」的文章有感,簡述.Net下的應用程序授權。」,自己實際操作了把得出的心得 。這裏原理啊背景啊什麽都不介紹了,笑望人生已經在他的BLOG上都寫的相當清楚了,有什麽不細節不明白的可以去看原文。推薦先大概看下原文,現看我下面的步驟,然後再回頭去研究原文的細節。由于我自己寫的實例是用在公司一項目中,源代碼就不方便放出來了,嘿嘿。
  第一步:生成一組公鑰和私鑰,公鑰用于你發布程序,私鑰屬于注冊碼生成。view plaincopy to clipboardprint?
  using(RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
  {
  // 公鑰
  string pubkey = rsa.ToXmlString(false);
  
  // 私鑰
  string prikey = rsa.ToXmlString(true);
  
  //如果是webForm就Response.Write(pubkey + 」<br/>」 + prikey); 下
  //如果是winForm就MessageBox.Show("公鑰:" + pubkey + "\r\n私鑰:" + prikey); 下
  }
  using(RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
  {
  // 公鑰
  string pubkey = rsa.ToXmlString(false);
  // 私鑰
  string prikey = rsa.ToXmlString(true);
  //如果是webForm就Response.Write(pubkey + 」<br/>」 + prikey); 下
  //如果是winForm就MessageBox.Show("公鑰:" + pubkey + "\r\n私鑰:" + prikey); 下
  }第二步:取得機器硬件編碼。我選用CUP的編號。view plaincopy to clipboardprint?
  /// <summary>
  /// 獲取CPU編號
  /// </summary>
  /// <returns></returns>
  public string GetCpuId()
  {
  
  ManagementClass mc = new ManagementClass("Win32_Processor");
  ManagementObjectCollection moc = mc.GetInstances();
  
  String strCpuID = null;
  foreach (ManagementObject mo in moc)
  {
  strCpuID = mo.Properties["ProcessorId"].Value.ToString();
  break;
  }
  return strCpuID;
  
  }
  /// <summary>
  /// 獲取CPU編號
  /// </summary>
  /// <returns></returns>
  public string GetCpuId()
  {
  ManagementClass mc = new ManagementClass("Win32_Processor");
  ManagementObjectCollection moc = mc.GetInstances();
  String strCpuID = null;
  foreach (ManagementObject mo in moc)
  {
  strCpuID = mo.Properties["ProcessorId"].Value.ToString();
  break;
  }
  return strCpuID;
  }第三步:編寫注冊碼生成WinForm程序,使用CUP的編號來生成注冊碼,當然你也可以用 WebForm來寫。view plaincopy to clipboardprint?
  using(RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
  {
  rsa.FromXmlString(「私鑰」);
  // 加密對象
  RSAPKCS1SignatureFormatter f = new RSAPKCS1SignatureFormatter(rsa);
  f.SetHashAlgorithm("SHA1");
  byte[] source = System.Text.ASCIIEncoding.ASCII.GetBytes(「CUP的編號」);
  SHA1Managed sha = new SHA1Managed();
  byte[] result = sha.ComputeHash(source);
  
  byte[] b = f.CreateSignature(result);
  
  msg.Text = Convert.ToBase64String(b); //這裏就得到了string形式的注冊碼
  
  //再接下來你可以把生成的注冊碼保存成license.lic文件,license.lic文件也沒什麽特別的格式就是相當于把注冊嗎保存到一個txt文件中,無非這個txt文件的後綴改成了lic,你要高興也可保存成其它多種格式。
  //也可以保存在注冊表中或是web.config中,總之能讓你的發布的應用程序能讀的到就行。
  }
  using(RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
  {
  rsa.FromXmlString(「私鑰」);
  // 加密對象
  RSAPKCS1SignatureFormatter f = new RSAPKCS1SignatureFormatter(rsa);
  f.SetHashAlgorithm("SHA1");
  byte[] source = System.Text.ASCIIEncoding.ASCII.GetBytes(「CUP的編號」);
  SHA1Managed sha = new SHA1Managed();
  byte[] result = sha.ComputeHash(source);
  byte[] b = f.CreateSignature(result);
  msg.Text = Convert.ToBase64String(b); //這裏就得到了string形式的注冊碼
  //再接下來你可以把生成的注冊碼保存成license.lic文件,license.lic文件也沒什麽特別的格式就是相當于把注冊嗎保存到一個txt文件中,無非這個txt文件的後綴改成了lic,你要高興也可保存成其它多種格式。
  //也可以保存在注冊表中或是web.config中,總之能讓你的發布的應用程序能讀的到就行。
  }第四步:在發布的程序相關地方添加對注冊碼有效性的驗證。如添加在程序啓動的時候,程序執行特定操作的時候等等,總之看你的需要做有效性的驗證。view plaincopy to clipboardprint?
  //相關注冊碼獲取代碼……
  //以下代碼是發布程序使用公鑰對注冊碼進行驗證
  using(RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
  {
  rsa.FromXmlString(「公鑰」);
  RSAPKCS1SignatureDeformatter f = new RSAPKCS1SignatureDeformatter(rsa);
  
  f.SetHashAlgorithm("SHA1");
  
  byte[] key = Convert.FromBase64String(「注冊碼」);
  
  SHA1Managed sha = new SHA1Managed();
  byte[] name = sha.ComputeHash(ASCIIEncoding.ASCII.GetBytes(「注冊碼」));
  if(f.VerifySignature(name,key))
  msg.Text = "驗證成功"; //可以return true;等方式返回相應的狀態
  else
  msg.Text = "不成功";
  }