当前位置:  开发笔记 > 编程语言 > 正文

如何为C#应用程序创建产品密钥?

如何解决《如何为C#应用程序创建产品密钥?》经验,为你挑选了7个好方法。

如何为C#应用程序创建产品密钥?

我需要创建一个每年更新的产品(或许可证)密钥.另外,我需要为试用版创建一个.

有关:

如何最好地混淆我的C#产品许可证验证码?

基于Web的许可证激活

您如何保护您的软件免受非法分发?

.NET应用程序的最佳激活密钥软件?

frankodwyer.. 81

您可以执行类似创建包含要对应用程序进行身份验证的数据的记录的操作.这可能包括您想要的任何内容 - 例如,要启用的程序功能,到期日期,用户名称(如果您想将其绑定到用户).然后使用一些加密算法用固定密钥加密或加密它.然后你只需在你的程序中验证它.分发许可文件(在Windows上)的一种方法是将其作为更新注册表的文件提供(保存用户必须键入它).

但要注意虚假的安全感 - 迟早有人会简单地修补程序以跳过该检查,并分发修补版本.或者,他们会找出一张能够通过所有检查并分发,或者回溯时钟等的钥匙.无论你制定计划的方式有多复杂,你为此做的任何事情最终都会通过默默无闻来保证安全,而且他们总会能够做到这一点.即使他们不能有人会,并将分发黑客版本.即使您提供加密狗也是如此 - 如果有人愿意,他们也可以修补支票.对您的代码进行数字签名将无济于事,他们可以删除该签名或将其重新签名.

您可以通过使用防止程序在调试器中运行等技术来使问题复杂化,但即使这不是防弹.因此,您应该让一个诚实的用户不会忘记付费.同样要非常小心,你的计划不会对付费用户产生任何影响 - 最好是为你的付费客户提供一些剽窃副本,而不是能够使用他们支付的费用.

另一种选择是进行在线检查 - 只需向用户提供唯一的ID,并在线检查该ID应具备的功能,并将其缓存一段时间.尽管如此,所有相同的警告都适用 - 人们可以绕过这样的事情.

还要考虑必须与忘记密钥的用户打交道的支持费用等.

编辑:我只是想补充一点,不要在此投入太多时间,或者认为你的复杂计划会有所不同和不可摧毁.它不会,也不会只要人们控制程序运行的硬件和操作系统.开发人员一直试图为此提出更复杂的方案,认为如果他们为它开发自己的系统,那么它将只为他们所知,因此"更安全".但它确实是编程等同于尝试构建永动机.:-)



1> frankodwyer..:

您可以执行类似创建包含要对应用程序进行身份验证的数据的记录的操作.这可能包括您想要的任何内容 - 例如,要启用的程序功能,到期日期,用户名称(如果您想将其绑定到用户).然后使用一些加密算法用固定密钥加密或加密它.然后你只需在你的程序中验证它.分发许可文件(在Windows上)的一种方法是将其作为更新注册表的文件提供(保存用户必须键入它).

但要注意虚假的安全感 - 迟早有人会简单地修补程序以跳过该检查,并分发修补版本.或者,他们会找出一张能够通过所有检查并分发,或者回溯时钟等的钥匙.无论你制定计划的方式有多复杂,你为此做的任何事情最终都会通过默默无闻来保证安全,而且他们总会能够做到这一点.即使他们不能有人会,并将分发黑客版本.即使您提供加密狗也是如此 - 如果有人愿意,他们也可以修补支票.对您的代码进行数字签名将无济于事,他们可以删除该签名或将其重新签名.

您可以通过使用防止程序在调试器中运行等技术来使问题复杂化,但即使这不是防弹.因此,您应该让一个诚实的用户不会忘记付费.同样要非常小心,你的计划不会对付费用户产生任何影响 - 最好是为你的付费客户提供一些剽窃副本,而不是能够使用他们支付的费用.

另一种选择是进行在线检查 - 只需向用户提供唯一的ID,并在线检查该ID应具备的功能,并将其缓存一段时间.尽管如此,所有相同的警告都适用 - 人们可以绕过这样的事情.

还要考虑必须与忘记密钥的用户打交道的支持费用等.

编辑:我只是想补充一点,不要在此投入太多时间,或者认为你的复杂计划会有所不同和不可摧毁.它不会,也不会只要人们控制程序运行的硬件和操作系统.开发人员一直试图为此提出更复杂的方案,认为如果他们为它开发自己的系统,那么它将只为他们所知,因此"更安全".但它确实是编程等同于尝试构建永动机.:-)



2> Spiffeah..:

你信任谁?

