用C#.NET编写软件注册机
验证注册码是保护软件产品产权的常用手段。一般过程如下,
1、 软件发行者收集用户特有的信息;
2、 根据用户特有的信息,使用注册机生成注册码并把注册码发给客户;
3、 向软件导入注册码,由软件自己验证注册码的正确性。
这个过程是如何实现的呢? 我写了一个简单的实现,供大家研究。因为是初次进入这个编程领域,希望高手们给我更多的指导。
第一步利用用户的机器名生成客户特有的认证码
代码如下:
1>> MD5CryptoServiceProvider provider1;
2>> byte[] array1;
3>> string text1;
4>> string text2;
5>> byte num1;
6>> byte[] array2;
7>> int num2;
8>> provider1 = new MD5CryptoServiceProvider();
9>> array1 = provider1.ComputeHash(Encoding.Default.GetBytes(Environment.MachineName));
10>> text1 = "ENTOPYMICROSYSTEMSDEVINIMMUHENDISLIK231456789ACD23456789AEFABGHJKLMNPRSTUVWYZXAHMETALIAKKASHAKANESKICI";
11>> text2 = string.Empty;
12>> array2 = array1;
13>> for (num2 = 0; (num2 < array2.Length); num2 = (num2 + 1))
14>> {
15>> num1 = array2[num2];
16>> text2 = string.Concat(text2, text1.Substring((num1 % text1.Length), 1));
17>> }
18>> this.txtMachineCode.Text = text2.Substring(0, 10);
首先,我们把用户机器上得到的机器名字串用MD5计算出一个哈希值,参见第9行。
比如,如果MachineName = “WORKGROUP”的话, 我们得到了一个16字节的整数数组:array1{61,2,205,140,186,38,191,108,238,218,125,4,55,81,100,215}。
然后,我们分别使用16个整数,到密码字典(第10行,text1就是一个密码字典)中找到对应的字符,然后把找到的这16字符连成字符串,就得到了认证码。
注意点:
1、 这里的密码字典的定义方法很容易被反编译,大家可以使用其它更隐蔽的方法;
2、 密码字典的长度有限,我这里使用了模除,参见第16行;
3、 本例中只使用了16位认证码的前10位“GTN1L1AMIT”,参见第18行;
最后,用户把他的10位认证码“GTN1L1AMIT”和其它的信息(用户ID:gujinsong, 用户名:gujinsong, 注册类型:0, 公司名: china, 生成时间: 2008/12/8 17:20:32)一起发给了软件发行者。
第二步,软件发行者在收到用户的信息后,按照下面的代码生成了注册码:
1>> stream1 = new MemoryStream();
2>> formatter1 = new BinaryFormatter();
3>> formatter1.Serialize(stream1, this.txtMachineCode.Text);
4>> formatter1.Serialize(stream1, this.txtUserId.Text);
5>> formatter1.Serialize(stream1, cboLicenseType.SelectedIndex);
6>> formatter1.Serialize(stream1, txtUserName.Text);
7>> formatter1.Serialize(stream1, txtCompany.Text);
8>> formatter1.Serialize(stream1, System.DateTime.Now);
9>> array1 = stream1.ToArray();
10>> provider1 = new RC2CryptoServiceProvider();
11>> provider1.KeySize = 128;
12>> provider1.GenerateKey();
13>> provider1.GenerateIV();
14>> array2 = provider1.IV;
15>> array3 = provider1.Key;
16>> transform1 = provider1.CreateEncryptor();
17>> stream1 = new MemoryStream();
18>> stream2 = new CryptoStream(stream1, transform1, System.Security.Cryptography.CryptoStreamMode.Write);
19>> try
20>> {
21>> stream2.Write(array1, 0, array1.Length);
22>> stream2.FlushFinalBlock();
23>> array4 = stream1.ToArray();
24>> }
25>> finally
26>> {
27>> stream1.Close();
28>> stream2.Close();
29>> }
30>> stream1 = new MemoryStream();
30>> formatter1.Serialize(stream1, array4);
31>> formatter1.Serialize(stream1, array3);
32>> formatter1.Serialize(stream1, array2);
33>> this.txtLicenseCode.Text = Convert.ToBase64String(stream1.ToArray());
首先,把从用户处得到的信息按照一定的顺序串行到二进制流中,见代码行2~8。其中txtMachineCode.Text是用户的10位验证码“GTN1L1AMIT”。
然后,使用RC2加密算法加密这个二进制流。之所以要使用RC2,是因为加密后的密文需要解密,见代码行9~18。这里的密钥,是由RC2CryptoServiceProvider 随即生成的,见代码行11~15。这个密钥最终以明文的形式与秘文一起组成注册码,并发送给用户,见代码行30~32。本例中我们得到的注册码如下:
>> AAEAAAD/AQAAAAAAAAAPAQAAAAgBAAACKXfIynazb8FfhVCcacGIX3xxY9X7gis1H48K+WXLzX3erjqisWuGa21BbiMX
>> G7PWGAGBke91WzmAYwqK/vtDbAt25rXNIqhIr5dVamAG/JOelvekZGyORjHjghQ9hnefxKyISKxdFtpA+nlLtAM4CX4AJv6L0Yu
>> khiiRx4ritOrrZ+8WVLV+HSmyOImOgyAHCY6FCkbsmiYyYLEvzVttMO+8p23AMY+Vg9ZrpDzMHIC9dbxIcxLfWFuII6e8OG1z0IF
>> Utf/8uNkT9v/1Uf5q1v0BxVYMIdAdAUszpAqSYr2DecAgotLom2oFGifZLpc4NbWhazNff8ZxGwYrgp8iD4QjSUi2pTXrCwABAA
>> AA/wEAAAAAAAAADwEAAAAQAAAAAkwbbXFGqXhtB67KVQTACxwLAAEAAAD/AQAAAAAAAAAPAQAAAAgAAAACs
>> p9HYZ0Bl6oL
注意点:
1、 因为软件还需要用密钥来解密密文,所以密钥必须明文传递,我还没有想到更好的方法;
2、 我们可以混淆密钥在注册码中的位置,加大破解的难度;
3、 生成的注册码中没有换行符。
第三步,导入注册码。
用户输入注册码时,软件需要验证注册码的真伪。基本上有两种方法:
1、 用密钥解密密文,从而验证用户的注册信息;
这种方法只需要在软件中加入解密代码就可以了,但是他的弊端很多。破解者只要能伪装解密后的信息就可以了。
2、使用密钥,重复生成注册码的过程,后与软件发行者提供的注册码比较,就可以了。这里就不再提供重复的代码了。
全文完。
转载于:https://www.cnblogs.com/tingfeng/articles/5120774.html
用C#.NET编写软件注册机相关推荐
- 【转】破解Source Insight 3.5.0072过程 附:安装软件+注册机
转载地址:http://blog.csdn.net/qs_hud/article/details/8884867 注册机及软件下载地址:http://download.csdn.net/detail/ ...
- 为您的软件制作一款注册机
转载自:http://www.csharpwin.com/csharpspace/2337.shtml 从今天起, 您开发的的任何软件如果您愿意都可以为之加密 --为您的软件制作一款注册机! 当您看完 ...
- python网络爬虫笔记14:使用pyqt制作注册机
1 使用QT设计器设计界面 布局如下页面 观察页面可知: 页面有3行构成,第1行为机器码及对应的输入框:第二行为注册按钮:第三行为注册码及查询框 文本框使用的是 lineEdit控件,可以使用 pla ...
- Pix4Dmapper注册机
点击下载来源:Pix4Dmapper注册机 Pix4Dmapper注册机是一款由网友针对功能丰富的无人机建模软件Pix4Dmapper进行激活而制作的破解工具,通过使用它获取并生成注册激活码进行软件注 ...
- 1-Click PC Tuneup软件-破解实录-[附加篇]编写注册机
[作者] 网名: 猪头三 站点: http://www.x86asm.com Email: pliceman_110@163.com QQ: 643439947 编程生涯: 2001-至今[12年] ...
- TraceMe.exe注册码破解及注册机编写
一.追注册码步骤解析 打开OllyDbg反汇编软件,对实验程序TraceMe.exe进行反汇编. 点击View-Executable modules查看可执行模块,在新窗口中右击,选择Show nam ...
- 010 Editor算法逆向与编写注册机
010editor是一款非常好用的十六进制编辑工具,但是因为他是收费软件,我们接下来对此软件进行一下破解与编写注册机 将程序拖入OD,通过字符串搜索定位到核心代码,经过分析,主要是如下图所示的两个关键 ...
- 小白第一次注册机编写,c/bat/易某言(不好意思说2333)
小白第一次注册机编写,c/bat/易某言(不好意思说出口2333) 零.视频教程 一.免责声明 二.软件相关信息 三.查壳 四.分析软件注册流程 五.IDA载入 六.OD载入 (一).找关键跳转 1. ...
- C#学习笔记——软件注册与注册机
(一)软件的实现: SoftReg类: 1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: u ...
- C#软件授权、注册、加密、解密模块源码解析并制作注册机生成license
最近做了一个绿色免安装软件,领导临时要求加个注册机制,不能让现场工程师随意复制.事出突然,只能在现场开发(离开现场软件就不受我们控了).花了不到两个小时实现了简单的注册机制,稍作整理. ...
最新文章
- 纯数学思想——在哈尔滨的寒风中
- jmeter执行python脚本,Jmeter+Python-1问题记录jmeter执行Python3的脚本时报 ValueErro
- struts.xml文件的配置说明
- [NOIP2015] 子串
- halcon write_ocr_class_svm 将OCR分类器写入文件
- c++文件流基本用法(fstream, ifstream, ostream)
- 线程安全使用相关注意事项
- 超详细深度学习debug指南,国外小哥手把手教你如何调试模型 | 附PPT
- 2019-12-17 TCP报头结构
- 为什么会自动打开Nautilus文件管理器?
- linux日期时间转换函数,Linux时间戳、日期转换函数
- 【NLP】第 2 章 访问文本语料库和词汇资源
- MATLAB零基础入门教程视频课程
- xp系统进不去2008服务器共享,xp系统设置访问Server 2008R2的共享不输入密码的方法...
- php汉字转拼音百家姓版,百家姓详(带拼音).ppt
- Nvidia GeForce GTX 1650不支持OpenGL4.6
- OSPF你懂多少之经典问题50个
- Recovering a NOARCHIVELOG Database with Incremental Backups
- 2021知识付费、流量变现小程序源码系统搭建安装教程,一个小白都可以日入过千的项目。
- K-Means算法实现网页聚类
热门文章
- 1.4多媒体计算机系统教案,1.4 多媒体计算机系统教案3
- Django-rest-framework框架之drf内置认证,权限,频率类,异常处理与自动生成接口文档
- 微信公众号网页开发,登录授权和微信支付
- [项目管理]-第十二章:项目监督和控制
- 程序员如何实现“财务自由”?反正不是靠天天加班就能的!
- 数学建模算法:层次分析法之如何选择旅游目的地
- zib机器人怎么_ZIB智伴机器人好不好 ZIB智伴机器人使用测评
- 【软工】week3-个人阅读作业-软件案例分析
- win7局域网ip切换工具内网外网多网段切换工具分享教程
- VMWare虚拟机服务器设置固定ip,切换网络后不用重新设置服务器ip