◆需求:
公司一直以来对开发的产品都没有进行使用时间的控制,要么就是将日期限制写死在程序里面,每次都要编译新程序再发给客户,很不方便。于是公司让我写个模块,要求如下:
1、无论哪个新开发的程序只要调用这个模块就可以控制有效期

2、软件到期后需要我们提供有效的注册码软件才能继续使用
(输入验证码,对机器和时间进行对比)
3、客户修改了电脑的时间或者将软件移动到其他电脑依然可以控制

(可以用你何必要用客户端时间啊,用服务器时间不就解决问题了)
4、如果用注册表的方式,不允许当客户知道注册表后,修改注册表还能继续使用的情况
5、控制方式不要太复杂
RegDLL.RegClass reg = new RegDLL.RegClass(System.IO.File.GetLastWriteTime(System.Reflection.Assembly.GetAssembly(typeof(Form1)).Location).ToShortDateString());
if (reg.MiStart_Infos() && reg.MiEnd_Infos())
{
Application.EnableVisualStyles();
//Application.SetCompatibleTextRenderingDefault(true);//这句要注释掉,因为一个程序里面只能出现一句,dll里面已经有一句了,所以这里要注释
Application.Run(new Form1());
}
else
{
Application.Exit();
}
◆分析:
1、当时我的第一反应就是dll,于是我就用了dll的方法来做。
2、这个做一个注册机即可。
3、我开始是想用网络时间的验证方式,但是客户的电脑不一定联网,所以不能用网络时间的方式。
4、如果用注册表,重装系统或者拿到其他电脑软件还是无法控制,所以干脆不用注册表。
5、需要注册功能的软件只需要引用dll并修改Program.cs文件为如下即可,够简单吧
show source
实现的思路:
其实也挺简单,我用两个文件分别来记录软件注册的时间(下面提到的秘密文件)及到期的时间(下面提到的注册文件),这两个文件用记事本即可,文件强制作为软件的必要文件,缺少则无法运行软件,当然为了更加安全可以加密文件,不过我这里没有做。
dll模块实现的功能如下:
一、检查秘密文件是否存在(Eng.k)
1.存在,则读取密文,密文为空则将程序的编译日期写入(调用此模块后软件第一次运行需要注册一次)
2.密文不为空则跟当前电脑时间对比,验证电脑时间的有效性,有效则将电脑时间写入秘密文件
3.这里的时间有效性就是说电脑的时间不能小于软件注册的时间,里面做了验证
二、检查注册文件是否存在(Engi.p)
1.存在,则读取密文中的软件有效期
2.如果密文有效期为空并且秘密文件信息正确,则生成注册码,并写入有效日期
3.接着比较当前日期是否处在两个文件的日期当中,是则软件有效,否则软件的注册码无效,需要重新注册有效的注册码
三、注册机的实现
1.当然就是根据日期生成注册码咯
2.把注册码发给客户注册,至于是否有效就是dll要做的事情啦
四、这种方式有个漏洞,若客户知道注册的原理,聪明点的就可以破解了,所以肯定不能透露O(∩_∩)O~
◆源码
源码自我感觉写得不够漂亮,这里我就不提供了,不过提供我的dll文件、注册机及示例项目的下载地址:http://files.cnblogs.com/linyc/REGDLL.rar
Ps:想看源码可以用反编译软件,看了源码就知道只是用了点"小伎俩"而已,欢迎大家反编译哈~有什么好的建议欢迎狠狠提出来交流哈~
声明:本软件只作为交流技术使用,不可作为商业用途,如因此引起的法律问题及其他责任本人概不负责。
转载请注明出处:http://www.cnblogs.com/linyc/archive/2011/03/26/1996397.html

