我看到为此实现的一种策略是从网站 (google.com) 请求页面并读取响应中的时间 header 以确定真实时间,而不是使用窗口时间(可以通过用户)。
据我所知,避免这种情况的唯一方法是用户创建一个本地网络服务器,然后将网站 google.com(使用主机文件)指向本地主机。
如果用户愿意牺牲互联网主页,我不介意他非法使用我的软件,因为我相信只要他的主机文件将 google.com 重定向到本地主机,他就无法打开 google.com伪造时间戳。
我的问题是:有没有什么方法可以让用户仍然能够非法打开 google.com 并运行我的软件? (明显使用多台机器除外)
无需使用代理或直接通过其 IP 地址连接到 Google。逆向工程师(或本例中的破解者)不会理会那些“黑客”(如规避保护的狡猾方式),但会分解您的应用程序(如规避保护的正确方式),找到“保护”的位置“你的代码 - 并修补那部分。假设您创建了一个方法,如果它验证时间未更改则返回 true,否则返回 false。逆向者需要做的就是使该方法始终返回真值,无论天气如何他甚至连接到互联网(另一个原因为什么需要互联网连接的保护方案不是一个好主意......他们需要互联网连接^^ ).或者他可以对您的 key 比较算法进行逆向工程 - 并创建一个 key 生成器。
Dongles 已被破解(检查在线资源会非常相似),Steam 在发布后不久就被破解(Halflife 需要在线注册才能运行……一小会儿……)。即使是完整的在线游戏也已被“破解”——对于大多数 MMO,您确实会找到从头开始编程的私有(private)服务器。因此,即使在您的服务器上运行应用程序的所有业务逻辑也无法保护它免遭破解。
我自己过去对复制保护进行过逆向工程(除其他外,我不是破解者,而是为了学习如何保护我的代码)而且你经常可以看到程序员花了多少时间来编写这些代码片段,只能通过更改简单的 jmp 指令来击败。
恕我直言,程序员不应该在保护他/她的应用程序上浪费太多时间。在大多数情况下,只要普通用户无法破解它,保护就可以了。花在保护上的时间越多,就意味着浪费的时间越多,因为总会有人能够破解它。
所以我的建议是:建立一个可靠而简单的保护,这样普通的计算机用户就无法破解它。然后继续前进。