Password in chiaro dentro l'eseguibile?

di il
6 risposte

Password in chiaro dentro l'eseguibile?

Ciao a tutti , ho fatto un brevissimo programma in c++ per passare una password ad un programma in .net ,il programma funziona ma aprendo l'eseguibile c++ con notepad sono ancora visibili i caratteri in chiaro della password ( "cucupaloma" ) ,posso passare dei parametri al compilatore per trasformare in binario anche i caratteri ora in chiaro? , grazie, ciao

#include <iostream>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char** argv) {	
   char path[]="C:\\Users\\test\\source\\repos\\ConsoleApp2\\bin\\Debug\\ConsoleApp2.exe cucupaloma";
   system(path);
	return 0;
}

6 Risposte

  • Re: Password in chiaro dentro l'eseguibile?

    La domanda sorge spontanea:

    ma che stai a di?



    Perche' dovresti passare una password ad un sottoprocesso cablandola nel codice?
    Inoltre, se il processo ricevente la vuole in chiaro, la devi passare in chiaro.

    Quello che puoi fare e'

    cifrarla all'esterno
    passarla cifrata al TUO eseguibile
    il TUO eseguibile la decifra, la passa in chiaro al programma chiamato.

    la ""crittografia in chiave pubblica"" e' ESATTAMENTE quello che serve: la chiave di DECIFRAZIONE la puoi tranquillamente cablare nel codice perche' e' diversa dalla chiave di cifratura.
  • Re: Password in chiaro dentro l'eseguibile?

    surfernet ha scritto:


    Ciao a tutti , ho fatto un brevissimo programma in c++ per passare una password ad un programma in .net ,il programma funziona ma aprendo l'eseguibile c++ con notepad sono ancora visibili i caratteri in chiaro della password ( "cucupaloma" ) ,posso passare dei parametri al compilatore per trasformare in binario anche i caratteri ora in chiaro? , grazie, ciao
    
    #include <iostream>
    
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    
    int main(int argc, char** argv) {	
       char path[]="C:\\Users\\test\\source\\repos\\ConsoleApp2\\bin\\Debug\\ConsoleApp2.exe cucupaloma";
       system(path);
    	return 0;
    }
    
    Se vuoi fare una cosa veloce (richiede C++14)
    
    #include <iostream>
    
    struct __password {
        char p[30];
    };
    
    constexpr __password my_pass(){
        __password x = {"cucupaloma"};
        // ENCRYPT
        for(int i = 1; i <= sizeof(x.p); i++)
            x.p[i] ^= i;
        return x;
    }
    
    __password pass = my_pass();
    
    int main() {	
       char path[]= "C:\\Users\\test\\source\\repos\\ConsoleApp2\\bin\\Debug\\ConsoleApp2.exe";
       // DECRYPT
       for(int i = 1; i <= sizeof(pass.p); i++)
           pass.p[i] ^= i;   
       printf("%s %s", path, pass.p);
       return 0;
    }
    
    Così la password non la dovresti più vedere nel binario (allo stesso modo potresti offuscare tutto il path)
  • Re: Password in chiaro dentro l'eseguibile?

    Grazie 1000 Weierstrass
  • Re: Password in chiaro dentro l'eseguibile?

    XWeierstrass : ho compilato il tuo codice ed in realtà aprendo l'eseguibile con notepad si trova ancora la stringa cucupaloma anche se tra "cucupalo" ed "ma" si trova un carattere che sembra un quadratino con dentro un punto di domanda, dovevo settare qualcos'altro? , grazie
  • Re: Password in chiaro dentro l'eseguibile?

    Hai ragione, gcc (presumo) si memorizza comunque gli spezzoni di 32 o 64 bit. Non capisco perché si salvi nel binario tutto questo, dato che è una funzione a compile-time, ma vabbé.

    Allora fatti un programma a parte che ti genera la password criptata, tipo
    #include <iostream>
    
    int main() {	
       char pass[] = "cucupaloma";
       // ENCRYPT
       for(int i = 1; i <= sizeof(pass); i++)
           pass[i-1] ^= i & 0x7F;   
       printf("%s", pass); // bw`qugkgdk
       return 0;
    }
    Dopodiché scrivi direttamente la password criptata nel tuo programma
    
    #include <iostream>
    
    char pass[] = "bw`qugkgdk";
    
    int main() {	
       char path[] = "C:\\Users\\test\\source\\repos\\ConsoleApp2\\bin\\Debug\\ConsoleApp2.exe";
       // DECRYPT
       for(int i = 1; i <= sizeof(pass); i++)
           pass[i-1] ^= i & 0x7F;   
       printf("%s %s", path, pass);
       return 0;
    }
    
    Volendo, come funzione lineare per criptare/decriptare, puoi usare qualcosa di diverso (che sai solo tu), ad esempio
    
       for(int i = 1; i <= sizeof(pass); i++)
           pass[i-1] ^= (2*i + 7) & 0x7F;  
    
  • Re: Password in chiaro dentro l'eseguibile?

    Ti ringrazio sinceramente ,
Devi accedere o registrarti per scrivere nel forum
6 risposte