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

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

其次,我想实现某种不是幼稚的getTime机制。 Windows中有什么可以进行“安全的” getTime调用的,因此不能通过更改系统托盘或BIOS中的时间来欺骗它?

第三,如果没有“安全的” getTime调用,我还可以修改myTestApp以使用NTP查询受信任的时间服务器,如果无法从中获取时间或试用期已过,则失败。但这可能会被网关上的DNS弄乱,除非有某种形式的证书机制来验证时间服务器。我对此不太了解,并且需要一些有关如何实现它的建议。

接下来,是否有某种方法可以更改二进制文件,以使个人无法通过查看汇编代码来对其进行逆向工程,这是不切实际的?也许某种包装程序可以加密二进制文件并需要第三方身份验证工具?或者,也许是我创建的某种证书,它需要运行该证书并在以后到期?

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

谢谢大家。

编辑:这并不意味着是防弹系统,并且如果它失败了,那是可以接受的。我只是想让非技术人员尝试破解感到不便。使用它的人是技术熟练的Luddites,要破解该软件的唯一方法是,他们雇用了某人来做。由于名称和公司名称都在应用程序中加了水印,并且只有一个人可以从应用程序中受益,因此他们不太可能重新分发它。

最佳答案

您不能使事情变得完全安全,但可以使事情变得更艰难。

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

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

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

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

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

如果您访问PirateBay或任何其他洪流站点,您将看到,如果黑客感兴趣的话,一切都会被黑客入侵。

10-08 04:08