一些程序和软件可能会有时间或功能上的限制,需要注册方能继续使用,注册过程一般是通过输入的用户信息通过一系列计算得出一个序列号,当注册信息验证通过后就会取消各种限制,从而成为完全正式版本。
每次启动时,程序或软件会从磁盘文件或者系统注册表中读取注册信息并进行检查,如果注册信息正确,则以正式版的模式运行,否则将作为有功能限制的版本来运行。
程序验证序列号其实就是验证用户名和序列号之间的数学映射关系,因为这个映射关系是由程序的设计者指定的,所以各个程序生成序列号的算法是不同的。显然,映射关系越复杂,序列号就越不容易被破解。
根据映射关系不同,程序检查序列号有如下四种方法:
-
按用户输入的用户名来生成注册码,再同用户输入的注册码比较。
映射关系:序列号=F(用户名)
将正确的注册码和输入的注册码进行比较。我们就可以通过分析程序验证注册码的过程,很容易获得注册码。这种方法在检查注册码正确性的同时,也再现了生成注册码的过程,就可以编制一个通用的注册码程序即注册机。
由此可见,这种生成检查注册码的方法是非常不安全的,我们也可以通过修改指令的方法来爆破通过注册码的检查。
-
通过序列号验证用户名的正确性
生成注册码仍是 序列号=F(用户名) 这种变换,但程序在检查注册码正确与否的时候,是利用F的逆变换即对用户输入的注册码进行变换的。如果变换的结果和用户名相同,则说明是正确的注册码。即用户名=F -1(序列号)
解决方法: 通过F -1 找出其逆变换,从而得