原創)忘记密码不再烦恼

发表于:2007-07-04来源:作者:点击数: 标签:
Subversion 系统 原創)忘记密码不再烦恼 我们使用计算机的时候,经常会遇到一些尴尬的事情,而最严重的莫过于忘记了登陆密码,这时候有条件的用户会把他的硬盘当作从盘挂在其它的系统下,将重要的数据拷贝出来,那没有条件的用户只能无可奈何重装系统幺?答
Subversion 系统

原創)忘记密码不再烦恼

我们使用计算机的时候,经常会遇到一些尴尬的事情,而最严重的莫过于忘记了登陆密码,这时候有条件的用户会把他的硬盘当作从盘挂在其它的系统下,将重要的数据拷贝出来,那没有条件的用户只能无可奈何重装系统幺?答案是”不”!下面我就向大家介绍一款修改登陆密码的利器:Offline NT Password & Registry Editor.
Offline NT Password & Registry Editor.是一个免费软件,是由国外的编程爱好者开发出来的,我先向大家介绍这个软件的安装及使用方法,之后我会简单介绍它的工作原理。
下载Offline NT Password & Registry Editor
您可以从http://home.eunet.no/~pnordahl/ntpasswd/官方网站下载最新版本的Offline NT Password & Registry Editor,它会有三个下载提供:bd040818.zip,cd040818.zip,sc040818.zip,其中bd040818.zip是针对打算使用的用户,cd040818.zip是针对打算使用光盘作为该工具载体的用户,sc040818.zip则是为使用软盘作为载体且使用的是SCSI硬盘的用户提供SCSI驱动。在这里我主要介绍如何使用软盘作为该工具载体,其它情况的用户可以参考官方的帮助文件。
安装Offline NT Password & Registry Editor
首先在用WINRAR或WINZIP将bd040818.zip解压,它会生成名为bd040818的活页夹,内有三个文件bd040818.bin, install.bat, rawrite2.exe.我们双击install.bat,会自动打开一个执行窗口,显示:
RaWrite 2.0 - Write disk file to raw floppy diskette
Enter target diskette drive:
选择您的软驱的盘符,如果是a,就输入a,是b就输入b,然后回车,接下来显示:
Please insert a formatted diskette into drive A: and press -ENTER- :
插入一张格式化过的空白软盘后回车,它会自动进行安装。以下是安装过程的显示:
Number of sectors per track for this disk is 18
Writing image to drive A:. Press ^C to abort.
Track: 79 Head: 1
Done.
Done!
To run Offline NT Password and Registry Editor, leave the floppy in the drive an
d reboot.
Press any key to continue . . .
到这里安装就结束了。
使用Offline NT Password & Registry Editor
将安装好的软盘插入您忘记密码的主机的软驱内,开机进入BIOS,设置软驱为第一激活设备。然后保存重启。重启后软盘会自动引导到一个linux环境下,对linux不熟悉的朋友也不用惊慌,这里只需要您作简单的选择和输入就可以了。首先第一个选择是:
========================================================
. Step ONE: Select disk where the Windows installation is
========================================================
Disks:
/dev/ide/host0/bus0/target0/lun0/disc: NT partitions found:
1: /dev/ide/host0/bus0/target0/lun0/part1 10001MB Boot
2: /dev/ide/host0/bus0/target0/lun0/part2 80003MB
Please select partition by number or
a = show all partitions, d = load new disk drivers
l = relist NTFS/FAT partitions, q = quit
Select: [1]
这里“/dev/ide/host0/bus0/target0/lun0/part1 10001MB Boot”代表您的C盘,也就是安装windows的地方。“/dev/ide/host0/bus0/target0/lun0/part2 80003MB”代表您的D盘,我们这里应该选择1,简单的说您看哪个选项后有Boot的,就选哪个。选择后回车进入下一个画面:
========================================================
. Step TWO: Select PATH and registry files
========================================================
What is the path to the registry directory? (relative to windows disk)
[windows/system32/config] :
这里是让您选择SAM文件所在的路径,这个文件里是放置的是加密过的用户所有重要信息。Winxp下它的路径为windows/system32/config,Win2000下它的路径为winnt/system32/config,这里程序会根据您的操作系统自动确定路径,所以您直接回车确认即可。进入下一个画面:
-r-------- 1 0 0 262144 Jan 12 18:01 SAM
-r-------- 1 0 0 262144 Jan 12 18:01 SECURITY
-r-------- 1 0 0 262144 Jan 12 18:01 default
-r-------- 1 0 0 8912896 Jan 12 18:01 software
-r-------- 1 0 0 2359296 Jan 12 18:01 system
dr-x------ 1 0 0 4096 Sep 8 11:37 systemprofile
-r-------- 1 0 0 262144 Sep 8 11:53 userdiff

Select which part of registry to load, use predefined choices
or list the files with space as delimiter
1 - Password reset [SAM system security]
2 - RecoveryConsole parameters [software]
q - quit - return to previous
[1] :
这里显示的是windows/system32/config下的文件,因为我们的目的是重新设置登陆密码,所以应该选择1,因为默认值是1,所以直接回车,进入下一个画面:
<>========<> chntpw Main Interactive Menu <>========<>

Loaded hives: <SAM> <system> <security>

1 - Edit user data and passwords
2 - Syskey status & change
3 - RecoveryConsole settings
- - -
9 - Registry editor, now with full write support!
q - Quit (you will be asked if there is something to save)

What to do? [1] ->
这里显示的是该软件的主菜单,除了更改密码以外,我们还可以对SAM文件进行一些编辑。这里我们选择1,因为默认值是1,所以直接回车,进入下一个画面:
===== chntpw Edit User Info & Passwords ====

