导航

.NET 下制作 Shareware 的关键技术探讨一:Licensing

Posted on 2004-08-20 08:43  yysun  阅读(2541)  评论(1编辑  收藏  举报
制作 Shareware 有三个关键点:
  • 如何保护对象(程序),在创建对象的时候检测许可证 (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) 工具可以用来处理注册码。下一篇文章里继续介绍。