领导要求我给公司的软件产品开发一个防复制 /盗版的功能,就是说,防止用户私自将软件拷贝到另一台电脑上运行。为此需要将软件的注册号和硬件信息绑定(硬盘序列号,mac 地址), 最好是能和 cpu id 绑定,但是好像 cpu id 在 i3 以后就不能用了。开发语言限定为 C 语言。
我们的软件目前是和硬件一起捆绑卖的,即卖出的电脑上安装了我们的系统,所以卖出电脑的硬件信息是知道的。
现在有两个选择:
使用开源库 (这个是最好的方案,但是我不知道有什么这样的开源库?)
自己动手写一个。
自己写一个的话,我的方案是这样的:
在卖出产品时,根据用户的信息、硬件信息计算出一个 sha256 值 H,同时用 RSA 生成一对密钥 (Priv_Key, Pub_Key),将 H 用私钥 Priv_Key 加密以后得到 E,然后把 (E, Pub_Key) 这两个存储到软件中。
在软件运行时,动态地读取硬件信息、用户名,计算 sha256 哈希值 H',并利用 Pub_Key 解密 E 得到原始 H,并比较 H 和 H',不匹配的话则说明用户更换了硬件。
为什么不能直接存储 H 呢?这是因为 SHA256 算法是公开的,用户可以自己用初始信息算出 H 来,自己进行注册。但是加上 RSA 加密这一步以后,因为用户无法通过公钥算出私钥,所以他无法自己算出 E,所以无法自己注册。
我知道破解的时候可以用跳转的方式跳过判定相等这一步,这种情况先不考虑,毕竟我们这个防破解只打算防一般的用户,不防高手。请大家看一看,这个方案可行不?有没有明显的漏洞?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.