⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ntlm挑战模式散列认证加密协议过程,算法实现与一些想法.txt

📁 NTLM挑战模式散列认证加密协议过程
💻 TXT
📖 第 1 页 / 共 5 页
字号:
    d2=(d2<<0xd)|(d2>>0x13);
    a1=*(DWORD *)(LM+0x20);
    a3=(((d3|d2)&d4)|(d3&d2))+a1+0x5a827999;
    a2=a2+a3;
    a2=(a2<<3)|(a2>>0x1d);
    a1=*(DWORD *)(LM+0x30);
    a3=(((d2|a2)&d3)|(d2&a2))+0x5a827999;
    d4=d4+a1+a3;
    d4=(d4<<5)|(d4>>0x1b);
    a1=*(DWORD *)(LM+0x40);
    a3=(((d4|a2)&d2)|(d4&a2))+0x5a827999;
    d3=d3+a1+a3;
    d3=(d3<<9)|(d3>>0x17);
    a1=*(DWORD *)(LM+0x50);
    a3=(((d4|d3)&a2)|(d4&d3))+a1+0x5a827999;
    d2=d2+a3;
    d2=(d2<<0xd)|(d2>>0x13);
    a1=*(DWORD *)(LM+0x24);
    a3=(((d3|d2)&d4)|(d3&d2))+a1+0x5a827999;
    a2=a2+a3;
    a2=(a2<<3)|(a2>>0x1d);
    a1=*(DWORD *)(LM+0x34);
    a3=(((d2|a2)&d3)|(d2&a2))+0x5a827999;
    d4=d4+a1+a3;
    d4=(d4<<5)|(d4>>0x1b);
    a1=*(DWORD *)(LM+0x44);
    a3=(((d4|a2)&d2)|(d4&a2))+a1+0x5a827999;
    d3=d3+a3;
    d3=(d3<<9)|(d3>>0x17);    
    a1=*(DWORD *)(LM+0x54);
    a3=(((d4|d3)&a2)|(d4&d3))+a1+0x5a827999;
    d2=d2+a3;
    d2=(d2<<0xd)|(d2>>0x13);    
    //第3轮
    a1=*(DWORD *)(LM+0x18);
    a3=((d4^d3)^d2)+a1;
    a2=a2+0x6ed9eba1+a3;
    a2=(a2<<3)|(a2>>0x1d);
    a1=*(DWORD *)(LM+0x38);
    a3=((d3^d2)^a2)+a1;
    d4=d4+0x6ed9eba1+a3;
    d4=(d4<<9)|(d4>>0x17);
    a1=*(DWORD *)(LM+0x28);
    a3=((d4^d2)^a2)+a1;
    d3=d3+0x6ed9eba1+a3;
    d3=(d3<<0xb)|(d3>>0x15);
    a1=*(DWORD *)(LM+0x48);
    a3=d4^d3;
    d2=d2+a1+0x6ed9eba1+(a2^a3);
    d2=(d2<<0xf)|(d2>>0x11);
    a1=*(DWORD *)(LM+0x20);
    a2=a2+((d2^a3)+a1+0x6ed9eba1);
    a3=d3^d2;
    a2=(a2<<3)|(a2>>0x1d);
    a1=*(DWORD *)(LM+0x40);
    a3=(a3^a2)+a1;
    d4=d4+0x6ed9eba1+a3;
    d4=(d4<<9)|(d4>>0x17);
    a1=*(DWORD *)(LM+0x30);
    a3=((d4^d2)^a2)+a1;
    d3=d3+0x6ed9eba1+a3;
    d3=(d3<<0xb)|(d3>>0x15);
    a1=*(DWORD *)(LM+0x50);
    a3=d4^d3;
    d2=d2+a1+0x6ed9eba1+(a2^a3);
    d2=(d2<<0xf)|(d2>>0x11);
    a1=*(DWORD *)(LM+0x1c);
    a2=a2+0x6ed9eba1+((d2^a3)+a1);
    a3=d3^d2;
    a2=(a2<<3)|(a2>>0x1d);
    a1=*(DWORD *)(LM+0x3c);
    a3=(a3^a2)+a1;
    d4=d4+0x6ed9eba1+a3;
    d4=(d4<<9)|(d4>>0x17);
    a1=*(DWORD *)(LM+0x2c);
    a3=((d4^d2)^a2)+a1;
    d3=d3+0x6ed9eba1+a3;
    d3=(d3<<0xb)|(d3>>0x15);
    a1=*(DWORD *)(LM+0x4c);
    a3=d4^d3;
    d2=d2+a1+0x6ed9eba1+(a2^a3);
    d2=(d2<<0xf)|(d2>>0x11);
    a1=*(DWORD *)(LM+0x24);
    a2=a2+0x6ed9eba1+((d2^a3)+a1);
    a3=d3^d2;
    a2=(a2<<3)|(a2>>0x1d);
    a1=*(DWORD *)(LM+0x44);
    a3=(a3^a2)+a1;
    d4=d4+0x6ed9eba1+a3;
    d4=(d4<<9)|(d4>>0x17);
    a1=*(DWORD *)(LM+0x34);
    a3=((d4^d2)^a2)+a1;
    d3=d3+0x6ed9eba1+a3;
    d3=(d3<<0xb)|(d3>>0x15);
    a1=*(DWORD *)(LM+0x54);
    a3=((d4^a2)^d3)+a1;
    d2=d2+0x6ed9eba1+a3;
    d2=(d2<<0xf)|(d2>>0x11);
    *(DWORD *)(LM)=a2+*(DWORD *)(LM);
    *(DWORD *)(LM+4)=d2+*(DWORD *)(LM+4);
    *(DWORD *)(LM+8)=d3+*(DWORD *)(LM+8);
    *(DWORD *)(LM+0xc)=d4+*(DWORD *)(LM+0xc);
}

