我正在尝试研究NTLMv2响应,Eric Glass's work 但坚持HMAC-MD5部分。 (使用this)等函数
我得到了正确的NTLM哈希值,以及unicode用户名&域。
(他只强调“USERDOMAIN”但没有用户名,所以我认为它是“用户”)
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”
我在这里做错了吗?答案 0 :(得分:1)
我不是C程序员但是......
从我对该文章的阅读中,USERDOMAIN应该只是 - NOT USER + USERDOMAIN,即大写的用户名=“USER”与target =“DOMAIN”连接,给出USERDOMAIN,它给出了从55005300开始的unicode字节...
然后看起来你的udata数组大小错误。您只处理20个字节的信息,因此不要将数组设置为28,否则HMAC / MD5函数将在输入数组的末尾处理额外的随机数据。