C#注册机与绑定软件(转发自:韩兆新的博客园的C#学习笔记——软件注册与注册机)

(一)软件的实现:

SoftReg类:

   1: using System;
   2: using System.Collections.Generic;
   3: using System.Linq;
   4: using System.Text;
   5: using System.Management;    //需要引用System.Management.dll
   6:
   7: namespace SoftRegister
   8: {
   9:     class SoftReg
  10:     {
  11:         ///<summary>
  12:         /// 获取硬盘卷标号
  13:         ///</summary>
  14:         ///<returns></returns>
  15:         public string GetDiskVolumeSerialNumber()
  16:         {
  17:             ManagementClass mc = new ManagementClass("win32_NetworkAdapterConfiguration");
  18:             ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"c:\"");
  19:             disk.Get();
  20:             return disk.GetPropertyValue("VolumeSerialNumber").ToString();
  21:         }
  22:
  23:         ///<summary>
  24:         /// 获取CPU序列号
  25:         ///</summary>
  26:         ///<returns></returns>
  27:         public string GetCpu()
  28:         {
  29:             string strCpu = null;
  30:             ManagementClass myCpu = new ManagementClass("win32_Processor");
  31:             ManagementObjectCollection myCpuCollection = myCpu.GetInstances();
  32:             foreach (ManagementObject myObject in myCpuCollection)
  33:             {
  34:                 strCpu = myObject.Properties["Processorid"].Value.ToString();
  35:             }
  36:             return strCpu;
  37:         }
  38:
  39:         ///<summary>
  40:         /// 生成机器码
  41:         ///</summary>
  42:         ///<returns></returns>
  43:         public string GetMNum()
  44:         {
  45:             string strNum = GetCpu() + GetDiskVolumeSerialNumber();
  46:             string strMNum = strNum.Substring(0, 24);    //截取前24位作为机器码
  47:             return strMNum;
  48:         }
  49:
  50:         public int[] intCode = new int[127];    //存储密钥
  51:         public char[] charCode = new char[25];  //存储ASCII码
  52:         public int[] intNumber = new int[25];   //存储ASCII码值
  53:
  54:         //初始化密钥
  55:         public void SetIntCode()
  56:         {
  57:             for (int i = 1; i < intCode.Length; i++)
  58:             {
  59:                 intCode[i] = i % 9;
  60:             }
  61:         }
  62:
  63:         ///<summary>
  64:         /// 生成注册码
  65:         ///</summary>
  66:         ///<returns></returns>
  67:         public string GetRNum()
  68:         {
  69:             SetIntCode();
  70:             string strMNum = GetMNum();
  71:             for (int i = 1; i < charCode.Length; i++)   //存储机器码
  72:             {
  73:                 charCode[i] = Convert.ToChar(strMNum.Substring(i - 1, 1));
  74:             }
  75:             for (int j = 1; j < intNumber.Length; j++)  //改变ASCII码值
  76:             {
  77:                 intNumber[j] = Convert.ToInt32(charCode[j]) + intCode[Convert.ToInt32(charCode[j])];
  78:             }
  79:             string strAsciiName = "";   //注册码
  80:             for (int k = 1; k < intNumber.Length; k++)  //生成注册码
  81:             {
  82:
  83:                 if ((intNumber[k] >= 48 && intNumber[k] <= 57) || (intNumber[k] >= 65 && intNumber[k]
  84:                     <= 90) || (intNumber[k] >= 97 && intNumber[k] <= 122))  //判断如果在0-9、A-Z、a-z之间
  85:                 {
  86:                     strAsciiName += Convert.ToChar(intNumber[k]).ToString();
  87:                 }
  88:                 else if (intNumber[k] > 122)  //判断如果大于z
  89:                 {
  90:                     strAsciiName += Convert.ToChar(intNumber[k] - 10).ToString();
  91:                 }
  92:                 else
  93:                 {
  94:                     strAsciiName += Convert.ToChar(intNumber[k] - 9).ToString();
  95:                 }
  96:             }
  97:             return strAsciiName;
  98:         }
  99:     }
 100: }

主窗体:

