13/09/16 18:20
Driverfury
Premessa: se questa non è la sezione adatta, chiedo ai moderatori gentilmente di spostare questo thread.
Salve a tutti,
da poco sto studiando il formato PE (Portable Executable) che, come sapete, è il formato standard di Windows per gli eseguibili e le DLL.
Ho scritto un semplice programmino Hello World in C e l'ho aperto con CFF Explorer per vedere i vari header, le sezioni ecc...
Ho notato che nell'Optional Header c'è anche l'Entry Point che è, appunto, l'indirizzo della prima istruzione che sarà eseguita del programma.
Provo a debuggare il programmino Hello World (che si chiama prova.exe) con OllyDBG e noto, con mia grande sorpresa, che prima dell'istruzione dell'entry point vengono eseguite tantissime altre istruzioni, la prima in assoluto è quella del modulo ntdll, dopodichè si passa al modulo KERNEL32 ed infine al modulo principale del mio programma (cioè modulo prova). Tra l'altro vengono eseguite varie istruzioni nel modulo prova prima di passare all'entry point.
Qualcuno sa darmi dei chiarimenti a riguardo?
Perché ho bisogno di chiarimenti?
In pratica, ho provato a scrivere un programma (in C) che:
1. prende in input il mio programma Hello World (prova.exe) e lo carica in memoria
2. inietta un codice binario puro (chiamiamolo codice1.bin) in un code cave alla fine della text section di prova.exe
3. setta l'Entry Point all'indirizzo della prima istruzione del codice iniettato
4. aumenta la virtual size della text section (perché ora c'è da considerare anche il codice iniettato)
5. cripta la text section tranne il codice iniettato
Cosa fa il codice1.bin?
1. decripta la text section
2. salta al vecchio entry point con una JMP [indirizzo vecchio entry point]
In pratica è una sorta di scantime crypter. Il problema, però, è proprio il seguente (che è il motivo per cui ho scritto questo thread):
la prima istruzione ad essere eseguita non è quella del codice iniettato, ma devono essere eseguite prima altre istruzioni della text section che però sono criptate e quindi non riconosciute come istruzioni.
Chiedo aiuto a voi utenti più esperti.
Salve a tutti,
da poco sto studiando il formato PE (Portable Executable) che, come sapete, è il formato standard di Windows per gli eseguibili e le DLL.
Ho scritto un semplice programmino Hello World in C e l'ho aperto con CFF Explorer per vedere i vari header, le sezioni ecc...
Ho notato che nell'Optional Header c'è anche l'Entry Point che è, appunto, l'indirizzo della prima istruzione che sarà eseguita del programma.
Provo a debuggare il programmino Hello World (che si chiama prova.exe) con OllyDBG e noto, con mia grande sorpresa, che prima dell'istruzione dell'entry point vengono eseguite tantissime altre istruzioni, la prima in assoluto è quella del modulo ntdll, dopodichè si passa al modulo KERNEL32 ed infine al modulo principale del mio programma (cioè modulo prova). Tra l'altro vengono eseguite varie istruzioni nel modulo prova prima di passare all'entry point.
Qualcuno sa darmi dei chiarimenti a riguardo?
Perché ho bisogno di chiarimenti?
In pratica, ho provato a scrivere un programma (in C) che:
1. prende in input il mio programma Hello World (prova.exe) e lo carica in memoria
2. inietta un codice binario puro (chiamiamolo codice1.bin) in un code cave alla fine della text section di prova.exe
3. setta l'Entry Point all'indirizzo della prima istruzione del codice iniettato
4. aumenta la virtual size della text section (perché ora c'è da considerare anche il codice iniettato)
5. cripta la text section tranne il codice iniettato
Cosa fa il codice1.bin?
1. decripta la text section
2. salta al vecchio entry point con una JMP [indirizzo vecchio entry point]
In pratica è una sorta di scantime crypter. Il problema, però, è proprio il seguente (che è il motivo per cui ho scritto questo thread):
la prima istruzione ad essere eseguita non è quella del codice iniettato, ma devono essere eseguite prima altre istruzioni della text section che però sono criptate e quindi non riconosciute come istruzioni.
Chiedo aiuto a voi utenti più esperti.
Ultima modifica effettuata da Driverfury 14/09/16 0:01
aaa