?? wormdes.c
字號:
0x00800002, 0x00000202, 0x00008202, 0x00808200, 0x00000202, 0x00800200, 0x00800200, 0x00000000, 0x00008002, 0x00008200, 0x00000000, 0x00808002,};int PC1[] = { 0x10000000, 0x00000000, 0x00100000, 0x00000000, 0x00001000, 0x00000000, 0x00000010, 0x00000000, 0x00000000, 0x00010000, 0x00000000, 0x01000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x20000000, 0x00000000, 0x00200000, 0x00000000, 0x00002000, 0x00000000, 0x00000020, 0x00000000, 0x00000000, 0x00020000, 0x00000000, 0x02000000, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x40000000, 0x00000000, 0x00400000, 0x00000000, 0x00004000, 0x00000000, 0x00000040, 0x00000000, 0x00000000, 0x00040000, 0x00000000, 0x04000000, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0x00000000, 0x00800000, 0x00000000, 0x00008000, 0x00000000, 0x00000080, 0x00000000, 0x00000000, 0x00080000, 0x00000000, 0x08000000, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0x01000000, 0x00000000, 0x00010000, 0x00000000, 0x00000100, 0x00000000, 0x00000000, 0x00000100, 0x00000000, 0x00001000, 0x00000000, 0x00100000, 0x00000000, 0x10000000, 0x00000000, 0x00000000, 0x02000000, 0x00000000, 0x00020000, 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000200, 0x00000000, 0x00002000, 0x00000000, 0x00200000, 0x00000000, 0x20000000, 0x00000000, 0x00000000, 0x04000000, 0x00000000, 0x00040000, 0x00000000, 0x00000400, 0x00000000, 0x00000000, 0x00000400, 0x00000000, 0x00004000, 0x00000000, 0x00400000, 0x00000000, 0x40000000, 0x00000000, 0x00000000, 0x08000000, 0x00000000, 0x00080000, 0x00000000, 0x00000800, 0x00000000, 0x00000000, 0x00000800, 0x00000000, 0x00008000, 0x00000000, 0x00800000, 0x00000000, 0x80000000, 0x00000000, 0x00000000,};int PC2[] = { 0x00000000, 0x20000000, 0x00000000, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00040000, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x02000000, 0x00000001, 0x00000000, 0x00000080, 0x00000000, 0x00000000, 0x00100000, 0x00000000, 0x00000000, 0x00000000, 0x08000000, 0x00000000, 0x40000000, 0x00000000, 0x00200000, 0x00000008, 0x00000000, 0x00000000, 0x10000000, 0x00000000, 0x04000000, 0x00000000, 0x00080000, 0x00000000, 0x80000000, 0x00000040, 0x00000000, 0x00000000, 0x00400000, 0x00000000, 0x00000000, 0x00000004, 0x00000000, 0x00000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x08000000, 0x00000000, 0x00000100, 0x00000000, 0x02000000, 0x00000000, 0x00010000, 0x00000000, 0x04000000, 0x00000000, 0x00400000, 0x00000000, 0x00001000, 0x00000000, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00100000, 0x00000000, 0x20000000, 0x00000000, 0x00020000, 0x00000000, 0x00000200, 0x00000000, 0x80000000, 0x00000000, 0x00800000, 0x00000000, 0x00002000, 0x00000000, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00040000, 0x00000000, 0x00000400, 0x00000000, 0x00200000, 0x00000000, 0x00000000, 0x00000000, 0x00080000, 0x00000000, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00008000, 0x00000000, 0x00000800, 0x00000000, 0x01000000, 0x00000000, 0x00000000, 0x00020000, 0x00000002, 0x00000000, 0x00000020, 0x00000000, 0x00000000, 0x00010000,}; static extra;char E[48]; /* 0x255c4 */ char *crypt(passwd, salt) /* 0x68f8 */ char *passwd, *salt;{ int temp, l8; register i, j; register c; /*d7, d6, d5*/ static char iobuf[10]; /* 0x27f34 */ static unsigned x27f44; static unsigned x27f48; x27f44 = 0; x27f48 = 0; for( i = 0; i < 48; i++) E[i] = e[i]; for(i = 0; (c = *passwd) && (i < 32); i++, passwd++) for(j = 0; j < 7; j++, i++) { l8 = (c >> (6 - j)) & 01; x27f44 |= (l8 << (31 - i)); } for (i = 0; (c = *passwd) && (i < 32); i++, passwd++) for(j = 0; j < 7; j++, i++) { l8 = (c >> (6 - j)) & 01; x27f48 |= (l8 << (31 - i)); } compkeys(&x27f44, 0); for(i=0;i<2;i++){ c = *salt++; iobuf[i] = c; if(c>'Z') c -= 6; if(c>'9') c -= 7; c -= '.'; for(j=0;j<6;j++){ if((c>>j) & 01){ temp = E[6*i+j]; E[6*i+j] = E[6*i+j+24]; E[6*i+j+24] = temp; } } } mungE(); x27f44 = 0; x27f48 = 0; des(&x27f44, &x27f44); ipi(&x27f44, &x27f44); for(i=0; i<11; i++){ c = x27f44 >> 26; x27f44 = x27f44 << 6; x27f44 |= x27f48 >> 26; x27f48 = x27f48 << 6; c += '.'; if(c > '9') c += 7; if(c > 'Z') c += 6; iobuf[i+2] = c; } iobuf[i+2] = 0; if(iobuf[1] == 0) iobuf[1] = iobuf[0]; return(iobuf);} int E_H[8][16]; /* 0x251c4 */int E_L[8][16]; /* 0x253c4 */mungE() /* 0x6b2a */{ register i, j, d5, d4, d3, d2; register *a5, *a4; int l28; for(i = 0; i < 8; i++) { a5 = E_L[i]; a4 = E_H[i]; for(j = 0; j < 16; j++) { *a5++ = 0; *a4++ = 0; } } for (j = 0; j < 32; j++) { d2 = 1 << (31 - j); d3 = 31 - E[j]; d4 = 1 << (d3 & 3); a5 = E_L[d3 >> 2]; for (i = 1; i < 16; i++) if (i & d4) a5[i] |= d2; } for (j = 32; j < 48; j++) { d2 = 1 << (63-j); d3 = 31 - E[j]; d4 = 1 << (d3 & 3); a5 = E_H[d3 >> 2]; for (i = 1; i < 16; i++) if (i & d4) a5[i] |= d2; }} int keys_H[16], keys_L[16]; /* 0x255f4,0x25634 */ compkeys(iptr, key) /* 0x6c04 */ int *iptr;{ int i, l8, l12, l16; register d7, d6, d5, d4, d3, d2; d7 = 0; d6 = 0; for (d3 = 0, d2 = iptr[1]; d3 < 64; d2*=2, d3+=2) if (d2 < 0) { d7 |= PC1[d3]; d6 |= PC1[d3+1]; } for (d2 = iptr[0]; d3 < 128; d2*=2, d3+=2) if (d2 < 0) { d7 |= PC1[d3]; d6 |= PC1[d3+1]; } for (i = 0; i < 16; i++) { for (d2 = 0; d2 < shift[i]; d2++) { l16 = l12 = l8 = 0; if (d7 < 0) l8 = 16; if (d7 & 0x08) l12 = 256; if (d6 < 0) l16 = 1; d7 = ((d7 << 1) & ~0x10) | l8 | l16; d6 = (d6 << 1) | l12; } d5 = 0; d4 = 0; for (d3=0, d2=d6; d3 < 64; d2*=2, d3+=2) { if (d2 < 0) { d5 |= PC2[d3]; d4 |= PC2[d3+1]; } } for (d2=d7; d3 < 128; d2*=2, d3+=2) { if (d2 < 0) { d5 |= PC2[d3]; d4 |= PC2[d3+1]; } } if (key) { keys_L[15-i] = d5; keys_H[15-i] = d4; } else { keys_L[i] = d5; keys_H[i] = d4; } } } setupE(){ int i, j, l12; for(i = 0; i < 8; i++) for(j = 0; j < 16; j++) E_H[i][j] = E_H[i][j] = 0; for (j = 0; j < 32; j++) { l12 = 31 - E[j]; for (i = 0; i < 16; i++) if ((1 << (l12 % 4)) & i) E_L[l12 / 4][i] |= (1 << (31 - j)); } for (j = 32; j < 48; j++) { l12 = 31 - E[j]; for (i = 0; i < 16; i++) if ((1 << (l12 % 4)) & i) E_H[l12 / 4][i] |= (1 << (63 - j)); }} des(adr1, adr2) int *adr1, *adr2;{ int l4, *l8, *l12, l16; register unsigned d7; register unsigned d6, d5; register d4, d3, d2; l4 = adr1[0]; d2 = adr1[1]; for (l16 = 0; l16 < 25; l16++) { l8 = keys_L; l12 = keys_H; for( d3 = 0; d3 < 16; d3++) { d5 = d2; d7 = E_L[0][d4 = d5 & 0x0f]; d6 = E_H[0][d4]; d5 >>= 4; d7 |= E_L[1][d4 = (d5 & 0x0f)]; d6 |= E_H[1][d4]; d5 >>= 4; d7 |= E_L[2][d4 = (d5 & 0x0f)]; d6 |= E_H[2][d4]; d5 >>= 4; d7 |= E_L[3][d4 = (d5 & 0x0f)]; d6 |= E_H[3][d4]; d5 >>= 4; d7 |= E_L[4][d4 = (d5 & 0x0f)]; d6 |= E_H[4][d4]; d5 >>= 4; d7 |= E_L[5][d4 = (d5 & 0x0f)]; d6 |= E_H[5][d4]; d5 >>= 4; d7 |= E_L[6][d4 = (d5 & 0x0f)]; d6 |= E_H[6][d4]; d5 >>= 4; d7 |= E_L[7][d4 = (d5 & 0x0f)]; d6 |= E_H[7][d4]; d7 ^= *l8++; d6 ^= *l12++; d5 = SPO[(d6 >> 16) & 0x3f]; d5 |= SP1[(d6 >> 22) & 00x3f]; d5 |= SP2[((d7 & 0x03) << 4) | ((d6 >> 28) & 0x0f)]; d5 |= SP3[(d7 >> 2) & 0x3f]; d5 |= SP4[(d7 >> 8) & 0x3f]; d5 |= SP5[(d7 >> 14) & 0x3f]; d5 |= SP6[(d7 >> 20) & 0x3f]; d5 |= SP7[(d7 >> 26) & 0x3f]; { d6 = 14; l4 = d2; d2 = d6 ^ d5; } } d5 = l4; l4 = d2; d2 = d5; } adr2[0] = l4; adr2[1] = d2;}ipi(iptr1, iptr2) int *iptr1, *iptr2;{ register unsigned d7, d6, d5; d5 = iptr1[0]; d7 = ipi_L0[d5 & 0x0f]; d5 = >>= 4; d6 = ipi_H1[d5 & 0x0f]; d5 >>= 4; d7 |= ipi_L2[d5 & 0x0f]; d5 >>= 4; d6 |= ipi_H3[d5 & 0x0f]; d5 >>= 4; d7 |= ipi_L4[d5 & 0x0f]; d5 >>= 4; d6 |= ipi_H5[d5 & 0x0f]; d5 >>= 4; d7 | ipi_L6[d5 & 0x0f]; d5 >>=4; d6 |= ipi_H7[d5 & 0x0f]; d5 = iptr1[1]; d7 |= ipi_L8[d5 & 0x0f]; d5 >>= 4; d6 |= ipi_H9[d5 & 0x0f]; d5 >>= 4; d7 |= ipi_La[d5 & 0x0f]; d5 >>= 4; d6 |= ipi_Hb[d5 & 0x0f]; d5 >>=4; d7 |= ipi_Lc[d5 & 0x0f]; d5 >>= 4; d6 |= ipi_Hd[d5 & 0x0f]; d5 >>= 4; d7 |= ipi_Le[d5 & 0x0f]; d5 >>= 4; d6 |= ipi_Hf[d5 & 0x0f]; iptr2[0] = d7; ipyr2[1] = d6;}/* * Local variables: * compile-command: "make" * comment-collumn: 48 * End: */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -