使用WebRequest检查license是否有效

本文关键字:是否 有效 license 检查 WebRequest 使用 | 更新日期: 2023-09-27 18:17:36

我不是软件工程师,如果你继续读下去,你就会发现,但是我设法编写了一个非常有价值的应用程序,为我们公司节省了很多钱。我写软件没有报酬,我写这个应用程序也没有报酬,我的工作头衔也不是软件工程师,所以我想完全控制谁使用这个应用程序,如果我不得不离开,因为据我所知,这不是他们的合法的(也没有在上班时间写)。

这可能听起来很幼稚,但我在这上面花了很多时间,我几乎每天都在维护它,所以我觉得我应该对它有一些控制权,或者至少如果他们不得不让我离开,或者我想要离开,我可以把它卖给我的公司。

我在这个应用程序上的当前保护方案看起来像这样:

string version;
WebRequest request = WebRequest.Create("http://MyWebSiteURL/Licence text file that either says 'expired' or "not expired'");
WebResponse response = request.GetResponse();
StreamReader stream = new StreamReader(response.GetResponseStream());
version = stream.ReadToEnd();
stream.Close();
response.Close();
if (version == ("not expired") == false)
{
    MessageBox.Show(Environment.NewLine + "application expired etc etc", "Version Control");
}

它检查我的服务器是否"未过期"(纯文本),如果webrequest返回的结果不是"未过期",它最终会弹出另一个表单,说明它已过期,并允许你输入日期的密码,该密码是一些预定数字乘以当前日期,以创建"日通行证",如果需要的话(我想艾伦·图灵只是在坟墓里翻滚)。

不是最好的安全方案,但我认为这是相当聪明的没有经验的软件安全。然而,我听说十六进制编辑可以绕过安全问题,所以我做了一些科学测试,发现了我编译的EXE的这个区域:

" System.Net.WebRequest。"我用0来填充,看起来像这样:系统。Net000000000

这就是在服务器检查期间抵消应用程序加载打嗝所需要的一切,这允许我点击"继续"并完全绕过我所有的"安全",继续使用程序而不会过期。

现在一个正常人会走到这个长度(十六进制编辑)试图通过我的保护方案吗?不太可能,但只是作为一个学习经验,我能做什么作为一个额外的步骤,使十六进制编辑或任何其他常见的解决方案不工作,除非它是由"专业"破解?

我不是偏执狂,我只是渴望更多地了解应用程序的安全性。我既为自己感到骄傲,同时又为自己建立和破坏了自己的保护而感到羞愧。

如果评论,请友好,因为我知道这篇文章可能是给那些比我更了解情况的人的,因为我在编写软件方面真的没有什么经验,也从来没有参加过任何类型的课程等。感谢阅读!

使用WebRequest检查license是否有效

另一种绕过许可证检查的方法是将检查url重定向到localhost,始终返回所需的文本…
一个更好的方法是调用一个函数做同样的事情,但是让你的服务器响应是一个签名的XML,包括服务器响应时间戳,你可以用系统日期时间检查(两边都使用UTC日期)。当事情不像你期望的那样时抛出异常也是一个好主意,并通过异常处理控制程序的流程。
查看以下内容以获得如何使用的提示:
如何:使用数字签名对XML文档进行签名
如何:验证XML文档的数字签名

现在一个正常人会去这个长度(十六进制编辑)试图躲过我的保护计划?

嗯,我猜,这取决于应用程序对"正常人"有多有用,以及他如何决定让它工作。

大多数。net应用程序,除非混淆,可以很容易地反编译到源代码使用工具,如(Telerik JustDecompile),或者他们可以简单地使用ildasm来查看IL代码,我听说有工具,甚至反编译混淆。net库,虽然我没有使用或发现任何。

以我的一点经验,我可以建议两种方法

  1. 实施许可和破解它在一个显然在用户机器上运行的应用程序是一个猫捉老鼠的游戏,你可以添加一些额外的保护代码通过移动应用程序的某些部分功能服务器并将其公开为web服务客户端可以消费,你移动到服务器的部分必须是应用程序的一个重要组成部分,应该很难模拟的东西。
  2. 另一种方法是在你的应用程序中添加一个自动更新功能,它将检查服务器的最新更新,当它发现一个新版本时,它将覆盖旧的版本,从而覆盖任何破解的版本,这可以很容易地被禁用,但如果禁用,这也将停止任何错误修复你可能发布

这两种方法我都试过了,但它们只是在某种程度上有用,你必须决定是否值得努力执行