2011-01-05 35 views
4

我正在为自己编写的软件写我自己的序列号验证/保护。嵌入程序中的C#序列号

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

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

回答

6

你不应该真的试图编辑程序本身 - 它会破坏签名/强命名,exe/dll文件几乎肯定会被锁定,即使您进行了影子复制:许多用户将不会有权限在程序文件(或点击一次)中对其进行编辑。

许可证文件或注册表设置等外部合适的东西似乎是合适的(除非您希望在每个客户端的服务器上构建应用程序)。

0

您可以将输入的序列号保存到文件或注册表中,只要用户启动应用程序就对其进行身份验证。

2

有没有一种方法将其嵌入程序本身?

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

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

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

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

2

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

下面是一个唯一密钥的简单示例,但如果您希望对不同版本的软件使用不同的密钥,则可能需要对其进行扩展。

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

+0

只是再次读取OP和意识到我已经回答了所有的错误,我仍然会超过嵌入注册表设置去。 – nik0lias 2011-01-05 10:14:59