1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Windows下LM-Hash与NTLM-Hash生成原理

Windows下LM-Hash与NTLM-Hash生成原理

时间:2022-06-16 23:24:57

相关推荐

Windows下LM-Hash与NTLM-Hash生成原理

LM-Hash与NTLM-Hash

在windows下通过SAMInside提取到的密码Hash时,可以看到有两条,分别是LM-Hash和NT-Hash,这是对同一个密码的两种不同的加密方式,下面对其生成原理做个实验。

Windows下LM-Hash生成原理

这里用实例展示LM-Hash的具体产生过程。

我使用的明文口令是“123993”,可以看到在使用SAMInside提取出来的LM-Password是 < Disabled >的形式,这里是因为win7系统禁用了LM方式。

使用如下方法启动:

依次打开:控制面板>>所有控制面板项>>管理工具>>本地安全策略,再依次打开>>本地策略>>安全选项

打开以下截图中的“策略”,并将“已启用”修改为“已禁用”。单击“应用”后再点击“确定”。

因为该策略要求修改密码后生效,所以我需要修改密码。

我将密码修改为123994,此时Administrator用户的LM-Password不再显示< Disabled >,并且获得其LM-Hash值FAE8BB9ECB799902AAD3B435B51404EE。

这种加密过程的第一步是将明文口令转换为其大写形式,接下来123994大写转换后仍为它本身,第二步是将字符串大写后转换为16进制字符串

这里使用UltraEdit编辑器将123994转换为16进制字符串。

在UltraEdit编辑器输入123994后右键选择“十六进制编辑”选项,如下图所示。

【误区:使用win7自带的计算器并选择程序员模式,将十进制的123994转换为16进制,结果为1E45A,这里是把123994当作数值转换,没有按要求转换为16进制字符串。】

这种密码生成规则要求用户的密码最多仅能为14个字符,第三步是密码不足14字节要求用0补全。转换后的十六进制字符串按照二进制计算只有48bit(12*4),为了满足14字节(112bits)的要求,所以需要补全64bit(16*4)的二进制0,得最终补全后十六进制为:3132333939340000000000000000。

第四步是将上述编码分成2组7字节(56bits=14*4)的数据,分别为31323339393400和00000000000000。

第五步是将每一组7字节的十六进制转换为二进制,每7bit一组末尾加0,再转换成十六进制组成得到2组8字节的编码

下图将31323339393400转换为二进制。

然后从左到右按照每7bit一组罗列如下:这里务必注意将最前面的11补全为0011

0011 000

1 0011 00

10 0011 0

011 0011

1001 001

1 1001 00

11 0100 0

000 0000

接下来在每7bits一组的末尾添0,再将其转换成16进制。

0011 0000 -> 3 0

1001 1000 -> 9 8

1000 1100 -> 8 C

0110 0110 -> 6 6

1001 0010 -> 9 2

1100 1000 -> C 8

1101 0000 -> D 0

0000 0000 -> 0 0

从上往下得到31323339393400对应的8字节编码:30988C6692C8D000

同理知00000000000000对应的8字节编码:

0000000000000000。

第六步将以上步骤得到的两组8字节编码,分别作为DES加密key为魔术字符串“KGS!@#$% ”进行加密

该魔术字符串换算成16进制:4B47532140232425。

从网上下载到DES计算器,依次计算使用30988C6692C8D000和0000000000000000加密4B47532140232425后的密文。

第七步将两组DES加密后的编码拼接

得到最终LM-Hash值为:

FAE8BB9ECB799902AAD3B435B51404EE

这与SAMInside中的LM-Hash值相同。

注意:这种加密方法对于输入明文密码是数字、字母或者数字与字母的组合,或者其他如&、%等常用符号均适用;使用UltraEdit获取明文的十六进制字符串

Windows下NTLM-Hash生成原理

IBM设计的LM Hash算法存在几个弱点,微软在保持向后兼容性的同时提出了自己的挑战响应机制,NTLM Hash便应运而生。

这里同样以上节的明文密码“123994”作为研究对象。首先在UltraEdit中输入123994,然后点击>>编辑>>十六进制函数>>十六进制编辑,

再点击>>文件>>转换>>ASCII转Unicode,如下图所示获得Unicode字符串为31003300390039003400,

开头的FF FE用于标识此文本文件为Unicode编码,参考链接:

/u/1024767/blog/351792?fromerr=KQ0hrIzn

/s/blog_815b7fb901010am3.html

对所获取的Unicode字符串进行标准MD4单向哈希加密,无论数据源有多少字节,MD4固定产生128-bit的哈希值,产生的哈希值就是最后的NTLM Hash。

从网上下载HashCalc工具,打开后将31003300390039003400输入数值框中,选择左侧数据格式为十六进制串,去掉HMAC前的对号。选中MD4加密,再点击计算,如下图所示。

获得MD4加密的哈希值为b648042caad9f1c0cbf5bb5cb66ee88f,

与SAMInside中的NT-Hash:B648042CAAD9F1C0CBF5BB5CB66EE88F相同。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。