Prima di tutto, il malware normalmente non carica le proprie DLL in memoria. Penso che tu confondi questo con il malware che inserisce il codice eseguibile in un altro processo (OpenProcess (), WriteProcessMemory ()) e che avvia un nuovo thread in quel processo (CreateRemoteThread ()) che esegue quel codice. Questo non ha nulla a che fare con il caricamento di una DLL in memoria, che è molto più difficile del semplice esecuzione del codice. Perché il malware dovrebbe contenere più DLL caricate in memoria? È molto più facile scrivere UN eseguibile malware invece di più DLL.
Torna alla tua domanda: se vuoi ingannare Windows per caricare una DLL dalla memoria, questo è qualcosa tra programmazione e cracking molto avanzati.
Uno svantaggio è che non puoi usare i debugger se qualcosa va storto nella tua DLL.
È possibile utilizzare ad esempio questo codice: link per caricare una DLL in memoria. Non l'ho testato perché lo svantaggio è che è necessario utilizzare funzioni speciali per accedere a quella DLL in memoria in seguito. Ad esempio, per leggere una risorsa stringa da quella DLL non è possibile utilizzare la normale API di Windows. È necessario utilizzare una funzione dalla stessa libreria.
Alcuni problemi che si verificano sono elencati in maggiore dettaglio qui:
link
L'autore dice che con il suo codice la sua DLL non ha un handle di HINSTANCE. Questo è un grosso svantaggio.