void initLMP(char * pass,unsigned char * LM)
{
    char LmPass[0x20];
    DWORD d1,d2;
    unsigned char a1,a2;
    char a3[]={1,3,7,0xf,0x1f,0x3f,0x7f};
    int i;

    for(i=0;i<8;i++)
    {
        if(i==0)
        {
            a1=pass[0];
            LmPass[0]=a1>>1;
        }
        else if(i==7)
        {
            a1=pass[i-1];
            a1=a1&a3[i-1];            
            LmPass[i]=a1;
        }
        else
        {
            a1=pass[i-1];
            a2=pass[i];
            a1=a1&a3[i-1];
            a1=a1<<(7-i);
            a2=a2>>(i+1);
            LmPass[i]=a1|a2;
        }
    }
    d1=*(DWORD *)LmPass;
    d2=*(DWORD *)(LmPass+4);
    d1=(d1&0xff7f7f7f)<<1;
    d2=(d2&0xff7f7f7f)<<1;
    *(DWORD *)LmPass=d1;
    *(DWORD *)(LmPass+4)=d2;
    //
    for(i=0;i<8;i++)
    {
        a1=LmPass[i];
        a2=a1;
        a1=a1&0xf;
        a2=a2>>4;
        a2=DESParity[a2];
        a1=DESParity[a1];
        a2=a1+a2;
        a2=a2^a1;
        a2=a2-a1;
        a2=a2&1;
        a2=a2^a1;
        a2=a2-a1;
        if(a2==0)
            LmPass[i]=LmPass[i]^1;
    }
    memcpy(LM,LmPass,8);
    //deskey(LmPass,desecb);
    //des(LM,magic1,desecb,1);
}