1: using System;
   2: using System.Collections.Generic;
   3: using System.ComponentModel;
   4: using System.Data;
   5: using System.Drawing;
   6: using System.Linq;
   7: using System.Text;
   8: using System.Windows.Forms;
   9: using Microsoft.Win32;
  10:
  11: namespace SoftRegister
  12: {
  13:     public partial class FormMain : Form
  14:     {
  15:         public FormMain()
  16:         {
  17:             InitializeComponent();
  18:         }
  19:
  20:         SoftReg softReg = new SoftReg();
  21:
  22:         private void FormMain_Load(object sender, EventArgs e)
  23:         {
  24:             //判断软件是否注册
  25:             RegistryKey retkey = Registry.CurrentUser.OpenSubKey("SOFTWARE", true).CreateSubKey("mySoftWare").CreateSubKey("Register.INI");
  26:             foreach (string strRNum in retkey.GetSubKeyNames())
  27:             {
  28:                 if (strRNum == softReg.GetRNum())
  29:                 {
  30:                     this.labRegInfo.Text = "此软件已注册!";
  31:                     this.btnReg.Enabled = false;
  32:                     return;
  33:                 }
  34:             }
  35:             this.labRegInfo.Text = "此软件尚未注册!";
  36:             this.btnReg.Enabled = true;
  37:             MessageBox.Show("您现在使用的是试用版,可以免费试用30次!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
  38:
  39:             Int32 tLong;    //已使用次数
  40:             try
  41:             {
  42:                 tLong = (Int32)Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\mySoftWare", "UseTimes", 0);
  43:                 MessageBox.Show("您已经使用了" + tLong + "次!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
  44:             }
  45:             catch
  46:             {
  47:                 MessageBox.Show("欢迎使用本软件!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
  48:                 Registry.SetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\mySoftWare", "UseTimes", 0, RegistryValueKind.DWord);
  49:             }
  50:
  51:             //判断是否可以继续试用
  52:             tLong = (Int32)Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\mySoftWare", "UseTimes", 0);
  53:             if (tLong < 30)
  54:             {
  55:                 int tTimes = tLong + 1;
  56:                 Registry.SetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\mySoftWare", "UseTimes", tTimes);
  57:             }
  58:             else
  59:             {
  60:                 DialogResult result = MessageBox.Show("试用次数已到!您是否需要注册?", "信息", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
  61:                 if (result == DialogResult.Yes)
  62:                 {
  63:                     FormRegister.state = false; //设置软件状态为不可用
  64:                     btnReg_Click(sender, e);    //打开注册窗口
  65:                 }
  66:                 else
  67:                 {
  68:                     Application.Exit();
  69:                 }
  70:             }
  71:
  72:         }
  73:
  74:         private void btnClose_Click(object sender, EventArgs e)
  75:         {
  76:             Application.Exit();
  77:         }
  78:
  79:         private void btnReg_Click(object sender, EventArgs e)
  80:         {
  81:             FormRegister frmRegister = new FormRegister();
  82:             frmRegister.ShowDialog();
  83:         }
  84:     }
  85: }

注册窗体:

1: using System;
   2: using System.Collections.Generic;
   3: using System.ComponentModel;
   4: using System.Data;
   5: using System.Drawing;
   6: using System.Linq;
   7: using System.Text;
   8: using System.Windows.Forms;
   9: using Microsoft.Win32;
  10:
  11: namespace SoftRegister
  12: {
  13:     public partial class FormRegister : Form
  14:     {
  15:         public FormRegister()
  16:         {
  17:             InitializeComponent();
  18:         }
  19:
  20:         public static bool state = true;  //软件是否为可用状态
  21:         SoftReg softReg = new SoftReg();
  22:
  23:         private void btnReg_Click(object sender, EventArgs e)
  24:         {
  25:             try
  26:             {
  27:                 if (txtLicence.Text == softReg.GetRNum())
  28:                 {
  29:                     MessageBox.Show("注册成功!重启软件后生效!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
  30:                     RegistryKey retkey = Registry.CurrentUser.OpenSubKey("Software", true).CreateSubKey("mySoftWare").CreateSubKey("Register.INI").CreateSubKey(txtLicence.Text);
  31:                     retkey.SetValue("UserName", "Rsoft");
  32:                     this.Close();
  33:                 }
  34:                 else
  35:                 {
  36:                     MessageBox.Show("注册码错误!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
  37:                     txtLicence.SelectAll();
  38:                 }
  39:             }
  40:             catch (Exception ex)
  41:             {
  42:                 throw new Exception(ex.Message);
  43:             }
  44:         }
  45:
  46:         private void btnClose_Click(object sender, EventArgs e)
  47:         {
  48:             if (state == true)
  49:             {
  50:                 this.Close();
  51:             }
  52:             else
  53:             {
  54:                 Application.Exit();
  55:             }
  56:         }
  57:
  58:         private void FormRegister_Load(object sender, EventArgs e)
  59:         {
  60:             this.txtHardware.Text = softReg.GetMNum();
  61:         }
  62:     }
  63: }
(二)注册机的实现:
SoftReg类:
   1: using System;
   2: using System.Collections.Generic;
   3: using System.Linq;
   4: using System.Text;
   5: using System.Management;
   6:
   7: namespace SoftwarePassport
   8: {
   9:     class SoftReg
  10:     {
  11:         public int[] intCode = new int[127];    //存储密钥
  12:         public char[] charCode = new char[25];  //存储ASCII码
  13:         public int[] intNumber = new int[25];   //存储ASCII码值
  14:
  15:         //初始化密钥
  16:         public void SetIntCode()
  17:         {
  18:             for (int i = 1; i < intCode.Length; i++)
  19:             {
  20:                 intCode[i] = i % 9;
  21:             }
  22:         }
  23:
  24:         ///<summary>
  25:         /// 生成注册码
  26:         ///</summary>
  27:         ///<returns></returns>
  28:         public string GetRNum(string strMNum)
  29:         {
  30:             SetIntCode();
  31:
  32:             for (int i = 1; i < charCode.Length; i++)   //存储机器码
  33:             {
  34:                 charCode[i] = Convert.ToChar(strMNum.Substring(i - 1, 1));
  35:             }
  36:             for (int j = 1; j < intNumber.Length; j++)  //改变ASCII码值
  37:             {
  38:                 intNumber[j] = Convert.ToInt32(charCode[j]) + intCode[Convert.ToInt32(charCode[j])];
  39:             }
  40:             string strAsciiName = "";   //注册码
  41:             for (int k = 1; k < intNumber.Length; k++)  //生成注册码
  42:             {
  43:
  44:                 if ((intNumber[k] >= 48 && intNumber[k] <= 57) || (intNumber[k] >= 65 && intNumber[k]
  45:                     <= 90) || (intNumber[k] >= 97 && intNumber[k] <= 122))  //判断如果在0-9、A-Z、a-z之间
  46:                 {
  47:                     strAsciiName += Convert.ToChar(intNumber[k]).ToString();
  48:                 }
  49:                 else if (intNumber[k] > 122)  //判断如果大于z
  50:                 {
  51:                     strAsciiName += Convert.ToChar(intNumber[k] - 10).ToString();
  52:                 }
  53:                 else
  54:                 {
  55:                     strAsciiName += Convert.ToChar(intNumber[k] - 9).ToString();
  56:                 }
  57:             }
  58:             return strAsciiName;
  59:         }
  60:     }
  61: }

主窗体:

1: using System;
   2: using System.Collections.Generic;
   3: using System.ComponentModel;
   4: using System.Data;
   5: using System.Drawing;
   6: using System.Linq;
   7: using System.Text;
   8: using System.Windows.Forms;
   9:
  10: namespace SoftwarePassport
  11: {
  12:     public partial class FormMain : Form
  13:     {
  14:         public FormMain()
  15:         {
  16:             InitializeComponent();
  17:         }
  18:
  19:         SoftReg softReg = new SoftReg();
  20:
  21:         private void btnCreate_Click(object sender, EventArgs e)
  22:         {
  23:             try
  24:             {
  25:                 string strHardware = this.txtHardware.Text;
  26:                 string strLicence = softReg.GetRNum(strHardware);
  27:                 this.txtLicence.Text = strLicence;
  28:             }
  29:             catch (System.Exception ex)
  30:             {
  31:                 MessageBox.Show("输入的机器码格式错误!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
  32:             }
  33:         }
  34:
  35:         private void btnExit_Click(object sender, EventArgs e)
  36:         {
  37:             Application.Exit();
  38:         }
  39:     }
  40: }
时间: 2024-10-08 10:24:46

C#注册机与绑定软件(转发自:韩兆新的博客园的C#学习笔记——软件注册与注册机)的相关文章

OD调试学习笔记7—去除未注册版软件的使用次数限制

OD调试学习笔记7—去除未注册版软件的使用次数限制 本节使用的软件链接 (想自己试验下的可以下载) 一:破解的思路 仔细观察一个程序,我们会发现,无论在怎么加密,无论加密哪里,这个程序加密的目的就是需要你掏腰包来获得更多的功能或者解除限制.那么我们就可以逆向的来思考,如果该程序成功的注册后,那么程序的行为必将发生变化,如NAG去除了,如功能限制没有了等等.也就是说,程序的代码的走法也会跟未注册的时候截然不同.因为程序的行为改变了,那么决定它所有行为的代码走法也会发生变化. 二:认识OD的两种断点

虚拟机VMWare学习笔记十二 - 将物理机抓取成虚拟机

1. 安装VMware vCenter Converter Standalone Client 运行虚拟机,File -- Virtualize a Physical Machine 这时如果电脑中没有VMware vCenter Converter Standalone Client ,则会进行安装. 安装过程 之后图标会出现在桌面上,双击运行 选择连接到本地服务器,登陆 点击转换计算机 这个,可以将本地计算机抓取成虚拟机,也可以将其他可以访问的计算机(需知道管理员用户名及密码)抓取成虚拟机.

用Qt写软件系列六:博客园客户端的设计与实现(用Fiddler抓包,用CURL提交数据,用htmlcxx解析HTML)

引言 博客园是本人每日必逛的一个IT社区.尽管博文以.net技术居多,但是相对于CSDN这种业务杂乱.体系庞大的平台,博客园的纯粹更得我青睐.之前在园子里也见过不少讲解为博客园编写客户端的博文.不过似乎都是移动端的技术为主.这篇博文开始讲讲如何在PC端编写一个博客园客户端程序.一方面是因为本人对于博客园的感情:另一方面也想用Qt写点什么东西出来.毕竟在实践中学习收效更快. 登录过程分析 登录功能是一个客户端程序比不可少的功能.在组装Http数据包发送请求之前,我们得看看整个登录是怎样一个过程.F

网络采集软件核心技术剖析系列(1)---如何使用C#语言获取博客园某个博主的全部随笔链接及标题

一 本系列随笔概览及产生的背景 自己开发的豆约翰博客备份专家软件工具问世3年多以来,深受广大博客写作和阅读爱好者的喜爱.同时也不乏一些技术爱好者咨询我,这个软件里面各种实用的功能是如何实现的. 该软件使用.NET技术开发,为回馈社区,现将该软件中用到的核心技术,开辟一个专栏,写一个系列文章,以飨广大技术爱好者. 本系列文章除了讲解网络采编发用到的各种重要技术之外,也提供了不少问题的解决思路和界面开发的编程经验,非常适合.NET开发的初级,中级读者,希望大家多多支持. 很多初学者常有此类困惑,“为

软件设置&mdash;Windows Live Writer编辑博客园日志

Technorati 标记: Windows Live Writer,设置,日志 系统:Windows 8.1 update 软件:Windows Live Writer 2012 目的:配置 Writer 2012,编辑日志,发布到博客园 过程: 1.下载和安装 Writer 2012 点击上文链接,即可下载 Writer 2012 离线安装包. 下载完成,安装即可. 2.启动并配置 Writer 2012 首次启动,需要进行配置. 若直接进行博客园的相关配置,会遇到500错误:账户或密码错误

博客园--登录注册

表结构: 注意:UserInfo表继承了AbstractUser,需要在settings 中写入:AUTH_USER_MODEL ="项目名称.UserInfo" class UserInfo(AbstractUser): #settings :AUTH_USER_MODEL ="项目名称.UserInfo" '''用户信息表''' nid = models.BigAutoField(primary_key=True) nickname =models.CharFi

如何注册并开通博客园博客

1. 打开 http://www.cnblogs.com ,点击注册: 2. 查收注册邮件: 3. 输入手机接收到的激活码: 4. 完成激活并进入登录页面: 5. 点击我的博客: 6. 填写注册理由,注册理由为参加东北大学 xxx 班课程: 7. 点击班级链接,加入班级.

HTML学习笔记--实例-创建一个注册页面--select两个option出来结果却是四个选项,其中两个空白选项的原因?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

Linux学习笔记——软件安装(四)

++++++++++++++++++++++++++++++Linux软件安装+++++++++++++++++++++++++++++++ 注:window系统中的所有安装包都不能在Linux系统中直接安装使用 1. 软件包分类: 源码包(脚本安装包:install.sh)——安装慢,可以看到源代码 二进制包(RPM包,系统默认包)——源码包经过编译之后的机器码,安装快速,看不到源码 2. RPM包管理: RPM包命名规则——范例:httpd-2.2.15-15.e16.centos.1.i6