Windows服务:编写软件安全功能的代码

时间:2009-07-15 06:15:07

标签: c# c++ windows-services

我想实现一个Windows服务,它作为软件X的简单许可证安全功能。该服务旨在独立于软件X运行。

粗略的想法:

  • 该服务就像安装在机器上的软件Z的定时炸弹......
  • 每当用户运行软件X时,服务每30分钟弹出一个窗口,提醒用户注册软件X.
  • 如果用户在1个月后没有注册软件,该服务将更改文件中的许可证代码并终止软件X进程。
  • 在下次启动时,软件X将读取错误的许可证代码并以演示模式启动。
  • 服务在更改许可证代码之前先备份许可证代码。
  • 当用户注册时,将提供exe或bat文件供用户运行。该文件将恢复原始许可证文件并永久删除该服务。

其他信息:

  • 如果用户试图终止该服务,该服务是否可能会自动更改许可证代码并在被杀之前终止软件X?
  • 如果用户在服务更改后手动更改了文件中的许可证代码,则服务会自动将其更改回来并终止软件X.

我是编程中的新手...所以我想在进入项目之前先征求意见......根据你的经验我应该注意哪些建议,提示或问题/关注点?

我很可能在C ++中编写代码,但在阅读以下讨论之后可能会在C#(以前从未使用过)中编写代码: Easiest language for creating a Windows service

4 个答案:

答案 0 :(得分:3)

  

我是编程中的新手......   所以我想先征求意见   跳进项目...任何   建议,提示或问题/关注我   应该知道基于你的   经验?

我能给你的最好建议是“编程的新手不应该尝试编写安全系统”。开发一个真正减轻真实攻击真正漏洞的安全系统是非常困难的,需要多年的实际经验以及操作系统和框架类库如何工作的实践和理论知识。

我能给你的第二个最好的建议是构建一个详细,准确和完整的威胁模型。 (如果你不知道如何进行线程建模那么这将是第一件要学习的事情。在你爬行之前不要尝试轮滑。)只有拥有一个详细,准确和完整的威胁模型,你才能知道你的建议吗?安全功能实际上可以缓解对您的漏洞的攻击。<​​/ p>

答案 1 :(得分:1)

  
      
  • 每当用户运行软件X时,服务每30分钟弹出一个窗口,提醒用户注册软件X.
  •   

这是不可能的。由于服务在另一个桌面上而不是用户,因此服务无法显示窗口。 (由于Vista是强制性的,XP确实允许显示窗口。)

  
      
  • 如果用户试图终止该服务,该服务是否可能会自动更改许可证代码并在被杀之前终止软件X?
  •   

没有。服务只是系统中运行的另一个程序,可以在任何时间点被杀死。 (只有你必须在管理员组中。)

  
      
  • 如果用户在服务更改后手动更改了文件中的许可证代码,则服务会自动将其更改回来并终止软件X.
  •   

结论是,当您将许可证分成两部分时,您会得到另一个用户可以中断支票的点。如果您的程序不是必须使用,则无法阻止用户解决您的服务。

答案 2 :(得分:0)

  

如果用户试图终止该服务,该服务是否可能会自动更改许可证代码并在被杀之前终止软件X?

不一般,没有。如果我无条件地关闭该过程(例如使用taskkill /f命令),它将没有任何反应机会。

  

如果用户在服务更改后手动更改了许可证代码,则服务会自动将其更改回来并终止软件X.

可能 - 您可以使用ReadDirectoryChangesW函数来监视文件并对更改做出反应(如果您的服务是在.NET中实现的,则为FileSystemWatcher类)。当然,根据上面的第一个答案,用户可以杀死你的服务,然后改变文件......

答案 3 :(得分:0)

从不为某事做服务,除非它真的是系统服务。如果您正在创建应用程序,那么当应用程序关闭时,您在系统上运行代码 NO BUSINESS EVER ,除非用户明确请求该操作。像这样的想法是我们(书呆子)必须处理这么多垃圾的原因,当人们要求我们“修理我的电脑时,它的运行速度很慢。”

在我成为这样的憎恶的一部分之前,我会从6位数的薪水中走出来。

编辑:我想首先我需要一个6位数的工资......有一天某天