2009-03-12 13 views
10

Come dice la domanda, voglio caricare una DLL da una posizione in memoria invece di un file, analogamente a LoadLibrary (Ex). Non sono esperto in WinAPI, quindi ho cercato su Google un po 'e ho trovato this article insieme alla libreria MemoryModule che soddisfa praticamente le mie esigenze.Caricamento di una DLL da una posizione nella memoria

D'altra parte le informazioni sono piuttosto vecchie e la libreria non è stata aggiornata per un po 'di tempo. Quindi volevo sapere se ci sono modi diversi, nuovi e migliori per farlo. Inoltre, se qualcuno ha utilizzato la libreria menzionata nell'articolo, potrebbe fornire informazioni su ciò che potrei affrontare quando lo si utilizza?

Solo per i curiosi, sto esplorando il concetto di crittografia di alcuni plug-in per le applicazioni senza archiviare la versione decrittata su disco.

+2

Ecco il codice sorgente pronto all'uso per il caricamento della DLL dalla memoria: https://github.com/fancycode/MemoryModule – user1528094

risposta

3

Bene, è possibile creare un'unità RAM in base a these instructions, quindi copiare la DLL che è possibile memorizzare in un file e utilizzare LoadLibrary().
Ovviamente questo non è molto pratico se si prevede di distribuire questo come una sorta di prodotto perché le persone noteranno un driver installato, un riavvio dopo l'installazione e una nuova lettera di unità in Risorse del computer. Inoltre, questo non fa nulla per nascondere effettivamente la DLL dal momento che è appena seduto lì nel RAM Drive per tutti da guardare.

Un'altra cosa di cui sono interessato è Perché in realtà vuoi farlo? Forse il tuo risultato finale può essere ottenuto con altri mezzi diversi dal caricamento della DLL dalla memoria. Ad esempio, quando si utilizza un packer binario come UPX, la DLL che si ha sul disco è diversa da quella eventualmente eseguita. Subito dopo la DLL viene caricata normalmente con LoadLibrary, The unpacker esegue il kicking e riscrive la memoria a cui viene caricata la DLL con il binario non compresso (l'intestazione della DLL assicura che vi sia spazio sufficiente)

+0

Sì, potrei simulare il comportamento di UPX e usare il mio unpacker/decryptor come punto di ingresso, che potrebbe quindi negoziare la chiave con l'app principale. Segnerò questa risposta come accettata, grazie per le numerose idee! –

5

L'implementazione del proprio caricatore DLL può diventare davvero molto veloce. Leggendo questo articolo è facile non capire che tipo di pazzi casi limite si possono ottenere. Raccomando fortemente contro di esso.
Solo per un assaggio, considera che non è possibile utilizzare alcun normale strumento di debug per il codice nella DLL che si sta caricando poiché il codice che si sta eseguendo non è elencato nella regione di alcuna DLL conosciuta dal sistema operativo.
Un altro problema serio riguarda DEP in Windows.

+0

Grazie per l'intuizione. Sono d'accordo che reimplementare il caricatore DLL non è una buona idea, quindi sto cercando altri modi per farlo - forse è possibile ingannare LoadLibrary o il filesystem in qualche modo. –

+0

I problemi risultanti sono elencati in maggiore dettaglio qui: https://www.codeproject.com/Tips/430684/Loading-Win-DLLs-manually-without-LoadLibrary – Elmue

Problemi correlati