If statement 许可证验证-如何检查服务器响应安全性

If statement 许可证验证-如何检查服务器响应安全性,if-statement,reverse-engineering,reverse,license-key,If Statement,Reverse Engineering,Reverse,License Key,我正在创建一个许可证生成器和基于PC ID的验证程序,以创建基于许可证的PC硬件 它将pc id(如mac地址、uuid、bios序列号等)发送到创建许可证的服务器,并将其发送回客户端 当客户端想要激活程序时,他会将许可证发送到服务器,并得到一个答案——基本上是真的还是假的 由AES密钥加密并由服务器签名的所有数据 问题出在这里–我可以确保反向器没有更改代码检查服务器的响应吗?始终存在可以更改的“如果条件”(或组件中的cmp) 我尽可能多地处理混淆、打包、反调试等问题,但是一个好的反向器可以改变

我正在创建一个许可证生成器和基于PC ID的验证程序,以创建基于许可证的PC硬件

它将pc id(如mac地址、uuid、bios序列号等)发送到创建许可证的服务器,并将其发送回客户端

当客户端想要激活程序时,他会将许可证发送到服务器,并得到一个答案——基本上是真的还是假的

由AES密钥加密并由服务器签名的所有数据

问题出在这里–我可以确保反向器没有更改代码检查服务器的响应吗?始终存在可以更改的“如果条件”(或组件中的cmp)

我尽可能多地处理混淆、打包、反调试等问题,但是一个好的反向器可以改变并通过它

多谢各位


阿维诺姆很简单:那是不可能的。正如你所说,总会有一些“如果条件”

我将只列出一些我记得的方法,应用程序使用这些方法使破解变得更加困难:

  • 代码上的校验和。如果破解者将更改某些代码,她还需要找到适当的校验和(这可能会进一步混淆)
  • 在整个代码中运行多个检查,可能在特定/随机时间在多个线程/任务中运行(例如,每1分钟通过不同的代码路径验证一次CDKEY)
  • 使用CDKEY对一些代码进行加密(因此,如果您没有CDKEY,那么您根本就没有应用程序的代码)
  • 在服务器上存储适当的代码。当用户尝试访问“新”功能(例如游戏的下一阶段)时,应用程序将与服务器握手,如果服务器确信它不是破解程序,服务器将向应用程序发送相关代码,然后应用程序将运行它
  • 有一个物理上模糊的远程类似SIM卡的设备(就像SIM卡),它将为计算机提供物理API,服务器将查询该设备以检查其真实性。看看SIM卡吧