前言


本文将使用一个NuGet公开的组件技术来实现机器码注册码功能开发,提供了一些简单的API,来方便的实现。

在Visual Studio 中的NuGet管理器中可以下载安装,也可以直接在NuGet控制台输入下面的指令安装:

Install-Package HslCommunication

NuGet安装教程  http://www.cnblogs.com/dathlin/p/7705014.html

联系作者及加群方式(激活码在群里发放):http://www.hslcommunication.cn/Cooperation

Summary


在我开发完成一个软件后,尤其是要发放给别人使用的软件时,为了防止软件被恶意使用,有时候会采用注册机的机制来实现,比如我们会获取一串唯一的机器码,然后进行加密运算,程序在激活前就检测注册码是否正确,正确就启动程序,然后就启动失败,为了防止激活码被破解,通常都需要对程序加一层壳,也即是混淆,这样就能防止99%的开发者来破解注册码,要是真有大神愿意破解你的程序,只能证明你的程序很值钱了,即使大神破解,也免不了查出来要承担相应的法律责任。

Reference


CRC组件所有的功能类都在 HslCommunication.BasicFramework 命名空间,所以再使用之前先添加

using HslCommunication.BasicFramework

How to Use


情景一:程序启动验证注册码,如果注册码存在且正确,窗口继续运行,否则弹出输入注册码窗口,除非输入了正确的注册码,否则窗体退出

那么我们就需要在Form的Load方法中进行验证操作,先在Form下实例化授权类,然后需要提供一个你自己的从机器码到注册码的生成规则,实质上就是一个加密方法,你也可以参照下面的例子:

private HslCommunication.BasicFramework.SoftAuthorize softAuthorize = null;

        private void FormRegisterTest_Load(object sender, EventArgs e)
{
softAuthorize = new HslCommunication.BasicFramework.SoftAuthorize();
softAuthorize.FileSavePath = Application.StartupPath + @"\Authorize.txt"; // 设置存储激活码的文件,该存储是加密的
softAuthorize.LoadByFile(); // 检测激活码是否正确,没有文件,或激活码错误都算作激活失败
if (!softAuthorize.IsAuthorizeSuccess(AuthorizeEncrypted))
{
// 显示注册窗口
using (HslCommunication.BasicFramework.FormAuthorize form =
new HslCommunication.BasicFramework.FormAuthorize(
softAuthorize,
"请联系XXX获取激活码",
AuthorizeEncrypted))
{
if (form.ShowDialog() != DialogResult.OK)
{
// 授权失败,退出
Close();
}
}
} textBox1.Text = softAuthorize.GetMachineCodeString(); // 显示出机器码,情景二用
} /// <summary>
/// 一个自定义的加密方法,传入一个原始数据,返回一个加密结果
/// </summary>
/// <param name="origin"></param>
/// <returns></returns>
private string AuthorizeEncrypted(string origin)
{
// 此处使用了组件支持的DES对称加密技术
return HslCommunication.BasicFramework.SoftSecurity.MD5Encrypt(origin, "12345678");
}

在没有激活过的情况下,运行窗体就会显示注册窗口。

那么现在我们已经有机器码了,那么注册码怎么来呢?还记得上面的代码有个方法呢?就是AuthorizeEncrypted方法,只要吧这串机器码当作参数传入就可以获取到注册码,就可以填进去激活软件了。如果你填了错误的激活码,或是关闭了注册窗口,这个窗口就会退出。

在此处我的机器码如上面所示,执行这个方法后的注册码为:B384A9552ACFABF3CF839FB8A7CEAB123A264457BA0C176AE13F412CDD76C338,如果你的窗口为主窗口,那么授权功能已经写完了,假设你把软件分发出去了,拷贝给别人了,别人运行后就会弹出输入注册码,你就叫他把机器码发给你,你在写个窗口计算出注册码发给对方,对方就可以运行软件了。

情景二:不提供手动申请注册码,直接在软件里写死。每次分发软件都需要对方先提供机器码(你可以做个超级简单的exe,就只有显示机器码的功能),编译号软件再进行分发,这种更难破解。

但是也牺牲了一定的灵活度,在窗口载入中的代码如下:

        private HslCommunication.BasicFramework.SoftAuthorize softAuthorize = null;

        private void FormRegisterTest_Load(object sender, EventArgs e)
{
softAuthorize = new HslCommunication.BasicFramework.SoftAuthorize();
//softAuthorize.FileSavePath = Application.StartupPath + @"\Authorize.txt"; // 设置存储激活码的文件,该存储是加密的
//softAuthorize.LoadByFile(); // 检测激活码是否正确,没有文件,或激活码错误都算作激活失败
//if (!softAuthorize.IsAuthorizeSuccess(AuthorizeEncrypted))
//{
// // 显示注册窗口
// using (HslCommunication.BasicFramework.FormAuthorize form =
// new HslCommunication.BasicFramework.FormAuthorize(
// softAuthorize,
// "请联系XXX获取激活码",
// AuthorizeEncrypted))
// {
// if (form.ShowDialog() != DialogResult.OK)
// {
// // 授权失败,退出
// Close();
// }
// }
//} // 此处示例程序的机器码为:2E4C8EB0EBB8C4551C49AC277
// 直接进行判断,允不允许运行
if (!softAuthorize.CheckAuthorize("B384A9552ACFABF3CF839FB8A7CEAB123A264457BA0C176AE13F412CDD76C338", AuthorizeEncrypted))
{
// 检测授权失败
Close();
} textBox1.Text = softAuthorize.GetMachineCodeString();
} /// <summary>
/// 一个自定义的加密方法,传入一个原始数据,返回一个加密结果
/// </summary>
/// <param name="origin"></param>
/// <returns></returns>
private string AuthorizeEncrypted(string origin)
{
// 此处使用了组件支持的DES对称加密技术
return HslCommunication.BasicFramework.SoftSecurity.MD5Encrypt(origin, "12345678");
}

  

