这是我参与8月更文挑战的第28天,活动详情查看:8月更文挑战
概述
上一篇文章我们主要介绍到的是通过时间验证的方式对程序进行加密处理,还有一种方法,是对程序的使用次数进行限制,从而达到对程序进行加密的目的,主要就是将次数写入注册表中,如果想要加密的全面一点,只需要将时间加密等进行结合即可。下面就一起来看一下,在unity中是如何对程序的使用次数进行限制和绑定电脑的MAC地址。
优缺点
优点:
- 限制使用次数:可以是用户使用有限的次数,防止反复复用,即使复制到别的电脑也只能使用几次 缺点:
- 限制使用次数:删除注册表之后又可以重新使用
思路分析
限制使用次数,主要是在程序运行时检测有没有注册表数据,没有,在注册表中写入可运行的次数,然后以后每运行一次,就获取一下注册表中次数,减一次,并重新写入。直到次数归零,程序将不再可以使用。
功能实现
首先,查找注册表看是否有我们当前项目创建的记录次数的子项,没有,则写入一个。注意:需要引用命名空间:
using Microsoft.Win32;,这个命名空间需要使用4.×的API
RegistryKey RootKey, RegKey;
//项名为:HKEY_CURRENT_USER\Software
RootKey = Registry.CurrentUser.OpenSubKey("SOFTWARE", true);
//打开子项:HKEY_CURRENT_USER\Software\MyRegDataApp
if ((RegKey = RootKey.OpenSubKey("TestToControlUseTime", true)) == null)
{
RootKey.CreateSubKey("TestToControlUseTime"); //不存在,则创建子项
RegKey = RootKey.OpenSubKey("TestToControlUseTime", true);
RegKey.SetValue("UseTime", (object)2); //创建键值,存储可使用次数
}
RegKey.SetValue("UseTime", (object)2);中的2就是设置的数值
然后在进行读取键值,获取可使用次数。
object usetime = RegKey.GetValue("UseTime"); //读取键值,可使用次数
然后对当前次数进行减一,然后和0进行比较,查看是否到达使用次数,如果没有,程序继续,然后更新注册表中的使用次数
int newtime = int.Parse(usetime.ToString()) - 1;
if (newtime < 0)
{
Application.Quit();
}
else
{
RegKey.SetValue("UseTime", (object)newtime); //更新键值,可使用次数减1
}
到这里就实现了注册表加密。
测试效果
打包出来进行测试,这里是以可以运行两次为例。首先记录住打包数据,方便一会查看注册表(和记录的次数并没太大的关系)
打包完成后首先来看一下注册表中,并没有我们要创建的项(路径:HKEY_CURRENT_USER\Software\)
接下来运行第一次程序,然后可以看到注册表中多了两项,一个是程序运行时自动生成的,还有一个是我们创建的使用次数
程序中显示次数如下
注册表中显示数据如下,虽然我们设置的是2次,但是当前打开已经占用了一次机会,所以注册表中显示的应为1次
可以看到UseTime中的值是1,程序剩余次数。当我们再启动两次,会发现,第二次程序就自动退出了。如下
而此时注册表中的数据已经清零,想要在次使用该程序只有清除注册表才可以
源代码分享
GitHub地址下载:点击这里进行跳转下载
写在最后
所有分享的内容均为作者在日常开发过程中使用过的各种小功能点,分享出来也变相的回顾一下,如有写的不好的地方还请多多指教。欢迎大家相互学习进步。本片文章就先写到这里,希望对你能够有所帮助