1625-5 王子昂 总结《2017年5月29日》 【连续第240天总结】
A. 序列号保护方式
B. 软件验证序列号的过程,其实就是验证用户名和序列号之间的数学映射关系。这个映射关系是由软件的设计者制定的,因此各个软件生成序列号的算法是不同的。
根据映射关系的不同,程序检查注册码通常有4种方法:
1.以用户名等信息作为自变量,通过函数F变换之后得到注册码
这种方法是最不安全的,因为验证时需要在客户端进行注册码生成,无论函数F有多么复杂,揭秘则只需把F函数的实现代码从软件中提取出来就可制造注册机。
2.通过注册码验证用户名的正确性
这种要求F是可逆变换,在客户端不进行注册码生成,而是进行用户名验证。这样生成注册码的函数F没有直接出现在客户端中,稍微安全一些。
解决方法:可通过F的逆函数(直接存在于客户端中)来找出F函数;也可给出一个用户名,穷举得到注册码;给出一个序列号,计算得到用户名
3.通过对等函数检查注册码
这种与上一种方法没有明显区别,都是函数F的推广
4.同时采用用户名和序列号作为自变量,即采用二元函数
当二元函数的值为一个特定值时则判断合法。这个算法看上去很不错,但是可能会失去用户名与序列号的一一对应关系。
攻击方法:
一种是通过跟踪输入注册码之后 的判断,从而找到注册码。由于软件需要调用一些标准的API来将编辑框中输入的注册码字符拷贝到自己的缓冲区中,因此对API设断点则可以跟踪。
另一种方法就是跟踪程序启动时对注册码的判断。由于程序每次启动时都需要将注册码读出来加以判断,从而决定是否以注册码的模式工作。
C. 明日计划
CrackMe(5)