Domanda VI PREGO AIUTO

Stato
Discussione chiusa ad ulteriori risposte.
X

xWasd

Allora volevo sapere se si possono criptare (in un linguaggio di programmazione qualsiasi) i file rendendoli comunque eseguibili. Vorrei fare un piccolo programma di criptazione...ne ho creato uno in Visual Basic, che funziona circa così:
EXE NORMALE-------> Array di byte [100,2,3,82] --------->aggiunge 10 a ognuno --------> [110,12,13,92] ------> EXE CRIPTATO

EXE CRIPTATO -------> Array di byte[110,12,13,92]------------->toglie 10 a ognuno ----------->[100,2,3,82]-------> EXE NORMALE

Il problema è che il file criptato non si può aprire, e siccome io sto provando a programmare una backdoor (ovviamente la proverò solo su sistemi miei, è una "sfida" con me stesso, voglio riuscire a crearne una da me), non va bene. Gli antivirus non la rilevano quando è criptata, ma quando si decripta per eseguirsi, la potrebbero beccare!
Mi spiego meglio, provo a fare uno "schema" della mia backdoor:

Non rilevato ---> MAIN.EXE [criptato.exe] //il file MAIN.EXE contiene nelle risorse il file criptato.exe (la backdoor criptata).
Una volta avviato, MAIN.EXE, decripta "criptato.exe" e lo sposta sull'hard disk, ed è a questo il punto critico

La mia domanda è: è possibile criptare l'EXE mantenendolo comunque eseguibile? Se si in che linguaggio? Ho cercato molto su internet ma non ho trovato niente che mi sia stato di aiuto
 
Non è assolutamente possibile criptare un EXE mantenendolo tale in quanto l'exe come qualsiasi altro programma letto a livello macchina non è altro che una sequenza di 0 e 1, ovvero assenza e presenza di corrente 5 o 12 volt, se tu lo cripti alteri i bit e quindi non è più ciò che era da non criptato, il fatto è che il programma va decriptato in memoria ram ed eseguito senza copiarlo su HDD, cosi facendo sfugge sia all'analisi statica che a quella euristica (dell'AV) che non è quasi mai efficacie
 
Non è assolutamente possibile criptare un EXE mantenendolo tale in quanto l'exe come qualsiasi altro programma letto a livello macchina non è altro che una sequenza di 0 e 1, ovvero assenza e presenza di corrente 5 o 12 volt, se tu lo cripti alteri i bit e quindi non è più ciò che era da non criptato, il fatto è che il programma va decriptato in memoria ram ed eseguito senza copiarlo su HDD, cosi facendo sfugge sia all'analisi statica che a quella euristica (dell'AV) che non è quasi mai efficacie
Si ma come si fa a decriptarlo e aprirlo in memoria?
 
Uno dei metodi più semplici per criptarlo e decriptarlo è lo XOR, scegli una password che può essere anche di 1 o 2 lettere e fai la comparazione XOR per criptarlo e lo infili nel programma con lo stub, già criptato e con la password scelta dentro, in fase di esecuzione del programma inizializzi uno spazio vuoto in memoria o utilizzi lo stesso spazio in cui è contenuto il codice criptato per non appesantire ulteriormente il programma, poi lo decripti sempre con la stessa password e comparazione XOR aprendo un processo e eseguendo il programma, su internet si trova come avviare un processo da un altro, non posso mica scriverti il programma io.
 
Uno dei metodi più semplici per criptarlo e decriptarlo è lo XOR, scegli una password che può essere anche di 1 o 2 lettere e fai la comparazione XOR per decriptarlo e lo infili nel programma con lo stub già criptato e con la password scelta dentro, in fase di esecuzione del programma inizializzi uno spazio vuoto in memoria o utilizzi lo stesso spazio in cui è contenuto il codice criptato per non appesantire ulteriormente il programma, poi lo decripti sempre con la stessa password e comparazione XOR aprendo un processo e eseguendo il programma, su internet si trova come avviare un processo da un altro, non posso mica scriverti il programma io.
Ok grazie, non volevo che tu scrivessi il codice eh
 
Ultima modifica da un moderatore:
Allora, in c++ ho trovato la funzione CreateProcess(), ma richiede la path di un file..e siccome "non c'è l'ho" come faccio? Oppure devo mettere come path il file criptato e decriptarlo poi? Come faccio a modificare un processo?
 
Ad ogni modo io ti consiglio di iniettare programmi già esistenti e considerati attendibili dagli utenti, sfrutta le code caves
 
Non per forza: è possibile utilizzare tranquillamente il C/C++ utilizzando opportuni cast e puntatori a funzione.
Potresti entrare più nel profondo della cosa? Mi interessa perchè io ho sempre giocherellato con l'assembly e i jump nel codice, non ero a conoscenza del fatto che si potesse fare come dici tu.
 
Basta creare un array globale di char che conterrà il codice.
C:
char code[1000];

typedef int (*chiamato)(int, char**);
int main(int argl, char** args){
//Qui le manipolazioni necessarie al codice
int ret;
chiamato val=(chiamato)code;
ret=val(argl, args);
return ret;
}

Questo codice dovrebbe funzionare, sempre che non sia bloccata l'esecuzione nella sezione data
 
Stato
Discussione chiusa ad ulteriori risposte.