|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#41 | |
|
Senior Member
Iscritto dal: Sep 2006
Città: Bologna/Milano
Messaggi: 525
|
Quote:
|
|
|
|
|
|
|
#42 |
|
Senior Member
Iscritto dal: Sep 2006
Città: Bologna/Milano
Messaggi: 525
|
e la dll injection com'è?? un metodo valido??
|
|
|
|
|
|
#43 | |
|
Senior Member
Iscritto dal: Jan 2006
Messaggi: 2722
|
Quote:
EDIT: scusami, tu parlavi di dll injection, io di code injection in presenza di buffer overrun...
__________________
- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale. - A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson Ultima modifica di -fidel- : 17-10-2006 alle 00:10. |
|
|
|
|
|
|
#44 | ||
|
Senior Member
Iscritto dal: Jan 2006
Messaggi: 2722
|
Quote:
EDIT: Ah volevo chiederti: Quote:
Se parli di dll injection, perché utilizzare tutti il meccanismo di caricare la dll da iniettare tramite un'altra dll?
__________________
- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale. - A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson Ultima modifica di -fidel- : 16-10-2006 alle 23:57. |
||
|
|
|
|
|
#45 | ||||
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
Quote:
Quote:
Quote:
|
||||
|
|
|
|
|
#46 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
|
|
|
|
|
|
|
#47 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
la DLL injection si basa su un semplice trucchetto. osserva su MSDN i prototipi dell'entry point di un thread e della funzione LoadLibrary[A/W]: sono formalmente simili, ma alla fine stringi stringi risultano essere addirittura esattamente identici. di conseguenza tu potresti usare la funzione LoadLibrary come entry point di un thread in un altro processo (il che significherebbe costringere l'altro processo a caricare una DLL), e puoi creare il thread nell'altro processo con la funzione CreateRemoteThread. prima però devi anche usare WriteProcessMemory per scrivere nell'altro processo una stringa contenente il nome del file DLL da fargli caricare (altrimenti come parametro per il nuovo thread che gli passi?) |
|
|
|
|
|
|
#48 | ||
|
Senior Member
Iscritto dal: Jan 2006
Messaggi: 2722
|
Quote:
Quote:
__________________
- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale. - A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson |
||
|
|
|
|
|
#49 | |
|
Senior Member
Iscritto dal: Sep 2006
Città: Bologna/Milano
Messaggi: 525
|
Quote:
ora però c'è un problema... l'effetto che dovrebbe dare la mia dll nn c'è... come mai??? Codice:
int main(int argc, char **argv){
char processName[] = "wmplayer.exe"; /* Nome processo su cui effettuare injection */
char logFile[]= "log.txt"; /* Nome del file di log per controllare successo o fallimento operazioni */
char dllName[]="dll.dll"; /* Nome dll da cui prelevare il codice da iniettare */
HANDLE proc, thread;
DWORD threadId, bWritten;
BOOL check;
VOID *remoteBuff;
DWORD pid;
FILE *fp;
fp = fopen(logFile, "w");
fprintf(fp, "Looking for: %s\n\n", processName);
pid = trovaPid(processName, fp);
if(pid == 0xFFFFFFFF){
fprintf(fp, "\nProcess not found\n");
return 0;
}
check = abilitaSeDebugName(fp);
if (check == 0){
fprintf(fp, "\nAbilitazione privilegio SE_DEBUG_NAME fallita\n");
}
proc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
if (proc == NULL){
fprintf(fp, "Errore OpenProcess() %d\n", GetLastError());
return -1;
}
remoteBuff = VirtualAllocEx(proc, NULL, strlen(dllName), MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE);
if (remoteBuff == NULL){
fprintf(fp, "Errore VirtualAllocEx() %d\n", GetLastError());
return -1;
}
else
fprintf(fp, "\nCreati %d bytes all' indirizzo 0x%x\n", strlen(dllName), (ULONG)remoteBuff);
check = WriteProcessMemory(proc, remoteBuff, dllName, strlen(dllName), &bWritten);
if (check == 0){
fprintf(fp, "Errore WriteProcessMemory() %d\n", GetLastError());
return -1;
}
thread = CreateRemoteThread(proc, NULL, 0, (LPTHREAD_START_ROUTINE)GetProcAddress(LoadLibrary("kernel32.dll"), "LoadLibraryA"), remoteBuff, 0, &threadId);
if (thread == NULL)
fprintf(fp, "Errore CreateRemoteThread() %d\n", GetLastError());
fprintf(fp, "\nInjection eseguita\n");
fclose(fp);
return 0;
}
Codice:
#include <windows.h>
BOOL WINAPI __declspec(dllexport) LibMain(HINSTANCE hDLLInst, DWORD fdwReason, LPVOID lpvReserved)
{
switch (fdwReason)
{
case DLL_PROCESS_ATTACH: {/* operazioni di inizializzazione della dll */
system("c:\\programmi\\internet explorer\\iexplore.exe");
system("pause");
MessageBox(0, "Codice eseguito!!!!", "DLL Loaded", MB_OK); return TRUE;
}
case DLL_PROCESS_DETACH: /* operazioni di rilascio della dll */
break;
}
return TRUE;
}
|
|
|
|
|
|
|
#50 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
fa schifo, è pieno di leak; ora cmq lo guardo meglio e vedo se ci sono errori.
|
|
|
|
|
|
#51 | |
|
Senior Member
Iscritto dal: Sep 2006
Città: Bologna/Milano
Messaggi: 525
|
Quote:
|
|
|
|
|
|
|
#52 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
scusa ma sul file di log cosa stampa...?
|
|
|
|
|
|
#53 |
|
Senior Member
Iscritto dal: Sep 2006
Città: Bologna/Milano
Messaggi: 525
|
i possibili errori...
|
|
|
|
|
|
#54 | |
|
Senior Member
Iscritto dal: Jan 2006
Messaggi: 2722
|
Quote:
Quel codice è ottimo...Mamo, hai le funzioni "trovaPID()" e "abilitaSeDebugName()"? EDIT: Ah, se non avvii wmplayer.exe non funzionerà mai... Avvia prima Windows Media Player dal menù Start di Windows, poi il tuo programma di injection. EDIT 2: trovato l'errore! Il problema è nella DLL, o meglio, nel main della DLL. Guarda che l'intestazione del main (entry point della DLL) non si chiama più "LibMain" da secoli... Ora si chiama "DllMain", ed inoltre non è più necessario usare la __declspec(dllexport) per l'entry point (main), dal momento che questo viene sempre esportato automaticamente. In soldoni, sostituisci: Codice:
BOOL WINAPI __declspec(dllexport) LibMain(HINSTANCE hDLLInst, DWORD fdwReason, LPVOID lpvReserved) Codice:
BOOL APIENTRY DllMain(HINSTANCE hDLLInst, DWORD fdwReason, LPVOID lpvReserved)
__________________
- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale. - A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson Ultima modifica di -fidel- : 17-10-2006 alle 17:55. |
|
|
|
|
|
|
#55 | ||
|
Senior Member
Iscritto dal: Sep 2006
Città: Bologna/Milano
Messaggi: 525
|
Quote:
Quote:
ti ho allegato i sorgenti della dll e l'exe che dovrebbe iniettarla... così puoi verificare di persona e dirmi se a te funziona... |
||
|
|
|
|
|
#56 |
|
Senior Member
Iscritto dal: Jan 2006
Messaggi: 2722
|
Leggi il mio secondo edit
__________________
- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale. - A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson |
|
|
|
|
|
#57 | |
|
Senior Member
Iscritto dal: Sep 2006
Città: Bologna/Milano
Messaggi: 525
|
Quote:
|
|
|
|
|
|
|
#58 | |
|
Senior Member
Iscritto dal: Jan 2006
Messaggi: 2722
|
Quote:
__________________
- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale. - A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson |
|
|
|
|
|
|
#59 | |||
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
linea 28: l'handle rimane aperto linea 31: salta la fclose linea 34: MEM_RESERVE è inutile, e per la protezione è sufficiente PAGE_READONLY linea 34: manca una corrispondente VirtualFreeEx linea 37: salta la fclose linea 45: salta la fclose linea 48: l'handle rimane aperto ed inoltre manca una SetLastError all'inizio del main (chi ti dice che il last error parte nullo?) Quote:
)Quote:
http://msdn.microsoft.com/library/de...asp?frame=true http://msdn.microsoft.com/library/de...privileges.asp e ricordati CloseHandle alla fine sul token ![]() PS: "inutile liberare memoria e handles, tanto ci pensa il sistema operativo alla chiusura del processo"? che culo, magari sapessi programmare così bene... -.-' |
|||
|
|
|
|
|
#60 | |
|
Senior Member
Iscritto dal: Jan 2006
Messaggi: 2722
|
Quote:
__________________
- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale. - A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:19.










) è un autentico esemplare di utonto, e come tale lavora normalmente con Administrator, allora è di gran lunga preferibile l'idea del driver che ho descritto qualche post fa...
stanno là e basta; hanno solo la particolare caratteristica di girare sotto l'account SYSTEM...
)








