11.2 生成密钥
不知你是否注意到,KeygenMe-3的成功消息是“Great, You are ranked as Level-3 at Keygening now”(太棒了,你现在已经到你现在已经达到Keygening三级水平了),而不是“Great, you are ranked as level 3 at patching now”(太棒了,你现在已经到达了修补程序的三级水平了)。Crackmes程序也有自己的准则,通常,crackmes的创建者们会限定你应当怎样处理crackme程序。一些crackme程序是用作练习修补的,其他的则用要求你为它生成密钥。指的是是创建一个模拟在保护技术内部的密钥生成算法的程序的过程,这个程序可以为每个人提供的无数个有效密钥(译注:国内通常称这类程序为“注册机”)。
你想到的第一个问题可能是为什么会需要这样的程序呢?盗版者之间难道不能共享同一个简单的程序密钥吗?答案通常是:不能。事实上,为了建立更好的保护机制,保护技术的开发者们通常会避免使用完全依据用户输入进行验证的算法——相反,他们会基于用户输入和计算机相关信息的组合来生成密钥。典型的方法是要求输入完整的用户名,并把它与主硬盘分区卷序列号(primary hard drive partition’s volume serial number)结合生成密钥①。卷序列号是硬盘分区格式化时分配的一个32位随机数。使用这个分区卷序列号意味着此产品密钥只在这个安装了该程序的计算机上有效——用户之间不能共享这个产品密钥。
为了解决这个问题,软件盗版者使用密钥生成程序(kengen programs),密钥生成程序中通常都有受保护程序中所使用的序列号生成算法的精确复本。密钥生成程序接收某种类型的输入如卷序列号和用户名,然后生成一个产品密钥,用户在使用受保护程序时必须输入这个密钥以激活程序。另外一种方法是是使用质询(challenge):当受保护程序接收到卷
序列号和用户名后,会产生一个质询,这个质询实际上就是一长串数字。在把这个数字提供给用户之后要求用户联系软件供应商,向供应商申请根据这个数字生成的合法产品密钥。在这种情况下,密钥生成程序只需钥将置疑转化成产品密钥。
正如KeygenMe-3的名字所暗示的那样,KegenMe-3的意思就是要破解者为它编写密钥生成程序。所以,对它做修补实际上你是在作弊。那我们就动手为KegenMe-3创建一个密钥生成程序吧。






