Cisco type 7 password decryptor

Discussion in 'Избранное' started by ShadOS, 17 Jan 2008.

  1. ShadOS

    ShadOS ы

    Joined:
    11 Feb 2007
    Messages:
    667
    Likes Received:
    351
    Reputations:
    413
    Code:
    #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
     
    #1 ShadOS, 17 Jan 2008
    Last edited: 17 Jan 2008
    11 people like this.
  2. xXvladXx

    xXvladXx Elder - Старейшина

    Joined:
    28 Oct 2007
    Messages:
    97
    Likes Received:
    54
    Reputations:
    5
    вот такая штука оч сильно нужна была на ССh7 для хак квеста(последние задание: хакнуть цицку и поиметь пас)
     
  3. ShadOS

    ShadOS ы

    Joined:
    11 Feb 2007
    Messages:
    667
    Likes Received:
    351
    Reputations:
    413
    Ага, если бы народ внимательно смотрел моё конкурсное видео с последним этапом у них прорблем не возникло бы. Я в видео по косточкам разобралл как это делать, причём когда делал не знал о том,что последний этап будет один в один по моему видео.