jjzjj

c# - 出于软件保护目的,将保护试用信息存储在何处

coder 2024-05-20 原文

它可能与其他问题重复,但我发誓我在 StackOverflow.com 上进行了大量搜索和搜索,但我找不到问题的答案:

在C#.Net应用程序中,保护试用信息(如到期日期、使用次数)存储在哪里?

据我所知,老练的黑客可以破解各种软件保护策略(因为他们几乎总能绕过过期检查步骤)。但我现在要做的只是以合理的方式保护它,让“普通”/“高级”用户无法搞砸。

好的,为了证明我已经在 StackOverflow.com 上进行了大量搜索,我列出了所有可能的策略:

1。注册表项

首先,某些用户可能无权访问注册表。

其次,如果我们将Protection Trial Info放在Registry Entry中,用户总能通过比较软件安装前后的差异,找到它所在的位置。他们可以简单地改变它。

好的,您可能会说我们应该加密保护试用信息,是的,我们可以做到。但是,如果用户只是在安装前更改了系统日期怎么办?

好吧,你可能会说我们也应该放一个最后使用日期,如果有什么不对,最后使用日期可以作为保护指南。但是,如果用户只是卸载软件并删除与该软件相关的所有注册表项,然后重新安装软件呢?

我不知道如何处理这个问题。请帮忙。

普通文件

首先,有几个地方可以放置普通文件:

  • 2.a) 软件安装路径下一个简单的XML文件
  • 2.b) 配置文件

同样,用户可以卸载软件并删除这些普通文件,然后重新安装软件。

- 软件本身

如果我们把保护试用信息(Expiration Date,我们不能把Number of Used Times)放在软件本身,它仍然容易受到我上面提到的情况的影响。此外,这样做一点也不酷。

- 试用产品 key

它的工作方式类似于许可过程,也就是说,我们将试用信息放入 RSA 签名的字符串中。但是,用户尝试使用该软件需要太多的步骤(他们可能会失去耐心):

  • 4.a) 用户下载软件;
  • 4.b) 用户通过提供用户名(或电子邮件)或硬件信息发送电子邮件以请求试用产品 key ;
  • 4.c) 服务器收到请求,进行RSA签名并发回给用户;
  • 4.d) 用户现在可以在(到期日期和使用次数)的条件下使用它。

现在,服务器已经记录了用户的用户名或硬件信息,因此用户请求二次试用将被拒绝。收集硬件信息是否合法?

总之,用户必须多做一个额外的步骤(申请试用产品 key )才能尝试使用该软件,这并不酷(认为自己是用户)。

注意:此问题与许可无关,而是与存储试用信息的位置有关。试用期满后,用户应索取许可证(CD-Key/Product-Key)。我将使用 RSA 签名(绑定(bind)到用户硬件)

P.S.:我的软件将针对中国市场,中国的软件市场与美国不同。大多数中国人,他们只买硬件,他们通常不买 Micosoft Windows/Office 这样的软件(他们只用盗版)。但是,一些针对特定领域的专业软件,如果没有破解版或者破解版很难安装,研究人员还是愿意购买。

最佳答案

选项 1(普通注册表项)或 2(普通文件)都可以。这是我的推理:

  • 标准特权用户确实具有注册表的读取权限。如果他们无法读取您的 key ,则说明有其他问题。标准特权用户没有注册表的写入权限,但这无关紧要,因为他们首先也没有安装软件的权限。换句话说,要么用户将有权在安装时创建您的注册表项,要么无论如何他们都需要帮助安装。因此,您针对注册表项提出的基本技术问题并不是真正的因素。
  • 只是不要担心那些执行诸如设置系统时钟或手动破解注册表以破坏您的 key 的用户。让我再说一遍:不要担心那些有意识地决定以重大方式改变他们的系统以克服您的试用限制的用户——别搞错了,把系统时钟调慢或编辑注册表是重大修改。您不必担心这些用户的原因是他们代表的潜在收入恰好为 0 美元。愿意就盗版您的软件做出这种有意识的选择的用户不会直接放弃并决定在您的产品不起作用时为其付费。如果他们不能免费获得您的软件,他们要么选择竞争对手,要么不选择。您这样做是为了赚钱 - 您不想花费时间和资源来争取您无法赢得的销售或将用户发送给竞争对手。因此,您针对任一选项提出的基本安全问题都不是一个因素。

关于c# - 出于软件保护目的,将保护试用信息存储在何处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4521468/

有关c# - 出于软件保护目的,将保护试用信息存储在何处的更多相关文章

  1. ruby-on-rails - Rails 常用字符串(用于通知和错误信息等) - 2

    大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje

  2. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  3. ruby-on-rails - Enumerator.new 如何处理已通过的 block ? - 2

    我在理解Enumerator.new方法的工作原理时遇到了一些困难。假设文档中的示例:fib=Enumerator.newdo|y|a=b=1loopdoy[1,1,2,3,5,8,13,21,34,55]循环中断条件在哪里,它如何知道循环应该迭代多少次(因为它没有任何明确的中断条件并且看起来像无限循环)? 最佳答案 Enumerator使用Fibers在内部。您的示例等效于:require'fiber'fiber=Fiber.newdoa=b=1loopdoFiber.yieldaa,b=b,a+bendend10.times.m

  4. c# - 如何在 ruby​​ 中调用 C# dll? - 2

    如何在ruby​​中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL

  5. C# 到 Ruby sha1 base64 编码 - 2

    我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha

  6. ruby - Rack:如何将 URL 存储为变量? - 2

    我正在编写一个简单的静态Rack应用程序。查看下面的config.ru代码:useRack::Static,:urls=>["/elements","/img","/pages","/users","/css","/js"],:root=>"archive"map'/'dorunProc.new{|env|[200,{'Content-Type'=>'text/html','Cache-Control'=>'public,max-age=6400'},File.open('archive/splash.html',File::RDONLY)]}endmap'/pages/search.

  7. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

  8. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  9. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  10. 软件测试基础 - 2

    Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功

随机推荐