use*_*222 3 c++ encryption licensing crypto++
我想基于这篇文章实现一个简单的许可系统.
一切正常.但现在我想添加一个到期日,我不知道如何.
有人可以解释我如何添加到期日期?确切地知道如何实现并不重要,但我需要了解它背后的算法:)
最有用的方法是让服务器检查密钥是否仍然有效.这使得很难伪造.
但是,如果您不希望(由于某种原因)使用"在线"技术,那么您需要将过期日期存储在客户端使用的数据中的某个位置.它可以加密,但您的软件必须包含解密密钥.因为在某些时候,您的申请必须将当前日期与到期日期进行比较.
正如其他人所说的那样,很容易花费很多精力让这很难打破,但迟早,它归结为一些简单的比较"它是否在约会?",并且该代码总是可以"通过替换第if (!in_date) exit_with_message("License expired...");i个来破坏if (false) ....所以,除非你在100多个不同的地方做那种事情,并且使代码在每个地方看起来都非常不同[不要调用相同的函数,不要使用相同的消息,不要使用相同的计算,不要使用相同的结果等等]
我想使用我们在家用机器上工作时使用的编译器[在家里做一些与工作相关的项目!].它内置了一个"演示许可证",所以你可以尝试一下,但它在10000行源代码后停止了.所以我在二进制文件中查找了所有出现的10000.我认为有三个地方包含10000个.我改变了一个,尝试编译超过10000行的测试样本,它仍然失败了 - 改回来改变了下一个:wohoo,它有效......现在,编码器可能会让它变得更难,但如果我感兴趣的话,我相信我也能解决这个问题.这比获得第二个许可证,在家用机器上安装许可证服务器等等要容易得多.
还要记住,大多数打破这种事情的人不是为了金钱,而是为了挑战.如果这很难的话,这只是一个更大的动力!
编辑:
我会做这样的事情:
1)创建license.dat,其中包含:
2)加载软件[或在软件中定期]时,加载license.dat.
3)验证许可文件的哈希值.
4)检查当前日期是否大于失效日期.
5)如果检查完毕,继续,否则退出一些相关消息.
你究竟如何存储/加密日期是我无法真正建议的.一个选项是64位整数,它基于time_t(以秒为单位)的时间被适当地"加扰" .加密可能更多的是"不要让它显得太明显,它是一个时间戳" - 但哈希真的是保护你的时间戳.