我正在为一个半可信客户编写一个简单的应用程序,并且对某些细节没有发言权.必须为客户端提供二进制文件的副本,该副本myTestApp
使用外部库中的专有代码libsecrets
.它是一个Windows应用程序,可以在几台独立的Windows 7笔记本电脑上运行.我被告知,在应用程序达到其目的后,它将被删除.我知道没有完美的解决方案,但是我希望在程序中实现一个到期日期,并阻碍对代码进行潜在逆向工程的努力,或者至少防止内容libsecrets
过于暴露.
因此,我的第一步是静态链接myTestApp
,libsecrets
因此所有内容都包含在一个二进制文件中,因此只有libsecrets
最终二进制文件中包含所需的部分,并且不再发布其接口.
其次,我想实施一些getTime
不天真的机制.Windows中是否有任何"安全" getTime
调用,因此不能通过更改系统托盘或BIOS中的时间来欺骗它?
第三,如果没有"安全" getTime
呼叫,我也可以修改myTestApp
使用NTP查询可信时间服务器,如果无法从中获取时间或试用期已过,则会失败.但是,除非有某种证书机制来验证时间服务器,否则这可能会被网关上的DNS搞乱所愚弄.我对此并不了解,并且需要一些关于如何实现它的建议.
接下来,有没有办法改变二进制文件,以便个人尝试通过查看汇编代码来对其进行逆向工程是不切实际的?也许是某种加密二进制文件并需要第三方认证工具的包装器?或者也许我创建的某种证书需要运行它并在以后过期?
最后,是否有任何软件(即:打包或发布软件)可以通过重新打包最终.exe
或作为某种类型的Microsoft Visual Studio插件为我做到这一点?
谢谢大家.
编辑:这不是一个防弹系统,如果失败,那是可以接受的.我只是想让一个非技术人员试图破解它不方便.使用它的人是技术Luddites,软件破解的唯一方法是他们雇用某人来做.由于名称和公司名称被加水印到应用程序中,并且只有一个人可以从其使用中受益,因此他们不太可能重新分发它.