禁用过期后的应用程序进行试用

Disable application after expiry date for trial

本文关键字:应用程序 过期      更新时间:2023-10-16

我正在为一个半可信客户端编写一个简单的应用程序,对某些细节没有发言权。必须向客户端提供二进制myTestApp的副本,该副本使用外部库libsecrets中的专有代码。这是一个Windows应用程序,将在几个独立的Windows7笔记本电脑上运行。我被告知,在申请达到目的后,它将被删除。我知道没有完美的解决方案,但我想在程序中实现一个有效期,并阻止对代码进行潜在的逆向工程,或者至少防止libsecrets的内容太容易暴露。

因此,我的第一步是将myTestApplibsecrets静态链接,这样所有内容都包含在一个二进制文件中,所以最终的二进制文件中只包含所需的libsecrets,并且不再发布其接口。

其次,我想实现某种getTime机制,这种机制并不天真。Windows中是否有任何东西可以进行"安全"getTime调用,从而不会被更改系统托盘或BIOS中的时间所欺骗?

第三,如果没有"安全"的getTime调用,我也可以将myTestApp修改为使用NTP查询受信任的时间服务器,如果无法从中获取时间或试用期已过,则会失败。但这可能会被扰乱网关上的DNS所欺骗,除非有某种证书机制来验证时间服务器。虽然我对此了解不多,但我需要一些关于如何实现它的建议

接下来,是否有某种方法可以更改二进制文件,使个人无法通过查看汇编代码来尝试对其进行反向工程?也许是某种对二进制文件进行加密并需要第三方身份验证工具的包装器?或者我创建的某种证书是运行它所必需的,稍后过期?

最后,有没有任何软件(即打包或发布软件)可以为我做到这一点,无论是通过重新打包最终的.exe,还是作为Microsoft Visual Studio的某种插件?

提前谢谢大家。


编辑:这不是一个防弹系统,如果它失败了,那是可以接受的。我只是想让一个非技术人员尝试破解它变得不方便。使用该软件的人都是技术上的卢德分子,破解该软件的唯一方法是雇佣人员。由于名称和公司名称都被添加到应用程序中,而且只有一个人可以从使用中受益,因此他们不太可能重新分发该软件。

你不能让事情变得完全安全,但你可以让它变得困难(er)。

使用UPX打包会给黑客增加一定程度的复杂性。

您可以在运行时检查您是在多个地方的调试器下运行,还是在虚拟机下运行。

您可以对正在使用的DLL进行加密并手动加载(复杂)。

您可以编写一个加载程序来检查应用程序的哈希,您的应用程序也可以检查加载程序的哈希。

您可以获得系统时间,并将其与已经写入磁盘的系统时间进行比较,发现它是单调的。这一切都取决于您想要的保护级别。

如果你去海盗湾或任何其他torrent网站,如果黑客感兴趣,你会看到所有东西都被黑客入侵了。

有一种方法可以让他们在过期后很难使用它。这个技巧的主要主题是使您的截止日期与系统时间无关,并使其取决于经过的小时数,而不管系统时间是什么

您必须创建一个单独的线程来执行此任务。

假设您希望应用程序在他们使用70小时后过期。

创建一个名为"record"的二进制文件,并在其中存储任何数字,这应该很难猜测(我稍后会告诉你为什么必须将这个数字放在二进制文件中)。

当您的应用程序启动时,它会检查该数字是否存在。如果存在,则应用程序应获取当前时间,并将其与hour=1一起存储在该文件中(替换已存在的数字),您创建的线程应继续检查系统时间中的hour是否已更改,当它更改时,将当前时间与hour=2一起存储在文件中。当小时=70时,时间就会到来。

在该线程内的两个位置和应用程序的开头添加此代码

/*the purpose of storing current time is to find out later if hour has changed or not*/
/*read hour from file.*/
if(hour==70)
{
cout<<"Your trial period has expired"<<endl;
return EXIT_SUCESS;  
}  

现在每当小时=70时,应用程序将不起作用。

早些时候我告诉你在二进制文件中保留任何数字,当他们运行你的应用程序时,二进制文件将被读取,如果在那里找到了这个数字,你的应用软件将用当前时间和小时=1替换它,现在假设他们使用你的应用程序5个小时,然后关闭它并在一段时间后运行它,现在,当您的应用程序将运行时,它将检查二进制文件,如果该数字已被以前存储的时间和hour=5替换,这意味着现在您必须将当前时间和houl=stored hour一起存储在文件+1;中。在这种情况下,即使他们改变时间或做任何其他事情,也不会影响你的有效期。因为现在你的过期检查不再基于系统时间,而是基于过去的小时数,而不管时间是什么。

该数字的缺失表示文件不是第一次访问,文件中当前的小时数应该增加,并使用二进制文件,这样客户端就看不到该数字。

最后一件事你的二进制文件的格式应该像这个

current time, hour="any number", another_secret_number

将放置另一个secret_number,这样即使他们改变了你的二进制文件,他们也无法将另一个_secret_number放在那里,因为他们不知道。这意味着在读取二进制文件时,你必须确保二进制文件中任何条目的末尾都包含"another_secret_number"。

出于检查目的,这两个隐藏的数字也会在你的代码中进行硬编码,他们肯定看不到,也看不到二进制,所以他们不可能知道它们。

我希望它能帮助你。

没有什么能阻止黑客!!!你的问题就像一根针在干草上搜寻。集会是回应的大空间。你可以什么都不做,永远不要阻止"坏人"。

  • 对于UPX:众所周知,不要使用它