- 如何保护对象(程序),在创建对象的时候检测许可证 (License)。
- 加密/解密 用户信息和注册信息。
- 程序加扰 (obfuscate) 或者程序加密,反破解。
.NET 为前两者提供了基本支持,非常方便。这里先说检测许可证。许可证可以有通用注册码、验证用户名的注册码、验证用户机器的注册码等形式。当用户花钱购买了 Shareware 程序,Shareware 程序拥有者就会发送注册码给用户。(Share-It 有在线注册码生成功能,一收到钱立即自动生成注册码)。
Shareware 程序运行时要检测和验证用户是否具有有效的注册码,以决定用户是否能执行程序。
.NET 下的程序都是面向对象的,所以 .NET 在对象的创建机制上,提供了许可证检测的一个接口,Shareware 程序开发可以在此基础上加入自己的注册码验证算法。
.NET Licensing 一文介绍了许可证检测的办法:
[LicenseProviderAttribute(typeof(LicFileLicenseProvider))]
public class LicensedClass : IDisposable
{
private License license = null;
public LicensedClass()
{
license = LicenseManager.Validate(typeof(LicensedClass), this);
Console.WriteLine("Hello from the licensed class.");
}
public void Dispose()
{
if (license != null)
{
license.Dispose();
license = null;
}
}
}
有了这么个结构,程序开发可以把检测许可证交由 .NET 完成,而自己集中精力设计如何验证注册码。把上面的 LicFileLicenseProvider 换成自己的 Custom LicenseProvider。比如,不读文件而去读注册表,见:CodeGuru: Licensed Applications using the .NET Framework 。我的一些文章收藏 (RSS格式) 。
不论是从文件或者从注册表得到注册码,它包含了户是否可以运行程序的信息,而且它一定是只能 Shareware 程序拥有者说了算。因此这个信息是必须加密的。
.NET 提供了非对称加密 (Asymmetric Cryptography) 工具可以用来处理注册码。下一篇文章里继续介绍。