1.注册的加密算法越复杂好,这样就不会很容易地被写出注册机。​   
  2.即使加密算法很复杂,但对于破解高手来说,爆破也很容易。要防止被爆破,就要在程序运行的过程中,经常检测主程序的精确大小,或主程序中某个位置是否是固定字符,如果不对就退出程序。当然主程序要用aspack等软件压缩,检测的也是压缩后的程序大小。  
  3.不要用明文比较的方法比较注册码!否则,即使做好1、2两点,也是白搭!我的方法是,对注册码进行加密变换,越复杂越好,最后对加密后的注册码进行比较,相同则是合法用户。   
  4.注册码不要一次就比较完,最好在程序中分多次比较。我的做法是:我的注册码是12位,在开始时先比较前8位注册码,相同则暂时承认是合法用户。另4位则在程序的关键功能处进行比较,而且不要马上就比较,我是在程序试用期45天结束后再进行比较,不对则重启电脑。这一招比较有效,我的软件在发布后,不断有注册机出来,但用注册机后也只能使用45天,过后就有问题。当然,世上没有不被破解的软件,我的新版本软件在发布半年多后(不错了吧?),就在前几天终于被一高手完全破解了!   
 


1、先对程序进行完整性校验,采用MD5算法较好,确保执行程序不会被修改,将MD5结果作为第一部分。  
  2、收集本机信息(网卡、硬盘、CPU信息、当前日期,注册用户等信息),采用3DES算法加密,将加密结果作为第二部分进行保存。   
  3、将两部分结果进行合并,通过网络或者其他途径传送给服务器,服务器先判断程序的完整性,如果完整,则解密客户机信息,通过RSA算法使用私钥进行加密,将秘文发还给客户。   
  4、客户使用收到的秘文以及程序中包含的RSA算法的公钥进行解密并进行本机校验,如果信息正确则可以继续运行,否则失败。   
    
 

我是把注册算法,实际代码,无用的代码写在一起(不是调用函数),然后注册失败也不提示,有上百个验证点,也是直接写在实际代码中,算法到没有什么就是特别长,等他把代码看懂,至少要死掉一半脑细胞。


总结   +   补充  
  1)   用那些经过全世界最优秀的密码分析学家们分析过也不能解密的算法   
  2)   加上CRC校验,一旦发现被修改,不要马上提示最好几天甚至几星期后再不工作   
  3)   无论注册失败或成功都不提示   
  4)   实际代码,无用的代码写在一起,   分多步验证   
  5)   Write   email   to   the   webmaster   of   the   crack   site   
  6)   升级后改变算法[?!]   
    
  补充一点,我想到的一个简单易行的办法,可以加大破解难度   
  7)   注册码的判断分两个函数,两个标志,在注册码的输入窗体中,只判断注册码的前一部分,使用Func1()判断,注册用户输入正确注册码时并不会感到异常,而破解者通常会在此窗口中追踪代码,就算破解了,在此出破解通过的只是一部分算法而已,但要让他自以为成功了,通过后标志1为真,About窗口显示成功注册了。然后在程序的另一部分使用完整的判断函数Func2()判断.这里不给出任何提示,如果对了才把标志2设为真,也就是说用假的注册码可以注册成功,但运行到关键的地方就出问题了,程序重新启动时再用Func1()判断,Cracker查看ABOUT,显示成功注册给xxx,但关键的地方就是不能用,嘿嘿,够黑吧。 

注册码输入框的最大输入长度设为8位(但注册码长度其实是从10位至40位不固定,视用户机器码而定)  
    
  注册码在输入时,每输入一次,判断已输入的前N字符,是不是前N位都是正确的注册码值的前N位,如果不是,则将注册码输入框的最大长度锁死在八位。   
  如果是粘贴上的注册码,采用剪切版内容查看等方法进行判断。   
    
  注意最好不要逐字比较,要全文比较,否则好跟踪。   
    
  然后有人会以为注册码是8位。   
  如果判断输入8位后,调用另外一个很复杂但没用的算法(算法A),生成一个8位的注册码(注册码A)。   
    
  ​如果有人添入“注册码A”试图注册,这个人肯定是破解者,而且破解成功了你的“算法A”,此时,该怎么做你知道了吧。

如何防止软件被破解_注册码