RID: 01f4, Username: <Administrator>
RID: 01f5, Username: <Guest>, *disabled or locked*
RID: 03e8, Username: <HelpAssistant>, *disabled or locked*
RID: 03eb, Username: <test>, *disabled or locked*
RID: 03ea, Username: <SUPPORT_388945a0>, *disabled or locked*

Select: ! - quit, . - list users, 0x<RID> - User with RID (hex)
or simply enter the username to change: [Administrator]
这里显示的是您的系统所有用户的一些信息,我们可以看到这个系统内有五个用户,用户名分别为:Administrato,Guest,HelpAssistant,test,SUPPORT_388945a0,其中Administrator ,Guest ,HelpAssistan,SUPPORT_388945a0为系统自动产生的用户,test为自己创建的用户,我们只要获得有最高权限的Administrator用户密码就可以了,因为默认值是就是Administrator,所以直接回车,进入下一个画面:
RID : 0500 [01f4]
Username: Administrator
fullname:
comment : Built-in aclearcase/" target="_blank" >ccount for administering the computer/domain
homedir :

Account bits: 0x0210 =
[ ] Disabled | [ ] Homedir req. | [ ] Passwd not req. |
[ ] Temp. duplicate | [X] Normal account | [ ] NMS account |
[ ] Domain trust ac | [ ] Wks trust act. | [ ] Srv trust act |
[X] Pwd don't expir | [ ] Auto lockout | [ ] (unknown 0x08) |
[ ] (unknown 0x10) | [ ] (unknown 0x20) | [ ] (unknown 0x40) |

Failed login count: 0, while max tries is: 0
Total login count: 3

* = blank the password (This may work better than setting a new password!)
Enter nothing to leave it unchanged
Please enter new password:
这里是显示的是Administrator的注册表信息,我们不需要关心它。最后一行是要您输入您的Administrator用户的新密码,我们看到有这幺一句话:* = blank the password (This may work better than setting a new password!),这里要作一个说明:笔者经过多次实验发现如果您设置一个新的密码,它根本不起作用,登陆时还是会提示密码错误,而您如果输入*,即表示设置密码为空,则登陆时不用输入密码直接回车就可以成功的进入系统。造成的这个现象的原因后面我会详细说明。所以我们输入*,让它为空密码,回车,进入下一个画面:
Blanking password!

Do you really wish to change it? (y/n) [n]

这里是让您确认变更,我们输入y,回车,进入下一个画面:
Changed!


Select: ! - quit, . - list users, 0x - User with RID (hex)
or simply enter the username to change: [Administrator]
这里是让您选择更改其它用户的密码,我们不打算更该其它用户所以输入!,回车,回到主菜单:
<>========<> chntpw Main Interactive Menu <>========<>

Loaded hives: <SAM> <system> <security>

1 - Edit user data and passwords
2 - Syskey status & change
3 - RecoveryConsole settings
- - -
9 - Registry editor, now with full write support!
q - Quit (you will be asked if there is something to save)

What to do? [1] ->
这里我们选择q退出主菜单,进入下一个画面
Hives that have changed:
# Name
0 - OK

========================================================
. Step FOUR: Writing back changes
========================================================
About to write file(s) back! Do it? [n] :
如果您想放弃以前的操作,那这里是最后一次机会。如果您选择y那幺所有的变更会写入文件中,我们选择y后回车。
Writing SAM

NOTE: A disk fixup will now be done.. it may take some time

Mounting volume... OK

Processing of $MFT and $MFTMirr completed successfully.

NTFS volume version is 3.1.

Setting required flags on partition... OK

Going to empty the journal ($LogFile)... OK

NTFS partition /dev/ide/host0/bus0/target0/lun0/part1 was processed successfully.
NOTE: Windows will run a diskcheck (chkdsk) on next boot.
NOTE: this is to ensure disk intergity after the changes

***** EDIT COMPLETE *****

You can try again if it somehow failed, or you selected wrong
New run? [n] : n
到这里所有的步骤就结束了,它会再次提醒您是否有什幺选择错误的地方,如果有那就要把以上的动作再作一遍,我们确定没有问题就选择n,回车,结束所有操作,然后取出软盘并重启系统。
在登陆画面中的用户名一栏中输入Administrator,密码不输,直接回车。您会惊喜的发现,您成功的进入了系统。
Offline NT Password & Registry Editor的基本原理
现在我简单的解释一下它的工作原理。在每一个NT操作系统下都会有一个叫SAM的文件(Winxp下它的路径为windows/system32/config,Win2000下它的路径为winnt/system32/config,). SAM文件即System Administration Manager---系统管理员程序。所有用户的登录名及口令等相关信息都会保存在这个文件中。当我们登录系统的时候,系统会自动地和SAM校对,如发现此次密码和用户名与SAM文件中的加密数据符合时,您就会顺利登录;如果错误则无法登录。Offline NT Password & Registry Editor就是通过直接修改SAM文件中的加密数据来达到目的的。
想更改SAM文件中的数据,我们就必须要先知道SAM文件中的数据结构信息,因为MicroSoft从来没有公开过相关的内容,所以这是个难点,幸运的是目前已经有一个德国高人B.D基本上确定这个文件的大部分registry structure信息,如下:
/* This contains some policy settings for the account database */
struct accountdb_F
/* This is users F value, contains account type & state etc */
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+javascript:window.open(this.src);" style="CURSOR: pointer" onload="return imgzoom(this,550)">,(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.ltesting.net