保护共享软件的一个思路

 所属目录:Java   |   类型:技术问答   |   时间:2007-05-21
 问题:

看了一篇保护共享软件这方面的文章,自己想了一个使用数字认证(rsa算法)的方法,也许别人已有实现,还请恕本人孤陋。方法如下:  
   
  1.提取用户机器信息(或者加密一下),生成字符串  
  2.注册时,程序向作者发送步骤1生成的信息  
  3.作者用私钥加密步骤2生成的信息,把密文作为注册码发给用户  
  4.程序得到用户输入的注册码后,用公钥解密后,与步骤1生成的字符串比较,以是否相同确定注册是否成功。  
   
  基本思路就是判断注册码是否是由软件作者本人发送来的。  
  大家对这个想法有什么看法,欢迎拍砖。

· 网友精彩回答:

发表者:agchen81

这个思路是比较传统的实现方法之一。也有不通过网络的,直接在软件内部嵌入验证和生成程序。我认为重点还是软件的代码保护,一般的共享软件为了防止破解者的跟踪破解,都会采用加壳,但是比较著名的加壳软件加的壳有很多工具可以成功脱壳,再用反汇编工具和跟踪调试工具很容易破解。我发现一个剧难破解的共享软件,名字是“东日-多媒体日记本”,关键是无法脱壳。

发表者:qrlvls

可能忽略了一个问题,不管你的非对称加密做得如何好,但是有一个前提:  
  你提取的是机器信息,对于共享软件这实际上并不是一个非常有意义的事情,相对以前的普通作法并无大的创新  
  只要有一个合法版本的软件,那么要破解生成其它软件是比较容易的,通过修改提取的机器信息(直接在文件中修改生成数据),那么复杂的算法是毫无意义的,对于加密关键是要做到多个环节互相影响才好,环节的独立性太强是很容易被破解的

发表者:qrlvls

个人认为安全的方法还是采用硬加密狗的方法,而且一部分数据运算需要置入硬件内部完成,实现分布式的思想,但通常硬狗的运算能力有限,不适于大量计算,只做一些重要数据的运算比较合适  
  而由于硬狗与pc的通讯过程也是非常容易监听的(例如采用过滤驱动的方法),因此在发送和接收的数据中适当采用非对称加密是可行的

发表者:hitetoshi

这就是个数字签名的基本原理嘛,我们公司的软件就是这样保护的,用的是个license   file作为签名文件。

发表者:nullname

其实把软件做好才是根本的,真的没必要花太多精力在反破解上

发表者:snowshow

虽然rsa加密很多做出注册机,但是很多软件只要改1个字节,就可以跳过验证  
  这就是传说种的爆破大法

发表者:bobob

其实我也一直思考这个问题,以下是我的见解,有不对的地方大家不要见笑  
   
  不管使用多么复杂的加密算法,最终总有一个判断跳转,所以破的时候从这里入手太容易了  
   
  我觉得,与其想个好的算法,还不如去防破解软件,softice,trw2000,等等,一但发现这些软件或类似的界面,就做出处理.防止了工具,基本上就安全了  
 

发表者:qrlvls

to:   qrlvls(空   气)  
  如果提取系统的安装时间有没有意义?  
  --------------------------  
  这与前面提到的取机器信息并没有区别  
  如同snowshow(snowshow)所说的:虽然rsa加密很多做出注册机,但是很多软件只要改1个字节,就可以跳过验证  
  这就是传说种的爆破大法  
  --------------------------  
  为什么出现这种情况呢?你在判定注册码是否正确后通常的方法就是jz或jnz跳转,而一旦把这个jz或jnz改成了jmp,那么前面大量的加密工作实际上都付之东流了  
  如果你有了一个好的加密方法,你可以想办法增强模块的耦合性来校验加密的结果,但要在代码结构和保护之间有所权衡

发表者:qrlvls

bobob所提到的方法以前有很多软件也在应用,也的确是一个行之有效的方法  
  优秀的动态跟踪调试工具也就是这些,虽然现在不断地出了很多补丁可以欺骗各种检测手法,但是共享保护的目的在于一段时间内保护软件的合法性判断,而不是永久保护

发表者:idants

可以用多线程,多个线程来完成验证,同时验证过程放在部分功能代码之间,以迷惑跟踪者。

.
处理 SSI 文件时出错
© 2006-2008 All Rights Reserved