为自己写的程序加一个注册功能吧。生成的机器号是根据CPU和硬盘号来的,根据自己的需求改成是否是随机生成。

  代码直接粘贴到新建类覆盖原代码就能直接用了。
using System;
using System.Management;
using System.Security.Cryptography;
using System.Text;namespace RegisterClass
{class RegisterClass{//步骤一: 获得CUP序列号和硬盘序列号的实现代码如下://获得CPU的序列号bool Stupids = true;bool Cat = false;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 GetDiskVolumeSerialNumber(){ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"c:\"");disk.Get();return disk.GetPropertyValue("VolumeSerialNumber").ToString();}//步骤二: 收集硬件信息生成机器码, 代码如下: //生成机器码public string CreateCode(){string temp = getCpu() + GetDiskVolumeSerialNumber();//获得24位Cpu和硬盘序列号string[] strid = new string[24];//
            for (int i = 0; i < 24; i++)//把字符赋给数组
            {strid[i] = temp.Substring(i, 1);}temp = "";//Random rdid = new Random();for (int i = 0; i < 24; i++)//从数组随机抽取24个字符组成新的字符生成机器三
            {//temp += strid[rdid.Next(0, 24)];temp += strid[i+3>=24?0:i+3];}return GetMd5(temp);}//步骤三: 使用机器码生成软件注册码, 代码如下://使用机器码生成注册码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);//}for (int i = 1; i < intCode.Length; i++){intCode[i] = i + 3 > 9 ? 0 : i + 3;}}public int[] intNumber = new int[25];//用于存机器码的Ascii值public char[] Charcode = new char[25];//存储机器码字//生成注册码public string GetCode(string code){if (code != ""){//把机器码存入数组中setIntCode();//初始化127位数组for (int i = 1; i < Charcode.Length; i++)//把机器码存入数组中
                {Charcode[i] = Convert.ToChar(code.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());//判断字符ASCII值是否0-9之间if (intNumber[j] >= 48 && intNumber[j] <= 57){strAsciiName += Convert.ToChar(intNumber[j]).ToString();}//判断字符ASCII值是否A-Z之间else if (intNumber[j] >= 65 && intNumber[j] <= 90){strAsciiName += Convert.ToChar(intNumber[j]).ToString();}//判断字符ASCII值是否a-z之间else if (intNumber[j] >= 97 && intNumber[j] <= 122)                    {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;//得到注册码
                }return strAsciiName;}else{return "";}}//步骤四: 用户输入注册码注册软件, 演示代码如下://注册public bool RegistIt(string currentCode,string realCode){if (realCode != ""){if (currentCode.TrimEnd().Equals(realCode.TrimEnd())){Microsoft.Win32.RegistryKey retkey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("software", true).CreateSubKey("StupidsCat").CreateSubKey("StupidsCat.ini").CreateSubKey(currentCode.TrimEnd());retkey.SetValue("StupidsCat", "BBC6D58D0953F027760A046D58D52786");retkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("software", true).CreateSubKey("StupidsCat").CreateSubKey("StupidsCat.ini").CreateSubKey(currentCode.TrimEnd());retkey.SetValue("StupidsCat", "BBC6D58D0953F027760A046D58D52786");return Stupids;}else{return Cat;}}else { return Cat; }}public bool BoolRegist(string sn){string[] keynames; bool flag = false;Microsoft.Win32.RegistryKey localRegKey = Microsoft.Win32.Registry.LocalMachine;Microsoft.Win32.RegistryKey userRegKey = Microsoft.Win32.Registry.CurrentUser;try{keynames = localRegKey.OpenSubKey("software\\StupidsCat\\StupidsCat.ini\\" + GetMd5(sn)).GetValueNames();foreach (string name in keynames){if (name == "StupidsCat"){if (localRegKey.OpenSubKey("software\\StupidsCat\\StupidsCat.ini\\" + GetMd5(sn)).GetValue("StupidsCat").ToString() == "BBC6D58D0953F027760A046D58D52786")flag = true; }}keynames = userRegKey.OpenSubKey("software\\StupidsCat\\StupidsCat.ini\\" + GetMd5(sn)).GetValueNames();foreach (string name in keynames){if (name == "StupidsCat"){if (flag && userRegKey.OpenSubKey("software\\StupidsCat\\StupidsCat.ini\\" + GetMd5(sn)).GetValue("StupidsCat").ToString() == "BBC6D58D0953F027760A046D58D52786")return true;}}return false;}catch{return false;}finally { localRegKey.Close(); userRegKey.Close(); }}public string GetMd5(object text){string path = text.ToString();MD5CryptoServiceProvider MD5Pro = new MD5CryptoServiceProvider();Byte[] buffer = Encoding.GetEncoding("utf-8").GetBytes(text.ToString());Byte[] byteResult = MD5Pro.ComputeHash(buffer);string md5result = BitConverter.ToString(byteResult).Replace("-", "");return md5result;}}
}

转载于:https://www.cnblogs.com/StupidsCat/archive/2012/05/29/2524143.html

