📄 ntlm挑战模式散列认证加密协议过程,算法实现与一些想法.txt
字号:
d2=d2^a1;
a1=0;
d1=*(DWORD *)(ecb+16*i+8);
d4=*(DWORD *)(ecb+16*i+0xc);
d1=(d1^d2)&0xfcfcfcfc;
d4=(d4^d2)&0xcfcfcfcf;
a1=d1&0xff;
a2=(d1>>8)&0xff;
d4=(d4>>4)|(d4<<0x1c);
a3=DESSpBox1[a1/4];
a1=d4&0xff;
d3=d3^a3;
a3=DESSpBox3[a2/4];
d3=d3^a3;
a2=(d4>>8)&0xff;
d1=d1>>0x10;
a3=DESSpBox2[a1/4];
d3=d3^a3;
a1=(d1>>8)&0xff;
d4=d4>>0x10;
a3=DESSpBox4[a2/4];
d3=d3^a3;
a2=(d4>>8)&0xff;
d1=d1&0xff;
d4=d4&0xff;
a1=DESSpBox7[a1/4];
d3=d3^a1;
a1=DESSpBox8[a2/4];
d3=d3^a1;
a1=DESSpBox5[d1/4];
d3=d3^a1;
a1=DESSpBox6[d4/4];
d3=d3^a1;
}
d3=(d3>>1)|(d3<<0x1f);
d1=d2;
d2=(d2^d3)&0XAAAAAAAA;
d1=d1^d2;
d3=d3^d2;
d1=(d1<<0x17)|(d1>>9);
d2=d1;
d1=(d1^d3)&0x3fc03fc;
d2=(d2^d1);
d3=d3^d1;
d2=(d2<<0xa)|(d2>>0x16);
d1=d2;
d2=(d2^d3)&0x33333333;
d1=d1^d2;
d3=d3^d2;
d3=(d3<<0x12)|(d3>>0xe);
d2=d3;
d3=(d3^d1)&0xfff0000f;
d2=d2^d3;
d1=d1^d3;
d2=(d2<<0xc)|(d2>>0x14);
d3=d2;
d2=(d2^d1)&0xf0f0f0f0;
d3=d3^d2;
d1=d1^d2;
d1=(d1>>4)|(d1<<0x1c);
*(DWORD *)LM=d1;
*(DWORD *)(LM+4)=d3;
}
else
{
}
}
void md5init(unsigned char * LM)
{
memset(LM,0,0x58);
*(DWORD *)(LM+8)=0x67452301;
*(DWORD *)(LM+0xc)=0xefcdab89;
*(DWORD *)(LM+0x10)=0x98badcfe;
*(DWORD *)(LM+0x14)=0x10325476;
*(DWORD *)(LM+0x0)=0;
*(DWORD *)(LM+0x0)=0;
}
void md5final(unsigned char * LM)
{
DWORD a1,d1,d2,s1;
DWORD b1,b2;
d1=*(DWORD *)(LM+0XC);
s1=*(DWORD *)(LM+0X10);
d2=*(DWORD *)(LM+0X14);
b2=*(DWORD *)(LM+0X18);
b1=(((d2^s1)&d1)^d2)+b2;
b2=*(DWORD *)(LM+0X8);
b1=b1+b2+0xd76aa478;
b1=((b1<<0x7)|(b1>>0x19))+d1;
//第一轮
b2=*(DWORD *)(LM+0X1c);
a1=(((s1^d1)&b1)^s1)+0xe8c7b756;
d2=d2+b2+a1;
d2=((d2<<0xc)|(d2>>0x14))+b1;
b2=*(DWORD *)(LM+0X20);
a1=(((d1^b1)&d2)^d1)+0x242070db;
s1=s1+b2+a1;
s1=((s1<<0x11)|(s1>>0xf))+d2;
b2=*(DWORD *)(LM+0X24);
a1=(((d2^b1)&s1)^b1)+0xc1bdceee;
d1=d1+b2+a1;
d1=((d1<<0x16)|(d1>>0xa))+s1;
b2=*(DWORD *)(LM+0X28);
a1=(((d2^s1)&d1)^d2)+0xf57c0faf;
b1=b1+b2+a1;
b1=((b1<<0x7)|(b1>>0x19))+d1;
b2=*(DWORD *)(LM+0X2c);
a1=(((s1^d1)&b1)^s1)+0x4787C62A;
d2=d2+b2+a1;
d2=((d2<<0xc)|(d2>>0x14))+b1;
b2=*(DWORD *)(LM+0X30);
a1=(((d1^b1)&d2)^d1)+0xA8304613;
s1=s1+b2+a1;
s1=((s1<<0x11)|(s1>>0xf))+d2;
b2=*(DWORD *)(LM+0X34);
a1=(((d2^b1)&s1)^b1)+0xFD469501;
d1=d1+b2+a1;
d1=((d1<<0x16)|(d1>>0xa))+s1;
b2=*(DWORD *)(LM+0X38);
a1=(((d2^s1)&d1)^d2)+0x698098D8;
b1=b1+b2+a1;
b1=((b1<<0x7)|(b1>>0x19))+d1;
b2=*(DWORD *)(LM+0X3c);
a1=(((s1^d1)&b1)^s1)+0x8B44F7AF;
d2=d2+b2+a1;
d2=((d2<<0xc)|(d2>>0x14))+b1;
b2=*(DWORD *)(LM+0X40);
a1=(((d1^b1)&d2)^d1)+0xFFFF5BB1;
s1=s1+b2+a1;
s1=((s1<<0x11)|(s1>>0xf))+d2;
b2=*(DWORD *)(LM+0X44);
a1=(((d2^b1)&s1)^b1)+0x895CD7BE;
d1=d1+b2+a1;
d1=((d1<<0x16)|(d1>>0xa))+s1;
b2=*(DWORD *)(LM+0X48);
a1=(((d2^s1)&d1)^d2)+0x6B901122;
b1=b1+b2+a1;
b1=((b1<<0x7)|(b1>>0x19))+d1;
b2=*(DWORD *)(LM+0X4c);
a1=(((s1^d1)&b1)^s1)+0xFD987193;
d2=d2+b2+a1;
d2=((d2<<0xc)|(d2>>0x14))+b1;
b2=*(DWORD *)(LM+0X50);
a1=(((d1^b1)&d2)^d1)+0xA679438E;
s1=s1+b2+a1;
s1=((s1<<0x11)|(s1>>0xf))+d2;
b2=*(DWORD *)(LM+0X54);
a1=(((d2^b1)&s1)^b1)+0x49B40821;
d1=d1+b2+a1;
d1=((d1<<0x16)|(d1>>0xa))+s1;
//第二轮
b2=*(DWORD *)(LM+0X1c);
a1=(((s1^d1)&d2)^s1)+0xF61E2562;
b1=b1+b2+a1;
b1=((b1<<0x5)|(b1>>0x1b))+d1;
b2=*(DWORD *)(LM+0X30);
a1=(((d1^b1)&s1)^d1)+0xC040B340;
d2=d2+b2+a1;
d2=((d2<<0x9)|(d2>>0x17))+b1;
b2=*(DWORD *)(LM+0X44);
a1=(((d2^b1)&d1)^b1)+0x265E5A51;
s1=s1+b2+a1;
s1=((s1<<0xe)|(s1>>0x12))+d2;
b2=*(DWORD *)(LM+0X18);
a1=(((d2^s1)&b1)^d2)+0xE9B6C7AA;
d1=d1+b2+a1;
d1=((d1<<0x14)|(d1>>0xc))+s1;
b2=*(DWORD *)(LM+0X2c);
a1=(((s1^d1)&d2)^s1)+0xD62F105D;
b1=b1+b2+a1;
b1=((b1<<0x5)|(b1>>0x1b))+d1;
b2=*(DWORD *)(LM+0X40);
a1=(((d1^b1)&s1)^d1)+0x2441453;
d2=d2+b2+a1;
d2=((d2<<0x9)|(d2>>0x17))+b1;
b2=*(DWORD *)(LM+0X54);
a1=(((d2^b1)&d1)^b1)+0xD8A1E681;
s1=s1+b2+a1;
s1=((s1<<0xe)|(s1>>0x12))+d2;
b2=*(DWORD *)(LM+0X28);
a1=(((d2^s1)&b1)^d2)+0xE7D3FBC8;
d1=d1+b2+a1;
d1=((d1<<0x14)|(d1>>0xc))+s1;
b2=*(DWORD *)(LM+0X3c);
a1=(((s1^d1)&d2)^s1)+0x21E1CDE6;
b1=b1+b2+a1;
b1=((b1<<0x5)|(b1>>0x1b))+d1;
b2=*(DWORD *)(LM+0X50);
a1=(((d1^b1)&s1)^d1)+0xC33707D6;
d2=d2+b2+a1;
d2=((d2<<0x9)|(d2>>0x17))+b1;
b2=*(DWORD *)(LM+0X24);
a1=(((d2^b1)&d1)^b1)+0xF4D50D87;
s1=s1+b2+a1;
s1=((s1<<0xe)|(s1>>0x12))+d2;
b2=*(DWORD *)(LM+0X38);
a1=(((d2^s1)&b1)^d2)+0x455A14ED;
d1=d1+b2+a1;
d1=((d1<<0x14)|(d1>>0xc))+s1;
b2=*(DWORD *)(LM+0X4c);
a1=(((s1^d1)&d2)^s1)+0xA9E3E905;
b1=b1+b2+a1;
b1=((b1<<0x5)|(b1>>0x1b))+d1;
b2=*(DWORD *)(LM+0X20);
a1=(((d1^b1)&s1)^d1)+0xFCEFA3F8;
d2=d2+b2+a1;
d2=((d2<<0x9)|(d2>>0x17))+b1;
b2=*(DWORD *)(LM+0X34);
a1=(((d2^b1)&d1)^b1)+0x676F02D9;
s1=s1+b2+a1;
s1=((s1<<0xe)|(s1>>0x12))+d2;
b2=*(DWORD *)(LM+0X48);
a1=(((d2^s1)&b1)^d2)+0x8D2A4C8A;
d1=d1+b2+a1;
d1=((d1<<0x14)|(d1>>0xc))+s1;
//第三轮
b2=*(DWORD *)(LM+0X2c);
a1=((d2^s1)^d1)+0xFFFA3942;
b1=b1+b2+a1;
b1=((b1<<0x4)|(b1>>0x1c))+d1;
b2=*(DWORD *)(LM+0X38);
a1=((s1^d1)^b1)+0x8771F681;
d2=d2+b2+a1;
d2=((d2<<0xb)|(d2>>0x15))+b1;
b2=*(DWORD *)(LM+0X44);
a1=(d2^d1)^b1;
s1=s1+b2+0x6D9D6122+a1;
s1=((s1<<0x10)|(s1>>0x10))+d2;
b2=*(DWORD *)(LM+0X50);
a1=d2^s1;
d1=d1+b2+0xFDE5380C+(b1^a1);
d1=((d1<<0x17)|(d1>>0x9))+s1;
b2=*(DWORD *)(LM+0X1c);
b1=b1+b2+0xA4BEEA44+(d1^a1);
b1=((b1<<0x4)|(b1>>0x1c))+d1;
b2=*(DWORD *)(LM+0X28);
a1=((s1^d1)^b1)+0x4BDECFA9;
d2=d2+b2+a1;
d2=((d2<<0xb)|(d2>>0x15))+b1;
b2=*(DWORD *)(LM+0X34);
a1=(d2^d1)^b1;
s1=s1+b2+0xF6BB4B60+a1;
s1=((s1<<0x10)|(s1>>0x10))+d2;
b2=*(DWORD *)(LM+0X40);
a1=(d2^s1);
d1=d1+b2+0xBEBFBC70+(b1^a1);
d1=((d1<<0x17)|(d1>>0x9))+s1;
b2=*(DWORD *)(LM+0X4c);
b1=b1+b2+0x289B7EC6+(d1^a1);
b1=((b1<<0x4)|(b1>>0x1c))+d1;
b2=*(DWORD *)(LM+0X18);
a1=((s1^d1)^b1)+0xEAA127FA;
d2=d2+b2+a1;
d2=((d2<<0xb)|(d2>>0x15))+b1;
b2=*(DWORD *)(LM+0X24);
a1=(d2^d1)^b1;
s1=s1+b2+0xD4EF3085+a1;
s1=((s1<<0x10)|(s1>>0x10))+d2;
b2=*(DWORD *)(LM+0X30);
a1=d2^s1;
d1=d1+b2+0x4881D05+(b1^a1);
d1=((d1<<0x17)|(d1>>0x9))+s1;
b2=d1^a1;
a1=*(DWORD *)(LM+0X3c)+0xD9D4D039;
b1=b1+b2+a1;
b1=((b1<<0x4)|(b1>>0x1c))+d1;
b2=*(DWORD *)(LM+0X48);
a1=((s1^d1)^b1)+0xE6DB99E5;
d2=d2+b2+a1;
d2=((d2<<0xb)|(d2>>0x15))+b1;
b2=*(DWORD *)(LM+0X54);
a1=((d2^d1)^b1);
s1=s1+b2+0x1FA27CF8+a1;
s1=((s1<<0x10)|(s1>>0x10))+d2;
b2=*(DWORD *)(LM+0X20);
a1=((d2^s1)^b1);
d1=d1+b2+0xC4AC5665+a1;
d1=((d1<<0x17)|(d1>>0x9))+s1;
//第4轮
b2=*(DWORD *)(LM+0X18);
a1=(((d2^0xFFFFFFFF)|d1)^s1)+0xF4292244;
b1=b1+b2+a1;
b1=((b1<<0x6)|(b1>>0x1a))+d1;
b2=*(DWORD *)(LM+0X34);
a1=(((s1^0xFFFFFFFF)|b1)^d1)+0x432AFF97;
d2=d2+b2+a1;
d2=((d2<<0xa)|(d2>>0x16))+b1;
b2=*(DWORD *)(LM+0X50);
a1=(((d1^0xFFFFFFFF)|d2)^b1)+0xAB9423A7;
s1=s1+b2+a1;
s1=((s1<<0xf)|(s1>>0x11))+d2;
b2=*(DWORD *)(LM+0X2c);
a1=(((b1^0xFFFFFFFF)|s1)^d2);
d1=d1+b2+0xFC93A039+a1;
d1=((d1<<0x15)|(d1>>0xb))+s1;
b2=*(DWORD *)(LM+0X48);
a1=(((d2^0xFFFFFFFF)|d1)^s1)+0x655B59C3;
b1=b1+b2+a1;
b1=((b1<<0x6)|(b1>>0x1a))+d1;
b2=*(DWORD *)(LM+0X24);
a1=(((s1^0xFFFFFFFF)|b1)^d1)+0x8F0CCC92;
d2=d2+b2+a1;
d2=((d2<<0xa)|(d2>>0x16))+b1;
b2=*(DWORD *)(LM+0X40);
a1=(((d1^0xFFFFFFFF)|d2)^b1)+0xFFEFF47D;
s1=s1+b2+a1;
s1=((s1<<0xf)|(s1>>0x11))+d2;
b2=*(DWORD *)(LM+0X1c);
a1=(((b1^0xFFFFFFFF)|s1)^d2)+0x85845DD1;
d1=d1+b2+a1;
d1=((d1<<0x15)|(d1>>0xb))+s1;
b2=*(DWORD *)(LM+0X38);
a1=(((d2^0xFFFFFFFF)|d1)^s1)+0x6FA87E4F;
b1=b1+b2+a1;
b1=((b1<<0x6)|(b1>>0x1a))+d1;
b2=*(DWORD *)(LM+0X54);
a1=(((s1^0xFFFFFFFF)|b1)^d1)+0xFE2CE6E0;
d2=d2+b2+a1;
d2=((d2<<0xa)|(d2>>0x16))+b1;
b2=*(DWORD *)(LM+0X30);
a1=(((d1^0xFFFFFFFF)|d2)^b1)+0xA3014314;
s1=s1+b2+a1;
s1=((s1<<0xf)|(s1>>0x11))+d2;
b2=*(DWORD *)(LM+0X4c);
a1=(((b1^0xFFFFFFFF)|s1)^d2)+0x4E0811A1;
d1=d1+b2+a1;
d1=((d1<<0x15)|(d1>>0xb))+s1;
b2=*(DWORD *)(LM+0X28);
a1=(((d2^0xFFFFFFFF)|d1)^s1)+0xF7537E82;
b1=b1+b2+a1;
b1=((b1<<0x6)|(b1>>0x1a))+d1;
b2=*(DWORD *)(LM+0X44);
a1=(((s1^0xFFFFFFFF)|b1)^d1)+0xBD3AF235;
d2=d2+b2+a1;
d2=((d2<<0xa)|(d2>>0x16))+b1;
b2=*(DWORD *)(LM+0X20);
a1=(((d1^0xFFFFFFFF)|d2)^b1)+0x2AD7D2BB;
s1=s1+b2+a1;
s1=((s1<<0xf)|(s1>>0x11))+d2;
b2=*(DWORD *)(LM+0X3c);
a1=(((b1^0xFFFFFFFF)|s1)^d2)+0xEB86D391;
d1=d1+b2+a1;
d1=((d1<<0x15)|(d1>>0xb))+s1;
b2=*(DWORD *)(LM+0X8);
b1=b1+b2;
b2=*(DWORD *)(LM+0Xc);
d1=d1+b2;
b2=*(DWORD *)(LM+0X10);
s1=s1+b2;
b2=*(DWORD *)(LM+0X14);
d2=d2+b2;
*(DWORD *)(LM+0X8)=b1;
*(DWORD *)(LM+0Xc)=d1;
*(DWORD *)(LM+0X10)=s1;
*(DWORD *)(LM+0X14)=d2;
}
Copyright ? 1998-2003
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -