admin管理员组文章数量:1530518
2024年6月5日发(作者:)
C#软件加序列号激活、试用期限
道高一尺,魔高一丈。
程序员想尽各种办法给软件加密,用户就想尽各种办法对软件破解。
现在做软件试用限制,那么就讨论下软件的试用限制。总体来说,限制的方法有这么几种:
1.时间限制。
2.次数限制。
以时间限制为例,主要是用户从安装之日起, 限制用户使用天数。n天之后,就无法使用。
这种限制主要是安装的时候,将当前日期写入注册表(或者硬盘上某文件)。当然,写入的
是加密过的乱码字符。运行软件时,首先读取注册表(或者文件),如找不到注册表(或者
文件),则提示软件未注册。当正常读取后进行解密,得到注册日期,与当前日期进行比较,
如果 当前日期 减去 注册日期 > n(允许试用天数),那么提示软件试用到期,直接退出
软件。否则 提示可试用天数, 继续试用软件。 根据以上思路,那么用户可以很容易破解
软件。比如更改系统日期、或者删除注册表,重新安装软件等 。
针对用户的破解,对软件限制进行修改。如果试用软件必须联网,或者需要服务器端(比如
聊天软件等客户端软件),当前时间要从去服务器的时间,防止用户更改客户机系统时间。
或者服务器上对客户机进行记录,如记录主板id,安装时间,等等。。。
以上为客户机可联网的做法,当客户机无法上网,切不存在服务器,或者服务器就在本机时。
以上做法将无法使用。
那么对于单机运行的软件,如果需要数据库,我们可以将注册时间等信息写入数据库。或者,
我们可以采用一明一暗的做法,注册表是明,在硬盘的某角落,存放隐藏文件。软件需读取
两处,对两处进行比较,一致则通过,不一致就退出程序。当然,安装的时候对该文件不替
换。 我想用户是不愿意为了使用你的软件而格式化整个硬盘的。
其实还有做法,就是每次运行软件,先将当前日期与注册表对比,看是否过期。如未过期,
就对注册表进行一次更改,更改为当前日期,那么用户即使更改系统日期,他的试用期限也
在逐渐缩小。为了防止用户重装,还是采用一明一暗的做法。
基本上就这些方法吧.. 贴上测试代码:
加密解密类:
using System;
using ;
using uration;
using ;
using ;
using ;
using ;
using graphy;
namespace Add_To_Regedit
{
public class Encryption
{
public static string EncryPW(string Pass, string Key)
{
return DesEncrypt(Pass, Key);
}
public static string DisEncryPW(string strPass, string Key)
{
return DesDecrypt(strPass, Key);
}
/////////////////////////////////////////////////////////////////////
///
/// DES加密
///
///
///
public static string DesEncrypt(string encryptString, string key)
{
byte[] keyBytes = es(ing(0, 8));
byte[] keyIV = keyBytes;
byte[] inputByteArray = es(encryptString);
DESCryptoServiceProvider provider = new DESCryptoServiceProvider();
MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream, Encryptor(keyBytes,
keyIV), );
(inputByteArray, 0, );
inalBlock();
return 64String(y());
}
///
/// DES解密
///
///
///
public static string DesDecrypt(string decryptString, string key)
{
byte[] keyBytes = es(ing(0, 8));
byte[] keyIV = keyBytes;
byte[] inputByteArray = se64String(decryptString);
DESCryptoServiceProvider provider = new DESCryptoServiceProvider();
MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream,
Decryptor(keyBytes, keyIV), );
(inputByteArray, 0, );
inalBlock();
return ing(y());
}
版权声明:本文标题:C#软件加序列号激活 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1717555327a583927.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论