防止EXE被复制到另一台电脑-在EXE文件中保留一些信息(例如一些标志)

本文关键字:EXE 保留 文件 标志 信息 一台 复制 电脑 防止 | 更新日期: 2023-09-27 18:29:02

我想防止可执行文件被复制到另一台电脑上,因此我需要以某种方式在我的EXE文件中保存信息,说明它已经在另一台PC上的其他地方使用过。

我可以把用户的硬盘号之类的小信息嵌入到我的EXE文件中吗?这样,当这个EXE复制到另一台电脑时,这些信息就可以使用了?

我想也许有一种方法可以读写嵌入EXE文件中的资源文件,但我认为资源文件是只读的,如果是这样,EXE文件中是否有一个地方可以保存我需要的信息?

防止EXE被复制到另一台电脑-在EXE文件中保留一些信息(例如一些标志)

你用这种方式正在进行一场艰苦的战斗。创建一个本土许可证计划是可能的,但要做好做大量工作的准备(我做到了,所以我是根据第一手经验说话的)。只是一些问题需要解决:

  • 如果硬盘出现故障,需要更换,您的用户将无法使用该程序。每次发生这种情况,你都会接到愤怒用户的支持电话
  • 如果用户在虚拟机内运行您的程序,硬盘驱动器序列号将不是唯一的——任何人都可以克隆虚拟机,现在您的程序可以在另一台机器上运行
  • 硬盘驱动器的序列号可以更改-它们不是直接来自硬件
  • 如果硬盘驱动器是可移动驱动器怎么办?您的用户可以从可移动驱动器运行您的程序,然后继续将其移动到不同的计算机
  • 即使你完成了,你如何保护许可证信息不被修改

如果你真的想许可你的产品,看看现有的许可产品——它们并不便宜,但它们已经做了(相当多的)工作,这是获得任何可靠性所必需的。

即使你只想获得最低限度的保护,也要考虑这一点:你必须做大量的工作,才能获得你的秘密代币(无论是什么)的最低安全性。如果它的安全性很低,那么你做这些工作有什么意义?如果你所做的只是强迫人们输入一个毫无意义的序列号,你只会惹恼你诚实的客户。如果有人想偷一些没有得到很好保护的东西,他们会偷的。"简单"的保护方案只会惹恼你的用户,并给你一种虚假的保护感。

我最终使用了Reprise RLM——我与这家公司没有关联,但我与他们的销售和支持人员有着良好的经验,他们的产品在测试场景中运行良好。

好的,我分析了所有提出的变体,并决定在我的情况下,开发我自己的副本保护系统会更好,因为我是一名独立开发人员,不会处理超大应用程序。

以防万一,有人面临同样的问题——这是算法(好吧,其中之一):

  1. 用户启动APP1.EXE
  2. APP1.EXE将自身读取到某个变量,并在其末尾添加HDD序列号,例如HDD序列号-当您在末尾添加某些内容时,它不会破坏EXE文件,并且您不必担心PE头
  3. 不幸的是,EXE无法在运行时保存自己,所以它保存了名为APP2.EXE的副本,其中包含有关HDD的信息
  4. 保存APP2.EXE时,APP1.EXE通过process.Start()将其作为一个单独的进程启动,并自行终止
  5. 现在APP2.EXE正在运行,并且具有与APP1.EXE相同的内容+HDD序列号,所以我们只需将APP2.EXE中的所有字节写回APP1.EXE,关闭当前进程并再次启动APP1.EXE
  6. 从现在起,APP1.EXE正在运行,并拥有有关当前HDD的所有所需信息,因此每次用户启动APP1.EXE时,它都会将内容末尾的HDD编号与用户电脑上的实际编号进行比较,如果它们不同,则终止进程
  7. 删除APP2.EXE,这样用户就不会意识到这些文件是如何交换有关他的硬盘的信息的

关于自删除EXE的有用信息可以在这里找到:

  • http://www.catch22.net/tuts/self-deleting-executables
  • http://buffernow.com/selfdelete-executable-in-c/

第页。S.我知道这就像一个巨大的安全漏洞(我不会提及所有这些),但这个算法的实现只需要C#中的20行代码,并被转移到一个单独的DLL中,我可以在任何地方使用它,它可以工作。上面的算法中没有任何注册,用户可以简单地使用这个应用程序,我相信大约80%的用户不会意识到这个应用程序是如何防止复制的。

实施链接:https://bitbucket.org/artemiusgreat/examples/src/ef7b60142277?at=master