C# 简单软件有效期注册的实现的更多相关文章

  1. apktool给软件加注册机修改图标和文件名

    功能实现,即让你的软件具有注册机功能,或者破解别人的软件,据为己有! 先反编译文件包 然后全局工具,修改图标和名称 加注册机,输入key,下载计算器,即可.给某个用户设置自定义的使用时间!

  2. AJAX的简单示例:注册校验

    众所周知,我们每次需要注册一个网站的用户名时,都会校验该邮箱.用户名是不是正确的格式.是不是有被使用过,密码是否符合规则,二次确认是否符合. 如果这些校验都采用form表单提交的话,会给用户带来极不好 ...

  3. 同步软件UltraCompare 64位 软件及注册机

    软件及注册机下载: https://share.weiyun.com/f09e6243887e374ead1b3a3ab8f611a9 软件官方下载地址:  https://www.ultraedit ...

  4. Angular之简单的登录注册

    使用Angular实现了一个简单的登录注册的功能........ 涉及到的Angular知识点很少 主要是这个功能的实现...(*^__^*) 嘻嘻…… 里面涉及到的知识点记录: 1.本地存储的操作 ...

  5. Python 实现简单的登录注册界面

    Python 实现简单的登录注册界面 注意:编写代码之前需要导入很重要的包 import tkinter as tk import pickle from tkinter import message ...

  6. (转)微服务_创建一个简单的Eureka注册中心

    原文地址:https://www.cnblogs.com/lplshermie/p/9105329.html 微服务和分布式已经成了一种极其普遍的技术,为了跟上时代的步伐,最近开始着手学习Spring ...

  7. 基于ZooKeeper实现简单的服务注册于发现

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/Shaun_luotao/article/ ...

  8. 创建一个简单的Eureka注册中心

    微服务和分布式已经成了一种极其普遍的技术,为了跟上时代的步伐,最近开始着手学习SpringCloud,就从Eureka开始.他们俩就不做介绍了,网上的说明一堆,随便打开一个搜索引擎输入关键字都足够了解 ...

  9. C#实现软件授权,限定MAC运行(软件license管理,简单软件注册机制)

    一个绿色免安装软件,领导临时要求加个注册机制,不能让现场工程师随意复制.事出突然,只能在现场开发(离开现场软件就不受我们控了).花了不到两个小时实现了简单的注册机制,稍作整理. 基本原理:1.软件一运 ...

随机推荐

  1. Python变量和字符串详解

    Python变量和字符串详解 几个月前,我开始学习个人形象管理,从发型.妆容.服饰到仪表仪态,都开始做全新改造,在塑造个人风格时,最基础的是先了解自己属于哪种风格,然后找到参考对象去模仿,可以是自己欣 ...

  2. poi3617Best Cow Line ——贪心法

    给定长度为N(1≤N≤2000)的字符串S,要构造一个长度为N的字符串T.期初,T是一个空串,随后反复进行下列任意操作. ·从S的头部删除一个字符,加到T的尾部 ·从S的尾部删除一个字符,加到T的尾部 ...

  3. SEC5 - MySQL 查询语句--------------进阶1:基础查询

    # 进阶1:基础查询 /* 语法: select 查询列表 from 表名: 特点: 1.查询列表可以是:表中的字段.常量值.表达式.表达式.函数 2.查询的结果是一个虚拟的表格 如何执行:执行谁,请 ...

  4. (转载)Manacher'sAlgorithm: O(n)时间求字符串的最长回文子串

    以下内容转载自:传送门 源于这两篇文章: http://blog.csdn.net/ggggiqnypgjg/article/details/6645824http://zhuhongcheng.wo ...

  5. jQuery遍历集合

     jQuery 遍历List集合 $(function(){ var tbody = ""; var obj =[{"name ":"xxxx&quo ...

  6. Expected one result (or null) to be returned by selectOne() 数据库结果集和java实例

    mybatis会根据查询的结果集初始化java实例. 如果是复杂类型,我们一般都会在mapper中做好映射. 1.所以如果查询到的是多个结果,那么对应的java类型也必须的集合类型.(result 为 ...

  7. android测试开发概念

    一:测试分类 1.分类概览 按测试阶段划分: 单元测试 集成测试 系统测试 验收测试 按是否覆盖源代码: 黑盒测试: 功能测试: 界面测试 逻辑测试 安装测试 应用性测试 兼容性测试 性能测试: 稳定 ...

  8. 《剑指offer》面试题9 斐波那契数列 Java版

    书中方法一:递归,这种方法效率不高,因为可能会有很多重复计算. public long calculate(int n){ if(n<=0){ return 0; } if(n == 1){ r ...

  9. luoguP1311 选择客栈 题解(NOIP2011)

    P1311 选择客栈  题目 #include<iostream> #include<cstdlib> #include<cstdio> #include<c ...

  10. windows不重装系统和重建MBR分区表来扩展系统盘

    step1. 下载Acronis Disk Director Suite工具,随便一搜都能下载的到. step2. 这个软件使用非常easy,网上有非常多图文教程.扩充盘使用Increase the ...