采用密码学方面的软件会越来越多,对于一个破解者是否有必要因此学习大量的数论知识?
首先我们要明确,加密算法在软件保护中的作用是什么?加密算法在软件保护中的作用,是防写注册机。而对其他pj方式防护能力较差。加密算法,在很多情况下是可知的,网络安全中,可以通过阅读通信协议,来了解算法;而软件中,算法往往嵌入在程序代码中。所以基于算法保密上的安全永远是不可靠的。于是人们通过密钥 来解决这个问题。目前所有流行的算法的安全性,都是基于密钥的保密。而对于软件来说,对称密钥算法,没有什么意义。因为密钥必须嵌入软件中。所以公开密钥(不对称密钥)算法,成为软件加密的理想选择。
对于一个普通的破解者,包括普通的程序员,是没有必要学习大量的数论知识。因为现在现成算法函数接口很多,随便拿来用就可以,不必自己去一行一行的去写代码,只要搞清算法的加密流程就可以了。一个普通的破解者只要跟某段代码时,能够感觉到他大概是什么算法,然后用算法验证软件(我常用cryptool),检查一下,就可以了;而且pj软件的方法很多,比如做补丁,并不是写注册机这一种方法。理论上,软件可以在机器上正常运行所有功能一次,就是可以破解的。
当然,对于想往更高层次发展的Cracker学一些数论知识是必要的,当然我们不太可能发现某的算法的弱点,但至少可以在,某个高人,发现算法的弱点,并公开时,能看懂人家是如何实现的(这需要涉及很多理论性的东西,会涉及数论的),并能写成代码。(zmworm 回答)
学了一丁点的理论,智力平庸,就没往里钻了,我感觉熟悉常用的加密算法就行了。