C# 给自己写的软件,加注册码功能。相关推荐

  1. VB写的软件加壳都没用,超强反调试反破解分析,检测OD调试器

    这个反调试具有很好的防止OD等动态调试器对 VB软件的调试.是依据OD等调试器原理进行设计的反调试功能,其中包括隐藏字符串等技术.防止单步调试等技术等 csdn下载地址 https://downloa ...

  2. C#实现注册码功能编程总结

    C# 给自己写的软件,加注册码功能 为自己写的程序加一个注册功能吧.生成的机器号是根据CPU和硬盘号来的,根据自己的需求改成是否是随机生成. 代码直接粘贴到新建类覆盖原代码就能直接用了. using ...

  3. 给软件添加注册码【笔记】

    本文宗旨在于提出一种给软件添加注册码的方法.至于所提出的方法是否有效,是否能够经得起一些逆向高手的破解,还得经过验证.我只是提出我个人的看法. 一.目标.     目标很明确,就是根据需要注册软件的个 ...

  4. 技术扫盲 软件加壳(转)

    首先我想大家应该先明白"壳"的概念.在自然界中,我想大家对壳这东西应该都不会陌生了,植物用它来保护种子,动物用它来保护身体等等.同样,在一些计算机软件里也有一段专门负责保护软件不被 ...

  5. 一种NET软件加壳技术的设计与实现

    1 引言     为了保护自己的软件的技术内核不被他人轻易盗用,软件开发人员使用了各种加密技术来保障软件的版权不被侵犯,壳便是我们常用的一种软件保护手段.对于Win32 中软件加壳技术已经有非常成熟的 ...

  6. 软件的注册码及清除电脑垃圾的文件

    这几天,常有人问我要软件的注册码,因为软件试用期到了.回邮件麻烦,就直接把常见的有用的注册码写到blog里面算了.其中卡巴的和winrar的key在我的另一篇文章里. ZA的注册码:dt733-v6m ...

  7. 破解完全入门篇,第七章-寻找软件的注册码

    第七章-寻找软件的注册码 我们来寻找软件真正的注册码! 寻找软件的注册码就像你小时玩的躲猫猫一样,简单又有趣,虽然后来你会不这样觉的 好的,我们开始. 我不知道你有没有明白我前面在原理中讲的那些东西, ...

  8. 利用 tkinter 写表白软件,加入动画效果

    前言:众所周知,很多人在社交平台看到有小伙伴写小软件来表白也想蠢蠢欲试.但是由于自己技术不强,甚至没有接触过编程相关的知识而灰心.但是别担心,下面我将介绍一种简单上手的小软件制作方法,只要稍加学习便可 ...

  9. Android开发-自己动手写Bitmap高效加载 跟OOM说再见

    Bitmap 前言 BitmapFactory.Options BitmapFactory 高效加载Bitmap inDensity,inTargetDensity,inScaled inSample ...

最新文章

  1. NYOJ--811--变态最大值
  2. js监听audio播放完毕
  3. “大厂平均年龄 29.6 岁”:不是我们选择了年龄焦虑,是大厂焦虑了我们
  4. python学习路线-Python学习路线图(2020年最新版)
  5. 呆萌直播源码:如何开发视频直播平台?
  6. 【easy】234. Palindrome Linked List
  7. 服务器最小化安装后的优化脚本
  8. java 中的instanceof
  9. H264参数SPS(序列参数集)和PPS(图像参数集)说明
  10. geojson 河流_GeoJSON 数据类型 | JShare
  11. 程序员怒斥:虎牙HR真奇葩,通知我面试,又何必当面羞辱我一番?
  12. Linux之判断socket是否断开
  13. Ubuntu18.04报错:bin/bash: prebuilts/misc/linux-x86/bison/bison: cannot execute binary file解决
  14. python xml etree_Python 标准库之 xml.etree.ElementTree
  15. 网格搜索的原理以及实战以及相关API(GridSearchCV)
  16. 粒子群算法几个适应度评价函数
  17. exp oracle 904,EXP-00008: ORACLE error 904 encountered的解决方法
  18. ESP8266红外学习遥控器
  19. 华为路由器交换机常用命令(随时补充更新)
  20. RxJava操作符(四)Combining

热门文章

  1. xss攻击和csrf攻击
  2. 隐藏a标签seo_百度SEO网站整体优化方案 - 蜘蛛池博客
  3. pythonseleniumide使用_selenium第二课(脚本录制seleniumIDE的使用)
  4. 基于python的智能安防系统_基于Python语言的智能家居系统研究
  5. String与Integer相互转换
  6. android 插入gif,android – Gboard:在EditText上启用GIF插入
  7. 计算机绘图图库的创建,工程制图与计算机绘图.doc
  8. 搜索做成html静态,如何在静态的html里实现搜索功能?
  9. mysql数据完整性约束包括_MYSQL回顾(完整性约束相关)
  10. powercfg -h off_万代 S.H.Figuarts「假面骑士01 金属腾蝗形态」