C#生成软件注册码

开发软件时,当用到商业用途时,注册码与激活码就显得很重要了。现在的软件破解技术实在在强了,各种国内外大型软件都有注册机制,但同时也不断地被破解。下面发的只是一个常用版本,发出源码被破就更容易了,但我们学习的是技术。当然也为以后自己的软件不会被轻易破解。

第一步。根据卷标,CPU序列号,生成机器码
// 取得设备硬盘的卷标号
        public static string GetDiskVolumeSerialNumber()
        {
            ManagementClass mc = new ManagementClass(“Win32_NetworkAdapterConfiguration”);
            ManagementObject disk = new ManagementObject(“win32_logicaldisk.deviceid=”d:”");
            disk.Get();
            return disk.GetPropertyValue(“VolumeSerialNumber”).ToString();
        }

        //获得CPU的序列号
        public static 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 static string getMNum()
        {
            string strNum = getCpu() + GetDiskVolumeSerialNumber();//获得24位Cpu和硬盘序列号
            string strMNum = strNum.Substring(0, 24);//从生成的字符串中取出前24个字符做为机器码
            return strMNum;
        }
        public static int[] intCode = new int[127];//存储密钥
        public static int[] intNumber = new int[25];//存机器码的Ascii值
        public static char[] Charcode = new char[25];//存储机器码字
        public static void setIntCode()//给数组赋值小于10的数
        {
            for (int i = 1; i < intCode.Length; i++)
            {
                intCode[i] = i % 9;
            }
        }

第二步。根据机器码 生成注册码
        //生成注册码     

       public static string getRNum()
        {
            setIntCode();//初始化127位数组
            for (int i = 1; i < Charcode.Length; i++)//把机器码存入数组中
            {
                Charcode[i] = Convert.ToChar(getMNum().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 = “”;//用于存储注册码
            for (int j = 1; j < intNumber.Length; j++)
            {
                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();
                    }
                }
            }
            return strAsciiName;
        }

第三步。检查注册状况,若没有注册,可自定义试用      

/// <summary>
        /// 检查注册
        /// </summary>
        private void CheckRegist()
        {

                this.btn_reg.Enabled = true;

                  RegistryKey retkey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(“software”, true).CreateSubKey(“wxk”).CreateSubKey(“wxk.INI”);
                foreach (string strRNum in retkey.GetSubKeyNames())//判断是否注册
                {
                    if (strRNum == clsTools.getRNum())
                    {
                        thControl(true);
                        return;
                    }
                }
                thControl(false);
                Thread th2 = new Thread(new ThreadStart(thCheckRegist2));
                th2.Start();

          }
        }
     
        /// <summary>
        /// 验证试用次数
        /// </summary>
        private static void thCheckRegist2()
        {
            MessageBox.Show(“您现在使用的是试用版,该软件可以免费试用3000000次!”, “提示”, MessageBoxButtons.OK, MessageBoxIcon.Information);
            Int32 tLong;
            try
            {
                tLong = (Int32)Registry.GetValue(“HKEY_LOCAL_MACHINE\SOFTWARE\angel”, “UseTimes”, 0);
                MessageBox.Show(“感谢您已使用了” + tLong + “次”, “提示”, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch
            {
                Registry.SetValue(“HKEY_LOCAL_MACHINE\SOFTWARE\angel”, “UseTimes”, 0, RegistryValueKind.DWord);
                MessageBox.Show(“欢迎新用户使用本软件”, “提示”, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            tLong = (Int32)Registry.GetValue(“HKEY_LOCAL_MACHINE\SOFTWARE\angel”, “UseTimes”, 0);
            if (tLong < 3000000)
            {
                int Times = tLong + 1;
                Registry.SetValue(“HKEY_LOCAL_MACHINE\SOFTWARE\angel”, “UseTimes”, Times);
            }
            else
            {
                MessageBox.Show(“试用次数已到”, “警告”, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                Application.Exit();
            }
        }

==================== 迂者 丁小未 CSDN博客专栏=================

MyBlog:http://blog.csdn.net/dingxiaowei2013              MyQQ:1213250243

MyTel:13262983383 

====================== 相互学习,共同进步 ===================

时间: 2024-05-10 03:55:46

C#生成软件注册码的相关文章

link环境下制作一款《订餐软件》,请问结算票每日的生成软件应该如何打代码实现?

问题描述 link环境下制作一款<订餐软件>,请问结算票每日的生成软件应该如何打代码实现? link环境下制作一款<订餐软件>,请问结算票每日的生成软件应该如何打代码实现? 解决方案 每日生成,这个你可以放在一个windows服务中实现,每天到时执行就可以.

MWeb – 专业的 Markdown 写作、记笔记、静态博客生成软件

专业的 Markdown 写作支持 极简 UI.Dark Mode.漂亮的 Markdown 语法高亮.列表缩进优化,提供 5 种主题选择. 除了支持基本的 Markdown 语法外,还支持大量 Markdown 扩展语法:Table.TOC.MathJax.Fenced code block.任务列表(Task lists).顺序图和流程图.Footnote 等. 支持 Typewriter Scrolling(打机滚动模式)View – Typewriter Scrolling. 支持发布和

急求软件公司定制报告自动生成软件

问题描述 各位大侠们好,公司需要定制一个检测报告自动化的软件平台,由我负责调研,如有意者(一定是软件公司,非个人)请先回复,必联系. 解决方案 解决方案二:如有意者,请给我联系:15622784867.可发信息,必回.解决方案三:需求,需求,需求,需求,需求,需求,需求,需求,需求,解决方案四:=======================================================.NET快速开发整合框架(RDIFramework.NET),基于.NET的快速开发.整合框架

C#如何生成软件各位解决解决

问题描述 我用C#做了一个软件,连接ACCESS数据库,我想拿给别人用,但是他们没有我这个框架,有我这个框架的就没有我的数据库,我应该如何解决,就是最终拿给没有我框架的人用 解决方案 解决方案二:连同你的数据库一起打包发过去解决方案三:在网上找个打包工具!!打包给他就可以了!!解决方案四:引用2楼yagebu1983的回复: 在网上找个打包工具!!打包给他就可以了!! 解决方案五:MS2005有打包工具,打個包就行了解决方案六:具体怎么操作说说,哥们~!详细点,无限感激~!必给分,人在~!

软件注册码方面的应用和本地化的加密

加密 using System;using System.IO;using System.Runtime.InteropServices;using System.Text;using Microsoft.Win32; namespace Wjb.ReadOrWriteIniAndReg{ /// <summary> /// HardDiskVal 的摘要说明. /// 读取指定盘符的硬盘序列号 /// 类库开发:吴剑冰 /// 时间:2003年10月20日 /// 功能:读取指定盘符的硬盘序

在VS2010上用C#语言编写pdf417二维码生成软件,下载的DLL不能用。

问题描述 一般下载的事Encodepdf.dll但是这个貌似不支持C#语言,只支持C++,VB等.求大神帮忙解决.最好能有一个C#能用的dll文件,或者把原来的DLL怎么能不能编辑下使得C#中可以使用,我自己也才初学不久,谢谢大神们. 解决方案

求助:求软件激活的方案谢谢(急)

问题描述 我想知道在用一般工具软件时,跳出的注册提示框是如何做到生成机器码并校验激活码的,C#又如何实现?请有经验的朋友说下原理,提供些简单的代码,能让小弟参考下,谢谢了!顺便提一下,讲软件目录复制到另一台电脑将再次提示软件注册.(应该是写注册表吧) 解决方案 本帖最后由 wywen1982 于 2010-06-25 12:08:51 编辑解决方案二:读取机器主板号写入注册表激活码校验可以使用webservice自己写一个webservice,将用户输入的激活码到服务器上进行校验校验成功,读取客

使用PHP生成1000个随机注册码

一般程序中都需要用到注册码,为了防止盗版,如果把生成的注册码保存到数据库里,并且通过软件在客户端访问服务器来匹配客户端输入的验证码是否正确,这是一种好的解决盗版的方案. 下面描述的代码就是使用PHP生成数字验证码,类似于:152-562-986-230 这样的,为了保证验证码不被猜中,我们采用比较复杂的12位数字,那么可能性就有:999999999999 这么多,那么重复的几率就很小. 我们下面的的程序就演示了身成1000个随机的注册码的例子.包括两个程序,一个程序用来生成从 100到999的序

收集的数千软件序列号_注册码

Windows XP Professional CD w/SP2 简体中文专业版*-华军软件商城价格: 1550.00 元/套 正版序列号:HH7VV-6P3G9-82TWK-QKJJ3-MXR96 正版序列号:F4297-RCWJP-P482C-YY23Y-XH8W3 正版序列号:MRX3F-47B9T-2487J-KWKMF-RPWBY 正版序列号:QC986-27D34-6M3TY-JJXP9-TBGMD office 2003 中文专业版*-华军软件商城价格: 3250.00 元/套 正