void deskey(char * LmPass,unsigned char * desecb)
{
    int i;
    unsigned char a1;
    DWORD d1,d2,d3,d4,d5,d6;


    d1=*(DWORD *)LmPass;
    d2=*(DWORD *)(LmPass+4);
    d2=d2>>4;
    d1=d1&0xf0f0f0f;
    d2=d2&0xf0f0f0f;
    d2=d2^d1;
    d1=(*(DWORD *)LmPass)^d2;
    d2=d2<<4;
    d2=(*(DWORD *)(LmPass+4))^d2;
    d3=d1&0xfffff333;
    d3=d3<<0x12;
    d4=d1&0xcccc0000;
    d4=d4^d3;
    d3=d4;
    d3=d3>>0x12;
    d3=d3^d4;
    d1=d1^d3;
    d3=d2&0xfffff333;
    d3=d3<<0x12;
    d4=d2&0xcccc0000;
    d4=d4^d3;
    d3=d4>>0x12;
    d3=d3^d4;
    d2=d2^d3;
    d3=d1;
    d4=d2>>1;
    d3=d3&0x55555555;
    d4=d4&0x55555555;
    d4=d4^d3;
    d1=d1^d4;
    d4=d4+d4;
    d2=d2^d4;
    d4=d1>>8;
    d3=d2&0xff00ff;
    d4=d4&0xff00ff;
    d4=d4^d3;
    d2=d2^d4;
    d4=d4<<8;
    d1=d1^d4;
    d4=d2>>1;
    d3=d1;
    d3=d3&0x55555555;
    d4=d4&0x55555555;
    d4=d4^d3;
    d1=d1^d4;
    d4=d4+d4;
    d2=d2^d4;
    d3=d1&0xf000000f;
    d4=(d2>>0xc)&0xff0;
    d1=d1&0x0fffffff;
    d3=(d3|d4)>>4;
    d4=d2&0xff00;
    d2=(d2&0xff)<<0x10;
    d3=d3|d4;
    d3=d3|d2;
    for(i=0;i<16;i++)
    {
        d2=d1;
        a1=DESDShift[i];
        if(a1==0)
        {
            d2=d2>>1;
            d1=d1<<0x1b;
            d4=d3>>1;
            d3=d3<<0x1b;
            d1=d1|d2;            
        }
        else
        {
            d2=d2>>2;
            d1=d1<<0x1a;
            d4=d3>>2;
            d3=d3<<0x1a;
            d1=d1|d2;
        }
        d1=d1&0x0fffffff;
        d3=d3|d4;
        d2=d1>>1;
        d4=d1&0xc00000;
        d4=d4|(d2&0x07000000);
        d4=(d4>>1)|(d1&0x00100000);
        //d6=d2&0x00060000;
        d5=(d1&0x0001e000)|(d2&0x00060000);
        d2=d2&0x00000f00;
        d3=d3&0x0fffffff;
        d5=d5>>0xd;
        d4=d4>>0x14;
        d6=DESKEY3[d5];
        d5=d1&0xc0;
        d4=DESKEY4[d4];
        d5=(d5|d2)>>6;
        d4=d4|d6;
        d2=d1&0x3f;
        d6=DESKEY2[d5];
        d5=d3&0x180;
        d4=d4|d6;
        d6=DESKEY1[d2];
        d2=d3>>1;
        d4=d4|d6;
        d6=d2&0x1e00;
        d2=d2&0x6000000;
        d5=(d5^d6)>>7;
        d6=(d3&0x1e00000)|d2;
        d6=d6>>0x15;
        d2=DESKEY6[d5];
        d5=DESKEY8[d6];
        d2=d2^d5;
        d5=d3&0x3f;
        d6=DESKEY5[d5];
        d5=(d3>>0xf)&0x3f;
        d2=d2|d6;
        d6=DESKEY7[d5];
        d5=d4&0xffff;
        d2=d2|d6;
        d6=d2<<0x10;
        d2=d2&0xffff0000;
        d5=d5|d6;
        d5=(d5<<2)|(d5>>0x1e);
        d4=d4>>0x10;
        d2=d2|d4;
        d2=(d2<<6)|(d2>>0x1a);
        *(DWORD *)(desecb+8*i)=d5;
        *(DWORD *)(desecb+8*i+4)=d2;
    }
}

void des(unsigned char * LM,char * magic,unsigned char * ecb,long no)
{
    DWORD d1,d2,d3,d4;
    DWORD a1,a2,a3;
    int i;
    d1= *(DWORD *)magic;
    d2= *(DWORD *)(magic+4);
    d1 = (d1<<4)|(d1>>0x1c);
    d3 = d1;
    d1 = (d1^d2)&0xf0f0f0f0;
    d3 = d3^d1;
    d2 = d2^d1;
    d2 =(d2<<0x14)|(d2>>0xc);
    d1 = d2;
    d2 = (d2^d3)&0xfff0000f;
    d1 = d1 ^ d2;
    d3 = d3^d2;
    d1 = (d1<<0xe)|(d1>>0x12);
    d2 = d1;
    d1 = (d1 ^ d3) & 0x33333333;
    d2 = d2 ^ d1;
    d3 = d3^d1;
    d3 = (d3<<0x16)|(d3>>0xa);
    d1 = d3;
    d3 = (d3 ^ d2)&0x3fc03fc;
    d1 = d1^d3;
    d2 = d2^d3;
    d1 = (d1<<9)|(d1>>0x17);
    d3 = d1;
    d1 = (d1^d2)&0xaaaaaaaa;
    d3 = d3^d1;
    d2 = d2^d1;
    d2 = (d2<<1)|(d2>>0x1f);
    if(no!=0)
    {
        for(i=0;i<8;i++)
        {
            a1=0;
            d1=*(DWORD *)(ecb+16*i);
            d4=*(DWORD *)(ecb+16*i+4);
            d1=(d1^d3)&0xfcfcfcfc;
            d4=(d4^d3)&0xcfcfcfcf;
            a1=d1&0xff;
            a2=(d1>>8)&0xff;
            d4=(d4>>4)|(d4<<0x1c);
            a3=DESSpBox1[a1/4];
            a1=d4&0xff;
            d2=d2^a3;
            a3=DESSpBox3[a2/4];
            d2=d2^a3;
            a2=(d4>>8)&0xff;
            d1=d1>>0x10;
            a3=DESSpBox2[a1/4];
            d2=d2^a3;
            a1=(d1>>8)&0xff;
            d4=d4>>0x10;
            a3=DESSpBox4[a2/4];
            d2=d2^a3;
            a2=(d4>>8)&0xff;
            d1=d1&0xff;
            d4=d4&0xff;
            a1=DESSpBox7[a1/4];
            d2=d2^a1;
            a1=DESSpBox8[a2/4];
            d2=d2^a1;
            a1=DESSpBox5[d1/4];
            d2=d2^a1;
            a1=DESSpBox6[d4/4];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -