0

我正在尝试研究 NTLMv2 响应,Eric Glass 的工作
但卡在 HMAC-MD5 部分。(使用这样的功能

我得到了正确的 NTLM 哈希,以及 unicode 用户名和域。
(他只强调“USERDOMAIN”,没有强调用户名,所以我猜是“USER”)

unsigned char v1hash[16];  // "0xcd06ca7c7e10c99b1d33b7485a2ed808"
unsigned short udata[14];
// concated unicode USER+USERDOMAIN "0x550053004500520044004f004d00410049004e00"
unsigned char v2hash[16];
int iLen;

HMAC(EVP_md5(), v1hash, 16, udata, sizeof(udata), v2hash, &iLen);

但结果是:

v2hash(16): 23 d2 3c a4 dd 1a 20 81 35 cf 3a 42 1c e1 5a 17

这应该是“0x04b8e0ba74289cc540826bab1dee63ae”

我在这里做错了吗?

4

1 回答 1

1

我不是 C 程序员,但...

从我对那篇文章的阅读来看,USERDOMAIN 应该是这样的——不是 USER+USERDOMAIN,即大写的用户名 =“USER”与目标 =“DOMAIN”相结合,给出 USERDOMAIN,它给出了以 55005300 开头的 unicode 字节......

然后看起来你的 udata 数组的大小是错误的。您只处理 20 个字节的信息,因此不要将数组设置为 28,否则 HMAC/MD5 函数将在输入数组的末尾处理额外的随机数据。

于 2013-04-11T11:21:54.640 回答