2009-03-12 21 views
10

Zgodnie z pytaniem, chcę załadować bibliotekę DLL z lokalizacji w pamięci zamiast z pliku, podobnie jak w LoadLibrary (Ex). Nie jestem ekspertem od WinAPI, więc trochę googlowałem i znalazłem this article wraz z biblioteką MemoryModule, która prawie spełnia moje potrzeby.Ładowanie biblioteki DLL z miejsca w pamięci

Z drugiej strony informacje są dość stare, a biblioteka nie była od jakiegoś czasu aktualizowana. Tak więc chciałem wiedzieć, czy istnieją różne, nowsze i lepsze sposoby na to. Także, jeśli ktoś użył biblioteki wspomnianej w artykule, czy mógłby zapewnić wgląd w to, co może napotkać podczas korzystania z niej?

Dla ciekawskich zajmuję się koncepcją szyfrowania niektórych wtyczek dla aplikacji bez przechowywania odszyfrowanej wersji na dysku.

+2

Tu jest gotowy do użycia kod źródłowy do ładowania DLL z pamięci: https://github.com/fancycode/MemoryModule – user1528094

Odpowiedz

3

Można również utworzyć dysk RAM zgodnie z these instructions, a następnie skopiować bibliotekę DLL, którą można w pamięci do pliku i użyć funkcji LoadLibrary().
Oczywiście nie jest to bardzo praktyczne, jeśli planujesz wdrożyć to jako jakiś produkt, ponieważ ludzie zauważą instalowany sterownik, ponowne uruchomienie po instalacji i nową literę dysku w obszarze Mój komputer. Co więcej, nie robi to nic, aby ukryć bibliotekę DLL, ponieważ znajduje się ona w pamięci RAM, którą każdy może oglądać.

Inną rzeczą, która mnie interesuje jest to, dlaczego tak naprawdę chcesz to zrobić? Być może Twój wynik końcowy może zostać osiągnięty za pomocą innych metod niż ładowanie biblioteki DLL z pamięci. Na przykład podczas używania pakera binarnego, takiego jak UPX, biblioteka DLL, którą masz na dysku, różni się od tej, która jest ostatecznie wykonywana. Natychmiast po załadowaniu biblioteki DLL normalnie za pomocą LoadLibrary, Rozpakowacz uruchamia i przepisuje pamięć, do której jest załadowana biblioteka DLL, za pomocą nieskompresowanego pliku binarnego (nagłówek pliku DLL zapewnia, że ​​jest wystarczająca ilość miejsca)

+0

Tak, mogę naśladować zachowanie UPX i używać mojego rozpakowania/odszyfrować jako punkt wejścia, który może negocjować klucz z główną aplikacją. Zaznaczę tę odpowiedź jako zaakceptowaną, dzięki za liczne pomysły! –

5

Wdrożenie własnego programu ładującego biblioteki DLL może stać się naprawdę kosmate bardzo szybko. Czytając ten artykuł łatwo przegapić jakie szalone przypadki, w które można się dostać. Zdecydowanie odradzam.
Tylko dla smaku - nie można używać żadnych konwencjonalnych narzędzi do debugowania kodu w pliku DLL, który ładujesz, ponieważ kod, który wykonujesz, nie znajduje się w regionie żadnej biblioteki DLL znanej z systemu operacyjnego.
Innym poważnym problemem jest obsługa okien w systemie DEP.

+0

Dzięki za wgląd. Zgadzam się, że ponowne wprowadzenie modułu ładującego biblioteki DLL nie jest dobrym pomysłem, więc szukam innych sposobów, aby to zrobić - może uda się jakoś oszukać LoadLibrary lub system plików. –

+0

Wynikające stąd problemy są bardziej szczegółowo tutaj: https://www.codeproject.com/Tips/430684/Loading-Win-DLLs-manually- without-LoadLibrary – Elmue

Powiązane problemy