星期一一大早,大伙儿一如既往地投入在工作之中。
正在大伙儿忙得不可开交的时候,刘秘书突然急匆匆跑来找我,说又出事儿了!
原来,今天一早阚总有个重要会议,直到10点多才结束,这期间他都不在办公室。
等他回到办公室时,发现他的笔记本电脑怎么也登录不上了,密码怎么试都不对。
明明前一天还在用还好好的,怎么今天就不行了?
不知道是不是今早心情不好还是咋的,阚总居然因此大发雷霆,说肯定是谁碰了他的电脑,要让保安查监控。
其实根本就不用看监控,阚总的办公室前后拢共只有三个人进去过,刘秘书一直在门口盯着呢!
一个是维修工,趁没人正好修理办公室里的电器设备,大概在8点10分到8点30分之间进入;
另一个是清洁工,一大早办公室里没人正好打扫卫生,在维修工之后,大概在8点30分到8点50分之间进入;
还有一个就是刘秘书,送一份之前整理好的资料,大概在8点55分到9点05分之间进入。
究竟是谁动了阚总的电脑呢?
大伙儿直呼冤枉,特别是刘秘书,说阚总真是个难伺候的主,求我务必得帮帮她!
我心想,这电脑问题怎么还上升到了刑事案件了,还特么查监控,有点吃饱了那个啥了吧!
我也看过了,电脑的确无法登录,原先的密码根本就不正确。
后来我用 PE
光盘将 Administrator
用户激活后成功登录,但阚总的用户密码没有去动它。
原因很简单,大家伙都希望我帮他们证明清白,而我也很好奇,要是能看到什么时候修改的密码不就方便了嘛!
那能不能看到密码的修改时间呢?
如果能,又如何查看密码是啥时间修改的呢?
域用户查看最后一次修改密码的时间
打开 ADSI
编辑器(需要安装客户端 AD
管理工具),找到对应用户后查看其属性。
在用户属性窗口中的 属性编辑器
选项卡中,我们找到 pwdLastSet
一项,即可看到最近密码修改时间。
如果嫌打开 ADSI
编辑器麻烦的话,直接用条命令就可以快速查看最近密码修改时间了。
# 使用 PowerShell 执行以下命令
Get-ADUser -Filter 'Name -like "Username*"' -Properties * | Select-Object name, passwordlastset
很方便就知道了最后修改密码的时间,不过事情好像并没有那么简单!
阚总的这台笔记本电脑并不是域成员,也就是说,他的电脑是个独立的单机,由于新买还没有加入到公司域网络中。
这种情况下我们并不能通过查询域信息来定位密码修改时间了。
那么眼前的问题会无解吗?
单机系统也能查看最近密码修改时间
经过资料的查找,单机系统也有记录密码修改的功能,这一点已经被证实了。
不过虽说是这样,但很显然与统一管理的域环境相比,单机系统要想查询密码修改时间就显得相对复杂一些。
首先,我们就要找到存放密码修改时间的场所。
有的小伙伴可能猜到了,没错,它就藏在注册表中!
不过我前面说了,它并没有那么简单地能让你很方便地找出来。
因为它的藏身之处是需要高级管理员权限的,这个权限并不是 Administrators
,而是系统用户 SYSTEM
。
通常 SYSTEM
是用来跑系统服务的,一般它都是在站在后台的,在前面我们是看不到的,因此一般情况下我们几乎不太用这个 SYSTEM
。
但是这次我们想要看到密码修改时间,那就不得不要用到这个 SYSTEM
了。
怎么用 SYSTEM
呢?
照以前我们是要自己写程序才行的,灰常麻烦,不过现在有现成的便利工具了。
我们可以到 Nirsoft
上下载一个叫作 nircmd
的小工具,利用这个工具我们就可以以 SYSTEM
用户身份运行一切程序了。
流口水了吗,先擦一擦,我们还没开始干活呢!
下载我就不啰嗦了,如果你找不到可以关注我留言给我,我会发给你一份。
好了,长话短说,使用 nircmd
以 SYSTEM
用户身份运行 regedit.exe
,命令如下。
nircmd.exe elevatecmd runassystem c:\windows\regedit.exe
如果打开成功,那么你会看到这样子。
如果你没有使用 SYSTEM
来打开注册表,那么就可能看不到什么了。
OK!没错,我们终于找到了记录在注册表中的系统用户项,就是下面这个路径。
HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users
其中 Names
项中的各个用户名都一一对应着相应不同的 16
进制数字。
比如我这儿的 Administrator
其数字是 0x1f4
,那么在 Users
项中就对应的是 000001F4
。
然后,我们点击相应的用户数字,(比如 000001F4
,也就是 Administrator
用户)找到名为 F
的键,它是一个二进制类型的注册表键,打开它我们看看它的值是什么。
我的乖乖,好家伙,我们可以看到是一堆16进制的数字,完全看不懂啊,它们都表示什么意思呢?
请注意了,从第四行,也就是从 00000018
字节开始,一共八位的数字,就是用来表示日期时间的。
有的小伙伴要说了,你开什么玩笑,这玩意怎么看得出来是日期时间?
别着急,后面会对它进行分析,要不前面怎么说这玩意就是有些复杂呢!
如果这几位数字都是 0
,那么说明没有修改过密码,密码就是初始的空密码。
如果有数字就是修改过密码,比如我这儿的示例:
1C 3D B7 63 0C 7A D8 01
好了,为了让我们能看得懂这个16进制格式的日期时间,我们需要请出大神来帮助我们。
当然我们不用真的请大神出来,我们只要使用大神的便利工具 DCode
就行,可以轻易地获取到这串16进制字符串格式所表示的日期时间。
DCode-x86-EN-5.5.21194.40.zip(28.2M)
下载链接:https://pan.baidu.com/s/1uBeWnsrqv4AvDtknljIq5Q
提取码:
★扫码关注公众号, 发送【000979】获取阅读密码
我们将16进制字符串 01d87a0c63b73d1c
输入到 Value
中,选择大尾端 Big-Endian
,并点击解码 Decode
。
字符串 01d87a0c63b73d1c
实际表示的就是 2022-06-07 09:17:43
这个时间,请看图片的左下角 Windows Filetime
一项。
最后,利用文件系统日期格式转化为人类能看得懂日期格式的算法,我自己写了一个简单小巧的程序。
输入大尾端 Big-Endian
16进制日期,然后点击 转换
即可查看实际日期。
XJFiletime2Datetime.7z(36.7K)
下载链接:https://pan.baidu.com/s/1x8J8LhBBAvE9ZSj5EKkfoQ
提取码:
★扫码关注公众号, 发送【000979】获取阅读密码
有的小伙伴可能会懵,什么大尾巴小尾巴?
咳咳...是大尾端和小尾端啦!
这是指数据存放的方式,具体的请各位网上查一查资料,这里展开可能篇幅不够了。
我们只要记住:大小尾端可以互相转换,方法很简单,就是将首尾的16进制数字调换就行了。
如果不是 01
开头的字符串,那么可能这是小尾端格式(注册表中就是这样),将其首尾调换即可。
比如小尾端格式:
# 标记一下顺序,看得更清楚易懂
1 2 3 4 5 6 7 8
1C 3D B7 63 0C 7A D8 01
首尾调换一下顺序就成大尾端了,像这样:
# 标记一下顺序,看得更清楚易懂
8 7 6 5 4 3 2 1
01 D8 7A 0C 63 B7 3D 1C
注意:为了让大家看得更清楚,我用空格将数字隔开了,实际上不用加空格哦!
如果小伙伴们对这个十六进制换日期格式的算法有兴趣的话,可以到我以前写的文章中找一找。
有一篇《十六进制的时间格式到底是个什么鬼?》中写得很清楚,可以给大家拿来参考,我在这儿就不赘述了。
写在最后
后来从最后的调查结果来看,阚总电脑的密码是在前一天的 20:16:18
这个时间点修改的。
而前一天是个星期天,阚总将电脑带回家中,曾经让家里的孩子用电脑上了一会儿网课。
有可能是阚总去忙别的什么事情了,小孩子在下课之余又玩了一会电脑,有可能就在这时出于调皮恶作剧还是别的啥原因给修改了密码。
之后阚总也确认孩子确实改了他电脑密码这事儿,至此真相大白、水落石出。
事后阚总也为当初无端发火表示后悔,同时也向同事们表达了诚恳的歉意,大伙儿这才松了一口气。
大家也纷纷表示,多亏了我才让事情有了个圆满的结局。
而我呢并没有将此事放在心上,人人为我,我为人人嘛!
其实我一直在琢磨另一件事儿,我很想知道到底是谁动了我的微信余额......
扫码关注@网管小贾,个人微信:sysadmcc
网管小贾 / sysadm.cc