delucidazione Protettore?

Stato
Discussione chiusa ad ulteriori risposte.

simogeta

Utente Silver
23 Aprile 2008
49
10
0
68
Salve,
oggi mi è venuta un idea folle, crare una sprta di protettore (come ASProtect, armadilo, ...) solo un po più semplice, come posso fare?

Es. Dato un file eseguibile scelto dall'utente il programma lo protegge con IsDebuggerPresent().

Tanto per farvi un esempio (anche se poi olly IsDebuggerPresent lo bypassa con un plugin) sapreste dirmi teoricamante com si procede?


Saluti,
Simogeta.

PS: Ed anche in che linguaggio scriverlo
 
un protettore cosa è? è come un packer ma con la differenza che contiene tips antidebugging :)

Non so il tuo grado di esperienza con i packer ma se sei alla prime armi, non è facile fare un unpacker.
E' necessario conoscere bene il formato PE e in particolare la capacità di leggere e modificare i suoi dati.
Mi sento di consigliarti di partire da un packer come UPX e studiarne il funzionamento.
probabilmente la parte più difficile è fare il rebuild della IT, ma con un po di impegno si fa senza problemi.

come documento sul formato PE il più completo rimane tutt'oggi questo LINK

Ma i miei cosigli non finiscono cosi sull'astratto :)
valutiamo tutto, se un packer/protector è difficile potrebbe risultati piu' facile realizzare un cripter.
in pratica un protettore che invece di comprimere il codice e proteggerlo, lo cripta e lo protegge, pertanto azione piu' semplice da fare.

Infine di to una soluzione che ho fatto io :)
ho creato un protector che fa questo:
-genera un loader
-prende l'exe originale e lo cripta
-incorpora l'exe criptato nel loader

quando l'exe protetto parte succede questo:
-il loader va in memoria
-legge il contenuto protetto dell'exe
-lo decripta e lo piazza in memoria
-legge tutte le caratteristiche dell'exe protetto:
IMAGE_DOS_HEADER
IMAGE_NT_HEADERS
IMAGE_SECTION_HEADER
PROCESS_INFORMATION
ecc... ecc....

-crea un un processo in modo sospeso(CREATE_SUSPENDED)
-leggo la memoria del processo decriptato
-uso VirtualAllocEx e gli passo i valori del nuovo processo(ImageBase, SizeOfImage, cotenuti negli OptionalHeader) in modo da allocare lo spazio in memoria.
facendo questo VirtualAllocEx mi ritorna l'ImageBase del nuovo processo. Se l'ImageBase fosse = 0 allora qualcosa è andato storto..
-a questo punto sistemo e riscrivo tutte le sezioni dell'exe decriptato dentro il nuovo processo (ancora sospeso)
-sistemo il contex e l'OEP
-infine eseguo il Resume del Thread e cosa succede?
parte l'eseguibile protetto :)

detta in due parole parte il programma, genera un processo sospeso, tale processo viene totalmente sostituito da un altro e poi rilasciato.

e intanto nel mezzo ci puoi piazzare tips di protezione :)

io una cosa cosi' te la posso scrivere in asm o VB (praticamente un miracolo), in altri linguaggi non mi sono mai cimentato... anche se da C e asm passa un soffio.
Predator
 
Stato
Discussione chiusa ad ulteriori risposte.