Salve amici!!!
Vorrei chiedere se qualcuno di Voi è interessato a scrive insieme a me un passo alla volta un programma di protezione, il cui risultato finale dovrebbe essere quello di:
-) sfuggire ai debugger
-) non essere "dumpabile"
-) non essere rilevato dagli antivirus (che voi mi insegnate ultimamente danno un numero esagerato di falsi positivi...)
-) essere in grado di funzionare anche su macchine con il controllo DEP attivato
-) etc.....
Però mi spiego meglio: io ho diverse idee ed ho già raccolto diverso codice, però ho dei grossi problemi nel passare dalle idee alla codifica, ho pensato quindi che una costruzione del programma da zero, potrebbe essere un buon esercizio per un newbie che potrebbe vedere come sorge il programma un po' alla volta, mentre chi è piu' esperto potrebbe dare una supervisione e dei consigli per l'ottimizzione, etc.
Insomma farne una specie di mini-progetto da seguire in un gruppo di persone collaborando attivamente.... Tra l'altro ho proposto di farlo in C, linguaggio che mi pare appropriato per chi è all'inizio, ma nel frattempo l'argomento mi pare abbastanza stimolante, visto che si tratta in parte anche di far fare le "acrobazie" a certe API di Windows.
Pertanto avrei identificato un modello di esecuzione ispirandomi ad un semplice packer di cui ho provato a ricavarne il funzionamento debuggandolo con Ollydbg, vi spiego cosa ne è venuto fuori:
Ho trovato solo un sorgente di un packer scritto in C, ma non fa al caso mio: il suo stub non fa altro che decompattare in un file temporaneo e poi eseguire tale file.
C'era, è vero un sorgente scritto da un certo Poke che invece decompattava in memoria, ma è scritto in Delphi ed a parte il fatto che non lo capisco, non possiedo nemmeno il compilatore.
In tutta questa faccenda però non mi importa della compressione e/o delle eventuali protezioni.... a me interessa capire una cosa sola (inizialmente...):
COME SI FA A CARICARE UN EXE IN MEMORIA SENZA AVERLO FISICAMENTE SU DISCO?
---------------------------------------------------------------------------------------------------------
Mi sono armato di tanta pazienza ed ho esaminato forse un centinaio di programmi di packing ed ho cercato di capire il funzionamento dello stub..... e ho trovato uno il cui autore ammette che lo stub è scritto in C è che non è a sua volta protetto, difatti l'output di Ollydbg è piuttosto cristallino (almeno per un esperto).
Mi pare di capire quanto segue:
-) il file che d'ora in poi chiamerò packed.exe è formato dallo stub.exe (circa 3kb) e dal programma che gli abbiamo fatto packare che chiamerò original.exe.
-) per ottenere packed.exe si fa così: si prende un qualsiasi file exe (ad es. master.exe) e.......
c:>copy /b stub.exe+master.exe packed.exe
-) Insomma, lo stub è sempre uguale, basta accodargli un exe e lui (lo stub) sa esattamente come fare per eseguirlo in memoria senza swappare sull'hd
-)Ecco i passi che compie (almeno cio' che io sono riuscito a capire da Olly), almeno quelli principali:
si supponga: stub.exe lungo 3.000 bytes, master.exe 17.000 bytes
1) Ricava il nome del file ed il percorso, ad es.: c:\packed.exe (ovvero lui stesso)
2) Ricava la lunghezza di packed.exe ------->20.000
3) Apre se stesso quale file dati in sola lettura
4) Effettua (20000-3000)=17000 e quindi carica in una zona di memoria 17000 bytes a partire dall'offset 3001 (in pratica l'intero file master.exe viene caricato in una zona di memoria)
5) Chiama CreateProcessA dandogli come parametro il dato ottenuto al punto 1): c:\packed.exe (ovvero lui stesso); il processo viene creato in forma sospesa.
6) Effettua giusto una manciata di istruzioni (almeno così a me sembra...) nel corso delle quali invoca : ReadProcessMemory, VirtualQueryex, e finalmente 2 serie di WriteProcessMemory prelevando i dati ottenuti nel precedente punto 4)...
7) Sblocca il processo testè creato, e tutto funziona master.exe sta funzionando, e NON esiste una copia di se stesso sul disco fisso!!!
*************************************************************************************************************************
Allora... a qualcuno interessa questa avventura?
Grazie per avermi letto e saluti a tutti.
Danrevella