4

我正在为我编写的软件编写自己的序列号验证/保护。

假设序列号验证器正在使用模式匹配...一旦序列号被验证,我该如何更改程序本身,使其不再向用户询问序列号?

我真的不想创建单独的许可证文件。有没有办法将它嵌入程序本身?或者注册表是唯一的其他选择(除了在线验证等)

4

4 回答 4

6

您不应该真正尝试编辑程序本身 - 它会破坏签名/强命名,exe/dll 文件几乎肯定会被锁定,即使您进行卷影复制:许多用户也没有编辑权限它在程序文件中(或单击一次)。

诸如许可证文件或注册表设置之类的外部内容似乎是合适的(除非您想在每个客户端的服务器上构建应用程序)。

于 2011-01-05T09:24:09.723 回答
2

有没有办法将它嵌入程序本身?

如果您暗示要修改程序集,那么它是可能的*,您需要有两个程序集 - 一个当前正在执行,一个正在修改 - 因为正在执行的程序集将被文件系统锁定。而且您需要保留足够的空间来存储您打算注入的任何新价值。

*为了向自己证明这一点,我创建了一个小型可执行文件,它简单地写入字符串的值,并使用十六进制编辑器来更改字符串的值。

但是,您需要非常聪明地了解所做的更改,否则注册软件然后简单地将修改后的二进制文件复制到其他机器会绕过您的注册过程。

在注册表中存储注册详细信息可能是一个更简单的解决方案。

于 2011-01-05T09:50:36.437 回答
2

就我个人而言,我总是从机器硬件生成一个唯一的密钥并将其存储在注册表中。

这是一个唯一键的简单示例,但如果您想要为不同版本的软件设置单独的键,您可能需要扩展它。

http://www.vcskicks.com/hardware_id.php

于 2011-01-05T10:09:15.443 回答
0

您可以将输入的序列密钥保存到文件或注册表中,并在用户启动应用程序时对其进行身份验证。

于 2011-01-05T09:24:30.627 回答