目前的激活方式是基于本地的单机激活,如果需要采用联网激活的方式,那么也是非常容易实现的,在程序启动的时候,把机器码通过网络发送给服务器,根据服务器返回的值来判断有没有启动程序的权利。

在C#下方便的网络交互,请参考如下的文章:

http://www.cnblogs.com/dathlin/p/7697782.html

C# 注册机功能开发,机器码设计的更多相关文章

  1. Scrum立会报告+燃尽图(十一月十六日总第二十四次):功能开发与设计页面

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2384 项目地址:https://git.coding.net/zhang ...

  2. 一步步开发自己的博客 .NET版(3、注册登录功能)

    前言 这次开发的博客主要功能或特点:    第一:可以兼容各终端,特别是手机端.    第二:到时会用到大量html5,炫啊.    第三:导入博客园的精华文章,并做分类.(不要封我)    第四:做 ...

  3. [原创]VB注册机独辟蹊径-----注册机也可以这样写

    近段时间接了个项目,是关于一个称重传感器的上位机系统,需要一机一码针对不同的客户机分别注册,第一次注册完后,下次打开后不必注册. 刚开始想用正规的注册机办法去完成,搜罗了半天,发现现在大部分的硬盘注册 ...

  4. Sublime Text 3 破解版 + 注册机 + 汉化包 + 教程

    SublimeText 是一个代码编辑器,也是HTML和散文先进的文本编辑器. SublimeText 是由程序员 Jon Skinner 于2008年1月份所开发出来,它最初被设计为一个具有丰富扩展 ...

  5. Adobe Photoshop CC 2018 v19.0 简体中文正式版下载安装破解(附注册机+破解教程) 32/64位(安装破解注意事项是什么)

    Adobe Photoshop CC 2018 v19.0 简体中文正式版下载安装破解(附注册机+破解教程) 32/64位(安装破解注意事项是什么) 一.总结 一句话总结:下载安装破解教程文中都有,需 ...

  6. MAVLink功能开发,移植教程。

    MAVLink功能开发 -----------------本文由"智御电子"提供,同时提供视频移植教程,以便电子爱好者交流学习.---------------- 1.MAVLink ...

  7. Autocad2017破解版下载|Autodesk Autocad 2017中文破解版下载 64位(附注册机/序列号)

    Autocad2017是Autodesk公司开发的自动计算机辅助设计软件,可用于二维绘图.详细绘制.设计文档和基本三维设计,它具有良好的用户界面,允许用户通过交互菜单或命令行方式来进行各种操作,包括图 ...

  8. PostSharp 4.0注册机实现过程

    PostSharp是基于.NET平台设计的比较强调易学易用的AOP框架. 什么是AOP? http://wayfarer.cnblogs.com/articles/241024.html 新版的已失效 ...

  9. UltraEdit注册机 及使用方法详解

    转载自:http://www.iyaxi.com/ultraedit-key/ UltraEdit是一款强大的文字编辑器,很多编程的.搞设计的等等都能用到它,具体功能请自行百度.今天为大家带来UE软件 ...

随机推荐

  1. 谷歌技术"三宝"之GFS

    题记:初学分布式文件系统,写篇博客加深点印象.GFS的特点是使用一堆廉价的商用计算机支撑大规模数据处理. 虽然"The Google File System " 是03年发表的老文 ...

  2. StringUtils工具类常用方法汇总(截取、去除空白、包含、查询索引)

    一.截取   StringUtils中常用的截取字符串的方法如下: substring(String str,int start) substring(String str,int start, in ...

  3. VC++ 实现INI文件读写操作

    转载:https://blog.csdn.net/fan380485838/article/details/73188420 在实际项目开发中,会用ini配置文件,在此总结一下对ini读写操作 一:读 ...

  4. tp未验证内容-9

    在tp的数据库配置中, convention.php中所有的选项都没有设置,要自己在Home/conf/config.php中自己设置, 注意几个地方,一是数据库的名字是: db_name,不是db_ ...

  5. 第十届蓝桥杯2019年C/C++ 大学A组省赛试题

    2019年蓝桥杯第十届软件类省赛 C/C++ 大 学 A 组 试题 A: 平方和 本题总分:5 分 [问题描述] 小明对数位中含有 2.0.1.9 的数字很感兴趣,在 1 到 40 中这样的数包括 1 ...

  6. ubuntu14.04 anaconda tensorflow spyder(python3.5) + opencv3

    windows上用的tensorflow是依赖于python3.5,因此在linux下也配的3.5 一. 在Anaconda官网上下载Anaconda3-4.0.0-Linux-x86_64.sh文件 ...

  7. MapReduce编程:平均成绩

    问题描述 现在有三个文件分别代表学生的各科成绩,编程求各位同学的平均成绩.                     编程思想 map函数将姓名作为key,成绩作为value输出,reduce根据key ...

  8. Unity3D外包(u3d外包)—就找北京动点软件(我们长年承接U3D外包、Maya、3DMax项目外包)

    一.关于动点: 北京动点飞扬软件,因致力于虚拟现实技术的开发而创立,在虚拟现实开发领域有着卓越的技术和领先的思想.   我们为用户专业定制的项目,细分了多种工作流程,软件独立自主研发,编程简化用户操作 ...

  9. Django 编写模板并渲染的示例

    >>> from django.template import Template, Context >>> raw_template = ""& ...

  10. spoj1433 KPSUM

    题意:略: 首先知道10,20,......100,200,1000的前面的符号都是负号. 举具体例子:221时,计算过程为 000-009,     010-019,   020-029...... ...