[Pluto-help] Ecco il mio script in C : Come fare ?

pacmo a libero.it pacmo a libero.it
Mer 14 Nov 2001 23:23:00 CET


questo programmino in C dovrebbe servire a decriptare una password in router
che conosco benissimo per l'esattezza la password è 94giov peccato che con
l'istruzione service password-encryption e con la perdita della chiave non
si riesca più ad entrare.
Ora il programma in C è il seguente :
#include <stdio.h>

#include <ctype.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

};



char pw_str1[] = "password 7 ";

char pw_str2[] = "enable-password 7 ";



char *pname;



cdecrypt(enc_pw, dec_pw)

char *enc_pw;

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(-1);



        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(-1);

        }



        dec_pw[++i / 2] = 0;



        return(0);

}



usage()

{

        fprintf(stdout, "Usage: %s -p <encrypted password>\n", pname);

        fprintf(stdout, "       %s <router config file> <output file>\n",
pname);



        return(0);

}



main(argc,argv)

int argc;

char **argv;



{

        FILE *in = stdin, *out = stdout;

        char line[257];

        char passwd[65];

        unsigned int i, pw_pos;



        pname = argv[0];



        if(argc > 1)

        {

                if(argc > 3) {

                        usage();

                        exit(1);

                }



                if(argv[1][0] == '-')

                {

                        switch(argv[1][1]) {

                                case 'h':

                                usage();

                                break;



                                case 'p':

                                if(cdecrypt(argv[2], passwd)) {

                                        fprintf(stderr, "Error.\n");

                                        exit(1);

                                }

                                fprintf(stdout, "password: %s\n", passwd);

                                break;



                                default:

                                fprintf(stderr, "%s: unknow option.",
pname);

                        }



                        return(0);

                }



                if((in = fopen(argv[1], "rt")) == NULL)

                        exit(1);

                if(argc > 2)

                        if((out = fopen(argv[2], "wt")) == NULL)

                                exit(1);

        }



        while(1) {

                for(i = 0; i < 256; i++) {

                        if((line[i] = fgetc(in)) == EOF) {

                                if(i)

                                        break;



                                fclose(in);

                                fclose(out);

                                return(0);

                        }

                        if(line[i] == '\r')

                                i--;



                        if(line[i] == '\n')

                                break;

                }

                pw_pos = 0;

                line[i] = 0;



                if(!strncmp(line, pw_str1, strlen(pw_str1)))

                        pw_pos = strlen(pw_str1);



                if(!strncmp(line, pw_str2, strlen(pw_str2)))

                        pw_pos = strlen(pw_str2);



                if(!pw_pos) {

                        fprintf(stdout, "%s\n", line);

                        continue;

                }



                if(cdecrypt(&line[pw_pos], passwd)) {

                        fprintf(stderr, "Error.\n");

                        exit(1);

                }

                else {

                        if(pw_pos == strlen(pw_str1))

                                fprintf(out, "%s", pw_str1);

                        else

                                fprintf(out, "%s", pw_str2);



                        fprintf(out, "%s\n", passwd);

                }

        }



}

Ho salvato il file con il nome cisco.c cosa debbo fare esattamente per
compilarlo e lanciarlo ?
Se lancio gcc -o cisco.c  mi risponde No input file
Se lo lancio senza -o mi restituisce un file a.out (eseguibile ?)
Cosa debbo fare ?
Mi spiace, ma non so nulla di C, posso fare miracoli in Cobol, trovare
casini in ASP ed a volte inPhp, ma di C NULLA , non so neppure come si fa a
compilare ed a lanciare
Grazie
Pier Antonio







More information about the pluto-help mailing list