我一直认为这个领域太重要了,不能信任第三方来管理应用程序的运行时安全性.一旦该组件针对一个应用程序被破解,它就会被破解以用于所有应用程序.一旦他们在几年前使用3ds Max的第三方许可证解决方案,就会在五分钟内发生Discreet ......好时光!

说真的,考虑自己动手来完全控制你的算法.如果您这样做,请考虑使用密钥中的组件:

许可证名称 - 您获得许可的客户端名称(如果有).对于管理公司部署很有用 - 让他们觉得在您提供的许可证信息中有一个"个性化"名称是特别的.

许可证到期日期

在同一许可下运行的用户数.这假设您有一种以服务器方式跟踪站点上运行实例的方法

功能代码 - 允许您跨多个功能以及跨多个产品使用相同的许可系统.当然如果一个产品被破解,它就会被破解.

然后校验掉他们的地狱并添加你想要的任何(可逆)加密,使其更难破解.

要制作试用许可证密钥,只需为上述值设置值,即转换为"试用模式".

而且由于现在这可能是您的应用程序/公司中最重要的代码,而不是混淆,而是考虑将解密例程放在本机DLL文件中并简单地P/Invoke到它.

我曾为之工作过的几家公司采用了广义的方法,取得了巨大的成功.或许产品不值得破解;)


FYI加密始终是可逆的,无法读取已加密的内容将毫无用处.散列是你可能想到的"加密"的一种方式.

3> Kinjal Dixit..:

如果您询问可以输入的密钥,例如Windows产品密钥,则它们基于某些检查.如果您正在谈论必须复制粘贴的密钥,那么它们基于数字签名(私钥加密).

一个简单的产品关键逻辑可以首先说产品密钥由四个5位组组成,abcde-fghij-kljmo-pqrst然后继续指定内部关系,如f + k + p应该等于a,意味着2的第一个数字,3和4组应该总计a.这意味着8xxxx-2xxxx-4xxxx-2xxxx有效,因此是8xxxx-1xxxx-0xxxx-7xxxx.当然,也会有其他关系,包括复杂的关系,如果第一组的第二个数字是奇数,那么最后一个组的最后一个数字也应该是奇数.这样,产品密钥的生成器和产品密钥的验证将简单地检查它是否匹配所有规则.

加密通常是关于使用私钥(==数字签名)加密并转换为Base64的许可证的信息字符串.公钥随应用程序一起分发.当Base64字符串到达​​时,它由公钥验证(==解密),如果发现有效,则激活产品.



4> spender..:

无论是微不足道还是难以破解,我都不确定它真的会带来很大的不同.

您的应用程序被破解的可能性与其有用性成正比,而不是产品密钥处理的强度.

就个人而言,我认为有两类用户.付钱的人.那些没有的人.即使是最微不足道的保护,这样做也可能会这样做.那些不这样做的人会等待裂缝或寻找其他地方.无论哪种方式,它都不会让你获得更多的钱.



5> Joshua..:

我不得不承认我会做一些相当疯狂的事情.

    找到CPU瓶颈并将其解压缩到P/Invokeable DLL文件.

    作为后期构建操作,使用XOR加密密钥加密DLL文件的一部分.

    选择公钥/私钥方案,在DLL文件中包含公钥

    安排使得解密产品密钥并将两半异或一起导致DLL的加密密钥.

    在DLL的DllMain代码中,禁用保护(PAGE_EXECUTE_READWRITE)并使用密钥对其进行解密.

    制作LicenseCheck()方法,对许可证密钥和参数进行健全性检查,然后校验整个DLL文件,并对其中任何一个进行许可证违规.哦,在这里做一些其他的初始化.

当他们找到并删除LicenseCheck时,DLL启动分段错误时会有什么乐趣.


这种通用技术在80年代后期非常流行.它的弱点在于"秘密"代码被解密到RAM中,从而可以轻松地从任何正在运行的软件副本中窃取.

6> ccook..:

还有Microsoft软件许可和保护(SLP)服务选项.读完之后我真的希望我能用它.

我非常喜欢根据许可证阻止部分代码的想法.热门的东西,最安全的.NET.有趣的阅​​读,即使你不使用它!

Microsoft®软件许可和保护(SLP)服务是一种软件激活服务,可使独立软件供应商(ISV)为其客户采用灵活的许可条款.Microsoft SLP Services采用独特的保护方法,有助于保护您的应用程序和许可信息,从而使您能够更快地进入市场,同时提高客户合规性.

注意:这是我发布带有敏感代码的产品的唯一方法(例如有价值的算法).



7> Roland..:

如果您想要一个简单的解决方案来创建和验证序列号,请尝试使用 Ellipter.它使用椭圆曲线加密并具有"过期日期"功能,因此您可以创建试用版或限时注册密钥.

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有