C# c# DLL Entry point

Stato
Discussione chiusa ad ulteriori risposte.

und3r6r0und_

Utente Gold
24 Luglio 2010
1,209
37
131
341
Ciao ragazzi di inforge =)
Sono tornato a coddare un multihack in c#, tuttavia mi sorge un problema abbastanza complesso, ossia non riesco a visualizzare la form in un progetto DLL, ossia, non riesco a trovare l'equivalente c# del DLLMain del c++(#)
qualcuno sa aiutarmi?
preferirei se possibile avere un esempio di codice xk x ora ho trovato solo qualche informazione sui forum inglesi ("si è possibile".... grazie... spiega anche come xD)

grazie in anticipo
und3r6r0und_
 
Nei linguaggi .NET gli assembly con estensione .DLL possono possedere talmente tanti EntryPoint da poter affermare che in realtà non ne possiedono nessuno. Mi spiego meglio : quando hai a che fare con un assembly con estensione .DLL scritto in C/C++ allora hai necessariamente un EntryPoint, questo :

Codice:
BOOL APIENTRY DllMain( HMODULE hModule,                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}

che serve per poter accedere a tutte alle funzioni contenute nell'assembly. Per quanto riguarda invece gli assembly dei linguaggi .NET la cosa è diversa poiché utilizzando l'attributo DllImport vai a prendere solo una funzione dall'assembly, se vuoi prenderne altre devi sempre utilizzare l'attributo DllImport. Ti faccio un esempio per capire meglio :

Codice:
[COLOR=#2A2A2A][DllImport("user32", CharSet=CharSet.Auto, SetLastError=true, ExactSpelling=true)]
[/COLOR][COLOR=#2A2A2A]public static extern IntPtr GetWindow(IntPtr hwnd, int wFlag);[/COLOR]

con questa "importazione" della libreria dinamica user32.dll non sto facendo altro che prendere da essa SOLO ED ESCLUSIVAMENTE la funzione GetWindow quindi possiamo dire che il punto di ingresso di questo assembly sarà proprio quella funzione. Fondamentalmente la differenza tra le DLL in C/C++ e in C#/VB.NET è questa :

- per le DLL in C/C++ se voglio utilizzare una funzione devo necessariamente importare tutta la libreria
- per le DLL in C# invece devo essere io a "dire" all'IDE qual è l'EntryPoint della DLL specificando con l'attributo DllImport la funzione che voglio importare

int0x80
 
Grazie 1000 della risposta :)
Tuttavia non sono ancora riuscito a risolvere il mio problema... ciò che a me interessa è eseguire del codice all' "avvio" (passami il termine ^^) della dll, ossia, quando tramite dllInjection ho l'iniezione della dll in un processo devo poter eseguire un codice (in questo caso visualizzare una form)
 
Tuttavia non sono ancora riuscito a risolvere il mio problema... ciò che a me interessa è eseguire del codice all' "avvio" (passami il termine ^^) della dll, ossia, quando tramite dllInjection ho l'iniezione della dll in un processo devo poter eseguire un codice (in questo caso visualizzare una form)
Tu stai cercando di inserire un entry-point in una libreria di classi C# giusto? le librerie .NET non hanno entri-point. Le loro funzioni vengono solo richiamate, non possono venir eseguite al caricamento in memoria. Per questo devi scrivere dll in codice nativo.
 
Volendo puoi modificare la prima parte di eseuibile in ASM puro che richiama una funzione all'interno della propria Dll .NET, una specie di applicazione ibrida...
C'era un crackme del genere in giro...
 
Stato
Discussione chiusa ad ulteriori risposte.