`
alibabamon
  • 浏览: 7815 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

为自己的软件制作注册码

阅读更多
 "翻身做主"--给自己的软件制作注册码

  从今天起, 您开发的的任何软件如果您愿意都可以为之加密 --为您的软件制作一款注册机!

  当您看完这篇文章时, 您就可以理直气壮的告诉您的用户 : "喂, 想用我的软件是吧 ? 掏钱!".

  呵呵, 这当然只是给自己壮胆的话, 现在连万能注册机都有了, 人家还怕啥 ? 不过只要您想想微软, 人家再牛B的加密技术都会被国人"鄙视"? 但人家不也在中国大把大把的捞钱吗?

  OK, 不扯了, 我们进入正题.

  同一般的软件注册一样, 我们这里的注册是这样进行的:

  1. 首先根据用户的硬件信息生成24位的机器码

  -- 相当于种子,用于生成随机数

  2. 采用注册机根据特征数字生成一个24位注册码

  -- 相当于伪随机数生成器, 输出长度自己定, 最后用一个格式化函数,将随机数映射到ASCII字符集合

  3. 用户输入注册码注册成功

  假设客户很喜欢您的软件, 也假设他没有破解, 他需要通过以下方式向您取得注册码:

  (1).如果他能上网, 他需要把机器码用Email发给您;

  (2).如果他不能上网, 他可以把机器码用手机短信的方式发给您.

  (3).如果他没有手机, 他可以带着机器码然后坐火车到您的办公室想您要一个注册码.

  --第3条只是为了让您看帖子的时候别太枯燥了, 抱歉.

  现在, 您拿到了客户的机器码后, 如果您同时也收到了他汇的钱, 呵呵, 好像给软件加密就是为了要钱吧? 那么您就可以用客户的机器码生成一个唯一的注册码再用同样的方式给用户, 最后, 用户输入注册码即可!

  需要强调的是客户机器的硬件信息获取方式是有很多种选择的. 这里我们选择最放心的两个硬件: CUP的序列号和硬盘的卷标号. 好了, 下面您就可以一步一步制作一款软件注册机了.

  步骤一: 获得CUP序列号和硬盘序列号的实现代码如下:


view plaincopy to clipboardprint?
  public string getCpu()
  {
  string strCpu = null;
  ManagementClass myCpu = new ManagementClass("win32_Processor");
  ManagementObjectCollection myCpuConnection = myCpu.GetInstances();
  foreach (ManagementObject myObject in myCpuConnection)
  {
  strCpu = myObject.Properties["Processorid"].Value.ToString();
  break;
  } return strCpu;
  }
  public string getCpu()
  {
  string strCpu = null;
  ManagementClass myCpu = new ManagementClass("win32_Processor");
  ManagementObjectCollection myCpuConnection = myCpu.GetInstances();
  foreach (ManagementObject myObject in myCpuConnection)
  {
  strCpu = myObject.Properties["Processorid"].Value.ToString();
  break;
  } return strCpu;
  }
  view plaincopy to clipboardprint?
  // 取得设备硬盘的卷标号
  public string GetDiskVolumeSerialNumber()
  {
  ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
  ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"d:\"");
  disk.Get();
  return disk.GetPropertyValue("VolumeSerialNumber").ToString();
  }
  // 取得设备硬盘的卷标号
  public string GetDiskVolumeSerialNumber()
  {
  ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
  ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"d:\"");
  disk.Get();
  return disk.GetPropertyValue("VolumeSerialNumber").ToString();
  }


  步骤二: 收集硬件信息生成机器码, 代码如下:


 view plaincopy to clipboardprint?
  //生成机器码
  private void button1_Click(object sender, EventArgs e)
  {
  label2.Text = getCpu() + GetDiskVolumeSerialNumber();//获得24位Cpu和硬盘序列号
  string[] strid = new string[24];
  for (int i = 0; i < 24; i++)//把字符赋给数组
  {
  strid[i] = label2.Text.Substring(i, 1);
  } label2.Text = "";
  Random rdid = new Random();
  for (int i = 0; i < 24; i++)//从数组随机抽取24个字符组成新的字符生成机器三
  {
  label2.Text += strid[rdid.Next(0, 24)];
  }
  }
  //生成机器码
  private void button1_Click(object sender, EventArgs e)
  {
  label2.Text = getCpu() + GetDiskVolumeSerialNumber();//获得24位Cpu和硬盘序列号
  string[] strid = new string[24];
  for (int i = 0; i < 24; i++)//把字符赋给数组
  {
  strid[i] = label2.Text.Substring(i, 1);
  } label2.Text = "";
  Random rdid = new Random();
  for (int i = 0; i < 24; i++)//从数组随机抽取24个字符组成新的字符生成机器三
  {
  label2.Text += strid[rdid.Next(0, 24)];
  }
  }


  步骤三: 使用机器码生成软件注册码, 代码如下:


 view plaincopy to clipboardprint?
  public int[] intCode = new int[127];//用于存密钥
  public void setIntCode()//给数组赋值个小于10的随机数
  {
  Random ra = new Random();
  for (int i = 1; i < intCode.Length; i++)
  {
  intCode[i] = ra.Next(0, 9);
  }
  }
  public int[] intNumber = new int[25];//用于存机器码的Ascii值
  public char[] Charcode = new char[25];//存储机器码字
  //生成注册码
  private void button2_Click(object sender, EventArgs e)
  {
  if (label2.Text != "")
  { //把机器码存入数组中
  setIntCode();//初始化127位数组
  for (int i = 1; i < Charcode.Length; i++)//把机器码存入数组中
  {
  Charcode[i] = Convert.ToChar(label2.Text.Substring(i - 1, 1));
  }//
  for (int j = 1; j < intNumber.Length; j++)//把字符的ASCII值存入一个整数组中。
  {
  intNumber[j] = intCode[Convert.ToInt32(Charcode[j])] + Convert.ToInt32(Charcode[j]);
  }
  string strAsciiName = null;//用于存储机器码
  for (int j = 1; j < intNumber.Length; j++)
  {
  //MessageBox.Show((Convert.ToChar(intNumber[j])).ToString());
  if (intNumber[j] >= 48 && intNumber[j] <= 57)//判断字符ASCII值是否0-9之间
  {
  strAsciiName += Convert.ToChar(intNumber[j]).ToString();
  }
  else if (intNumber[j] >= 65 && intNumber[j] <= 90)//判断字符ASCII值是否A-Z之间
  {
  strAsciiName += Convert.ToChar(intNumber[j]).ToString();
  }
  else if (intNumber[j] >= 97 && intNumber[j] <= 122)//判断字符ASCII值是否a-z之间
  {
  strAsciiName += Convert.ToChar(intNumber[j]).ToString();
  }
  else//判断字符ASCII值不在以上范围内
  {
  if (intNumber[j] > 122)//判断字符ASCII值是否大于z
  {
  strAsciiName += Convert.ToChar(intNumber[j] - 10).ToString();
  }
  else
  {
  strAsciiName += Convert.ToChar(intNumber[j] - 9).ToString();
  }
  }
  label3.Text = strAsciiName;//得到注册码
  }
  }
  else
  {
  MessageBox.Show("请选生成机器码", "注册提示");
  }
  }
  public int[] intCode = new int[127];//用于存密钥
  public void setIntCode()//给数组赋值个小于10的随机数
  {
  Random ra = new Random();
  for (int i = 1; i < intCode.Length; i++)
  {
  intCode[i] = ra.Next(0, 9);
  }
  }
  public int[] intNumber = new int[25];//用于存机器码的Ascii值
  public char[] Charcode = new char[25];//存储机器码字
  //生成注册码
  private void button2_Click(object sender, EventArgs e)
  {
  if (label2.Text != "")
  { //把机器码存入数组中
  setIntCode();//初始化127位数组
  for (int i = 1; i < Charcode.Length; i++)//把机器码存入数组中
  {
  Charcode[i] = Convert.ToChar(label2.Text.Substring(i - 1, 1));
  }//
  for (int j = 1; j < intNumber.Length; j++)//把字符的ASCII值存入一个整数组中。
  {
  intNumber[j] = intCode[Convert.ToInt32(Charcode[j])] + Convert.ToInt32(Charcode[j]);
  }
  string strAsciiName = null;//用于存储机器码
  for (int j = 1; j < intNumber.Length; j++)
  {
  //MessageBox.Show((Convert.ToChar(intNumber[j])).ToString());
  if (intNumber[j] >= 48 && intNumber[j] <= 57)//判断字符ASCII值是否0-9之间
  {
  strAsciiName += Convert.ToChar(intNumber[j]).ToString();
  }
  else if (intNumber[j] >= 65 && intNumber[j] <= 90)//判断字符ASCII值是否A-Z之间
  {
  strAsciiName += Convert.ToChar(intNumber[j]).ToString();
  }
  else if (intNumber[j] >= 97 && intNumber[j] <= 122)//判断字符ASCII值是否a-z之间
  {
  strAsciiName += Convert.ToChar(intNumber[j]).ToString();
  }
  else//判断字符ASCII值不在以上范围内
  {
  if (intNumber[j] > 122)//判断字符ASCII值是否大于z
  {
  strAsciiName += Convert.ToChar(intNumber[j] - 10).ToString();
  }
  else
  {
  strAsciiName += Convert.ToChar(intNumber[j] - 9).ToString();
  }
  }
  label3.Text = strAsciiName;//得到注册码
  }
  }
  else
  {
  MessageBox.Show("请选生成机器码", "注册提示");
  }
  }


  步骤四: 用户输入注册码注册软件, 演示代码如下:

  
view plaincopy to clipboardprint?
  private void btnRegist_Click(object sender, EventArgs e)
  {
  if (label3.Text != "")
  {
  if (textBox1.Text.TrimEnd().Equals(label3.Text.TrimEnd()))
  {
  Microsoft.Win32.RegistryKey retkey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("software", true).CreateSubKey("ZHY").CreateSubKey("ZHY.INI").CreateSubKey(textBox1.Text.TrimEnd());
  retkey.SetValue("UserName", "MySoft");
  MessageBox.Show("注册成功");
  }
  else { MessageBox.Show("注册码输入错误"); }
  }
  else
  {
  MessageBox.Show("请生成注册码", "注册提示");
  }
  }
  private void btnRegist_Click(object sender, EventArgs e)
  {
  if (label3.Text != "")
  {
  if (textBox1.Text.TrimEnd().Equals(label3.Text.TrimEnd()))
  {
  Microsoft.Win32.RegistryKey retkey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("software", true).CreateSubKey("ZHY").CreateSubKey("ZHY.INI").CreateSubKey(textBox1.Text.TrimEnd());
  retkey.SetValue("UserName", "MySoft");
  MessageBox.Show("注册成功");
  }
  else { MessageBox.Show("注册码输入错误"); }
  }
  else
  {
  MessageBox.Show("请生成注册码", "注册提示");
  }
  }

分享到:
评论

相关推荐

    c# wpf实现的软件注册码生成程序

    c# wpf实现的软件注册码生成程序,根据输入的40个字符的机器码生成相应的注册码

    软件注册码生成以及验证方法(duilib界面)

    软件注册码生成以及验证, 使用duilib界面库开发的界面,代码讲解如何生成注册码,以及如何验证注册码的正确性,感兴趣的同学可以下载使用demo

    镜像文件制作软件uiso9_cn(注册码)

    《UISO9_CN:全方位解析镜像文件制作软件与注册码使用》 镜像文件制作软件UISO9_CN是一款专为中国用户设计的强大工具,它能够帮助用户方便地创建、编辑和管理各种光盘镜像文件,如ISO、BIN等格式。在数字时代,镜像...

    软件制作注册码

    给自己的软件中加个注册码程序,这样你的软件给别人用时可以制授权使用时间权限

    chm制作软件(含注册码)

    使用这两款软件制作CHM文件的一般步骤包括: - **准备内容**:整理好要用作帮助文档的HTML文件和相关资源(如图片、样式表等)。 - **导入文件**:在软件中导入HTML文件或整个文件夹,软件会自动解析和组织内容。 ...

    伦茨变频器调试软件注册码

    在探讨“伦茨变频器调试软件注册码”的过程中,我们不仅需要理解注册码的基本概念,还需要深入了解伦茨变频器及其调试软件的功能与应用场景,以及注册码在其中扮演的角色。 ### 注册码概述 #### 定义 注册码...

    VB注册码生成器

    VB(Visual Basic)是一种由微软开发的编程环境,主要用于创建Windows桌面应用程序。...学习和理解这些知识点,不仅可以帮助你创建自己的注册码生成器和验证器,还能加深对VB编程和软件安全性的理解。

    电子相册制作软件(含注册码)

    在这个压缩包中,包含了一个中文版本的电子相册制作软件,已经经过测试并且被认为好用,同时还提供了注册码,这意味着用户可以无需付费即可解锁全部功能。 在制作电子相册的过程中,用户通常会经历以下步骤: 1. *...

    舞蝶飞创意照片制作软件注册码

    根据所提供的文件信息,我们可以从以下几个方面来探讨与“舞蝶飞创意照片制作软件注册码”相关的知识点: ### 一、软件介绍 舞蝶飞创意照片制作软件是一款专门为那些不熟悉或不会使用专业图像处理软件(如Photo...

    舞蝶飞创意照片制作软件V3.60 注册码

    从给定的信息来看,主要涉及的是“舞蝶飞创意照片制作软件V3.60”的注册码信息。本文将围绕这一主题展开详细说明,包括软件的功能特性、注册码的重要性及如何正确使用等内容。 ### 舞蝶飞创意照片制作软件简介 ...

    WPF基于CPUID生成软件注册码

    WPF基于CPUID以及硬盘ID的组合生成软件注册码,用于产品软件的激活。

    官方正版软件+DIR软件注册码大全.txt

    通过注册码的验证,软件开发商能够有效保护自己的知识产权,并且保障用户的权益不受侵害。 #### 2. 注册码的来源与风险 从提供的部分内容可以看出,这些注册码涵盖了多种知名软件,如WPS Office、Adobe系列等。...

    Total Commander 注册码.txt

    在探讨“Total Commander 注册码.txt”这一主题时,我们首先需要理解几个核心概念:Total Commander 软件、注册码及其重要性,以及在合法使用软件的过程中如何正确获取和应用注册码。 ### Total Commander 软件简介...

    VNC远程控制注册码

    在探讨“VNC远程控制注册码”的过程中,我们首先需要理解VNC软件的基本概念、注册码的作用以及如何正确地使用这些注册码。...希望每位读者都能够正确认识和使用注册码,为自己和他人的网络安全贡献一份力量。

    利用CPU 和 硬盘id信息生成软件注册码

    QTC++ 利用 读取硬件信息生成软件注册码,这个注册码破解了也是和硬件绑定的。

    翻页相册flash制作软件+注册码

    8. **注册码使用**:关于"翻页相册Flash制作软件+注册码",这通常意味着软件是付费版本,注册码用于解锁全部功能或去除试用限制。你需要按照软件的提示输入注册码以激活软件。 总的来说,翻页相册Flash制作软件是将...

    nero刻录软件带注册码

    "nero刻录软件带注册码"的标题意味着这个压缩包可能包含了Nero的安装程序以及能够激活软件的注册码,使得用户可以完整地使用其全部功能,而无需购买官方授权。 Nero的核心功能包括: 1. **数据刻录**:用户可以...

    易启动-启动盘制作软件内含注册码

    注册码通常用于验证软件的合法性,解锁高级特性,并支持软件开发者持续更新和改进产品。 使用易启动制作启动盘的步骤大致包括以下几步: 1. 下载并安装易启动软件。 2. 连接USB设备或准备空白光盘。 3. 启动软件,...

    Total Recorder注册码(4组)

    在本例中,“Total Recorder注册码”即为Total Recorder这款软件的激活码,用于解锁软件的所有功能或将其从试用版升级到完整版。拥有有效的注册码意味着用户可以无限制地使用该软件的所有特性,而不受试用期限制或...

    Ultralso+注册码

    - **合法性**:使用注册码意味着用户尊重并支持软件开发者的工作,确保软件的合法使用,享受官方提供的更新和技术支持。 2. **注册过程** - **安装软件**:首先,从官方网站或可信赖的源下载并安装UltraISO程序。...

Global site tag (gtag.js) - Google Analytics