Cisco type 7 password decryptor
Код:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
char xlat[] = {
0x64, 0x73, 0x66, 0x64, 0x3b, 0x6b, 0x66, 0x6f,
0x41, 0x2c, 0x2e, 0x69, 0x79, 0x65, 0x77, 0x72,
0x6b, 0x6c, 0x64, 0x4a, 0x4b, 0x44, 0x48, 0x53,
0x55, 0x42, 0x73, 0x67, 0x76, 0x63, 0x61, 0x36,
0x39, 0x38, 0x33, 0x34, 0x6e, 0x63, 0x78, 0x76,
0x39, 0x38, 0x37, 0x33, 0x32, 0x35, 0x34, 0x6b,
0x3b, 0x66, 0x67, 0x38, 0x37, 0x64, 0x73, 0x66,
0x64, 0x3b, 0x6b, 0x66, 0x6f, 0x41, 0x2c, 0x2e,
0x69, 0x79, 0x65, 0x77, 0x72, 0x6b, 0x6c, 0x64,
0x4a, 0x4b, 0x44, 0x48, 0x53, 0x55, 0x42, 0x73,
0x67, 0x76, 0x63, 0x61, 0x36, 0x39, 0x38, 0x33,
0x34, 0x6e, 0x63, 0x78, 0x76, 0x39, 0x38, 0x37,
0x33, 0x32, 0x35, 0x34, 0x6b, 0x3b, 0x66, 0x67,
0x38, 0x37
};
char *pname;
int decrypt(unsigned char *enc_pw, unsigned char *dec_pw)
{
unsigned int seed, i, val = 0;
if (strlen(enc_pw) & 1)
return -1;
seed = (enc_pw[0] - '0') * 10 + enc_pw[1] - '0';
if (seed > 15 || !isdigit(enc_pw[0]) || !isdigit(enc_pw[1]))
return -2;
for (i = 2 ; i <= strlen(enc_pw); i++)
{
if (i !=2 && !(i & 1)) {
dec_pw[i/2 - 2] = val ^ xlat[seed++];
val = 0;
}
val *= 16;
if (isdigit(enc_pw[i] = toupper(enc_pw[i]))) {
val += enc_pw[i] - '0';
continue;
}
if (enc_pw[i] >= 'A' && enc_pw[i] <= 'F') {
val += enc_pw[i] - 'A' + 10;
continue;
}
if (strlen(enc_pw) != i)
return -4;
}
dec_pw[++i / 2] = 0;
return 0;
}
void usage()
{
fprintf(stdout, "Usage: %s <encrypted password>\n", pname);
exit (1);
}
int main(int argc, char *argv[])
{
char *passwd;
pname = argv[0];
int i;
if (argc != 2)
usage();
if ((strlen(argv[1])%2)!=0) {
fprintf(stderr, "Invalid password length - must be even!\n\n");
usage();
}
for (i=0; i<strlen(argv[1]); i++)
{
*argv[1]=toupper(*argv[1]);
if( ! ((*argv[1]>='A' && *argv[1]<='F') || (*argv[1]>='0' && *argv[1]<='9')) ) {
fprintf(stderr, "Invalid character in password found!\n");
usage();
}
}
if (!(passwd = calloc(1,(sizeof(argv[1]))%2+2)))
exit (1);
if (decrypt(argv[1], passwd)) {
fprintf(stderr, "String decryption error!\n");
free(passwd);
exit (1);
}
fprintf(stdout, "Passwd: %s\n", passwd);
free(passwd);
return 0;
}
Простенький декриптор type 7 паролей cisco ios. Писался по причине того, что кроме Cain&Abel ни одна утилита не справляется с декриптованием длинных type 7 паролей. Собирается так: gcc ./type7crack.c -o type7crack
|