Code Injection con CreateRemoteThread

Stato
Discussione chiusa ad ulteriori risposte.

Frk7

Utente Silver
23 Ottobre 2007
0
0
0
59
Ciao a tutti,

provengo da inforge (xD) e volevo fare una domanda agli esperti di questo forum (non siate timidi xD).



Ho creato un mini backdoor, DietroLaPorta++, tanto per imparare un po' il c++, e mi sono trovato davanti un grosso problema: nascondere l'eseguibile dal task manager.

Ho letto su internet che posso creare una dll ed iniettarla dentro un processo, il che mi è riuscito...

Però (e purtroppo c'è sempre un però) mi scoccio a mettere le varie dll di dietrolaporta (keylogger, infezione sistema, e ricezione/esecuzione dei comandi) dentro un eseguibile con resource hacker e programmarlo per estrarle e iniettarle.

Però con la CreateRemoteThread al posto di iniettare il codice che manda in esecuzione le varie dll, posso direttamente iniettare del codice (il che è comodissimo!)

Il percorso da seguire se non erro è:

Trovare il pid
Aprire il processo con OpenProcess
Allocare della memoria con VirtualAllocEx
Scrivere il codice dentro la memoria del processo con WriteProcessMemory
Eseguire il codice con CreateRemoteThread

Quindi ho fatto un programma tanto per testarlo:



Codice:
DWORD WINAPI prova()
{
MessageBox (0, "lalalala!\n", "prova", MB_ICONINFORMATION);
                      }


int main()
{
DWORD size=//non ho idea di come calcolare il "peso" di una funzione ma ho messo 4096 tanto per provare


DWORD pid=funzionechetrovailpid("calc.exe");

HANDLE proc= OpenProcess( PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_VM_READ, FALSE, pid );


DWORD *pcode=(PDWORD) VirtualAllocEx(proc, 0, size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);

WriteProcessMemory(proc, pcode, (void*)prova, size, NULL);


HANDLE thread = CreateRemoteThread(proc, NULL, 0, (LPTHREAD_START_ROUTINE)pcode, NULL, 0, NULL);





}
come compilatore uso MinGW, e per compilare va liscio, al massimo vuole il cast di qualche variabile, il problema si pone quando va in esecuzione il codice...


Se ci sono blasfemie vi prego non picchiatemi! xD
Scherzo, sono sicuro che per molti di voi sarà un gioco da ragazzi risolvere l'arcano mistero, ma io ho solo 17 anni e non ho ancorca avuto modo di approfondire questo "mondo" :)


Vi ringrazio tutti anticipatamente :)
 
Ti ringrazio, gli do un occhiata appena torno a casa ;)

EDIT: Gli ho dato un occhiata, credo sia una delle tante cose che compila solo sotto visual c :(
 
sarebbe almeno da spiegare dove non funziona.... riporta il valore che restituiscono le funzioni (le API)...
 
Infatti non ti ho dato quel link per scopiazzare il suo codice, te l' ho dato per farti capire il metodo che lui ha utilizzato per nascondere il processo al sistema. E' un driver che si integra al sistema e modifica le CALL di windows per nascondere il processo. E' appunto il sistema che utilizzano i rootkit. :pattmg:
 
Sarò sincero, non ho mai scritto un driver per windows, e non ho idea di come implementare quel codice col mio...

il sorgente è:
http://pastebin.com/EHyQv8RK
il GetLastError dopo il createremotethread mi restituisce 2

per quanto riguarda i valori che restituiscono le api non ho capito...intendi i puntatori alle aree di memoria?


grazie e perdonate ancora la mia ignoranza :)
 
il valore di pid dopo la chiamata a funzione_che_trova_il_pid
il valore di proc dopo openProcess
il valore di pcode e di *pcode dopo virtualAlloc
il valore che restituisce WriteProcessMemory
il valore di thread dopo CreateRemoteThread
 
pid dopo trovapid: 2560
proc dopo openprocess: 48
pcode=3735552 e *pcode=3080269 dopo virtualallocex
valore restituito da writeprocessmemory: 1
thread dopo createremotethread: 52
 
prova con
HANDLE thread = CreateRemoteThread(proc, NULL, 0, (LPTHREAD_START_ROUTINE)*pcode, NULL, 0, NULL);
 
Non fa vedere la seconda pagina della discussione!?

EDIT: Se cancello questo post non fa più vedere la seconda pagina
 
Eccomi, scusate, ma ho provato a visitare il sito ultimamente ed era chiuso.
Comunque, ancora non sono riuscito a risolvere, per accomodare ho messo tre threads in una dll che poi metto nelle risorse del file eseguibile, che poi viene estratta ed il suo codice iniettato dentro un processo....
Insomma un bel casino, che fra l'altro viene rilevato da qualsiasi antivirus.

Ho provato anche a compilare col vc++ ma non ne vuole proprio sapere...
 
Stato
Discussione chiusa ad ulteriori risposte.