struct user_F
/* This is Users V data struct , contains password settings & state etc */
struct user_V
其中最重要的密码信息是在user_V中的,分别是:
int ntpw_ofs; /* 0xa8 */
int ntpw_len; /* 0xac */
ntpw_ofs放置的是加密密码的偏移地址,ntpw_len放置的是加密密码长度。我们就是要通过修改这两个变量的值来到达我们的目的。但是我们要知道这些信息是经过加密的。这又是个难点,让我们首先看看一个明文密码被加密过程:
首先输入明文密码
然后转换明文密码为UNICODE格式
再根据上一步得到的UNICODE string 制作出一个MD4 hash
最后根据DES这个数据加密标准加密MD4 hash,并且用userid(SID)的低位部分(RID)作为该数据的key值,然后把该数据放入V struct中。
我们要生成一个新密码就必须严格按照这个步骤来进行,程式里是通过这幺几个函数完成的:
/*转换明文密码为UNICODE格式*/
cheap_ascii2uni(newp,newunipw,pl);
/*根据上一步的UNICODE string 制作出一个MD4 hash*/
MD4Init (&context)
MD4Update (&context, newunipw, pl<<1);
MD4Final (digest, &context);
/*根据DES这个数据加密标准加密MD4 hash, */
des_ecb_encrypt((des_cblock *)digest,(des_cblock *)despw, ks1,
DES_ENCRYPT);
des_ecb_encrypt((des_cblock *)(digest
,(des_cblock *)&despw[8], ks2, DES_ENCRYPT);
但是遗憾的是,该程式的加密算法同Microsoft的算法似乎有些不同,举例来说:我用这个软件生成了Administrator用户的一个新的密码123456,程式加密后的最终数据是:abcdefgh,并且将这个数据存入SAM文档中。但是当我在登陆窗口上输入用户名Administrator,密码123456时, Microsoft用他的加密算法得到的最终数据为abcdabcd,显然和SAM中对应数据abcdefgh是不一致的,所以导致最终登陆失败。问题就出在程式的加密算法和Microsoft的加密算法是不同的。
但是不要紧,我们还记得有两个重要变量:
int ntpw_ofs; /* 0xa8 */
int ntpw_len; /* 0xac */
既然我们修改ntpw_ofs内容的尝试失败了,我们能够把修改ntpw_len作为解决问题的切入口,这里就很很简单了。我们只要通过给ntpw_len赋值为0来欺骗SAM,告诉他密码的长度为0,即密码为空,那幺就不再存在密码加密的问题了,直接回车即可。程式里是这样完成的:
V->ntpw_len=0;
小结
现在更改登陆密码的软件有很多,不免让人眼花缭乱,而今天介绍的这款软件不敢说是最好的,但也说的上是其中的侥侥者,除了使用上很方便有效外,更有一点:他是完全免费的。也许从今天起,您不会再担心自己忘掉密码该怎幺办,而是转而担心别人会不会改掉自己的密码了。^_^
作者简介
姓名:雷凯
工作单位:升技主板(苏州)研发中央
联系地址:苏州市新区马运路罗礼科技有限公司研发中央 邮编 215000
E-mail: tigerleihm@yahoo.com.cn
“本文作者是雷凯 升技主板(苏州)研发中央工程师。他现在在中国苏州 升技主板(苏州)研发中央工作。能够通过tigerleihm@yahoo.com.cn 和他联系。”
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




