Ładowanie DLL z sieci

0

Nie wiem czy ktoś kiedyś próbował czegoś takiego jak ładowanie pliku DLL z servera zdalnego np:
http://127.0.0.1/plil.dll

Czy w ogóle jest taka możliwość bo takie coś ni niestety nie działa...

var
  DLL : THandle;
  About : procedure;
begin
  DLL := LoadLibrary('http://localhost/SimpleDLL.dll'); // załadowanie pliku
  try
    @About := GetProcAddress(DLL, 'About');  // pobranie wskaźnika do procedury
    if @About = nil then raise Exception.Create('Nie można załadować procedury');
    About; // wykonanie procedury
  finally
    FreeLibrary(DLL);
  end;
0

moze byc to tylko lokalna sciezka, system tylko uzupelnia ja by byla to poprawna nazwa obiektu (file).

0

ściągnij i zapisz do tempa

0

szkoda że się nie da ładować prosto z sieci :(

0

W kwestii formalnej - kiedyś się dało, mało tego, poprzez tablicę importów. Bardzo dobrze, że się nie da - piękny sposób ukrywania/rozpowszechniania/aktualizowania malware'u.

0

A z innej beczki, czy da się załadować ze strumienia (TStream) ? Pewnie się nie, w zasadzie napisałem bo ostatnio bawiłem się hunspell'em, i trochę mnie nerwuje, że trzeba wczytywać słownik podając scieżkę (a to jest prawie 5 Mb), robiąc to w głównym wątku jest lekka przymułka. Fajnie by było jak podać jakąś taką spreparowaną ścieżkę która by w rzeczywistości była obszarem pamięci. A może pliki mapowane ?

Reasumując, czy funkcję która przyjmuje nazwę pliku można jakoś oszukać żeby jej podsunąć jakiegoś stream'a albo coś w ten deseń ?

b

0

W Delphi 7 da się wczytać dllkę z zasobów czyli jak z TResourceStreama to i innego Streama
powinno się dać. Zajrzyj na tę stronę i wykorzystaj moduł dllloader.pas. Znalazłem go dzięki
pomocy na forum u1. Użyłem go w kilku aplikacjach: do obsługi bass.dll z zasobów, a także:
do załądowania sqlite3.dll również z zasobów. Działa idealnie, a nie jak btmemorymodule :)
http://www.basegraph.com/bg/tutorials/eng_tutor_dlltools/dlltools.html

0

Uhm, w sumie nie tyle chodzi mi o dll'kę, bo ta ma 200kb, tylko o słownik który ma 5 Mb. Na ten moment trzymam wszystko w bazie, i jak jest potrzeba to sprawdzam czy rozmiar jest ten sam a jak nie jest albo pliku nie ma to go zapisuje na dysk. Następnie z dysku go wczytuje. Chciałbym to zamiast na dysk zapisać do strumienia, i ze strumienia wczytać. Albo do czegoś na ten wzór. Nie chce mi się przerabiać tego ładowania na wątek, zresztą kto wie jakie problemy by się znowu pojawiły. Dlatego przy okazji tego tematu zapytałem.

b

0

szkoda że się tak nie da :(

0

Wiem, że można było ciągnąć DLL z sieci, ale teraz w nowych D się raczej nie da. Tak zabezpieczano niektóre programy przed piractwem!

0
ccpl napisał(a)

Wiem, że można było ciągnąć DLL z sieci, ale teraz w nowych D się raczej nie da.

Czego się niby nie da?

ccpl napisał(a)

Tak zabezpieczano niektóre programy przed piractwem!

I już się tak nie robi bo to sensu nigdy nie miało...

0
Świętowit napisał(a)
ccpl napisał(a)

Wiem, że można było ciągnąć DLL z sieci, ale teraz w nowych D się raczej nie da.

Czego się niby nie da?

W sensie Od razu do pamieci, a nie na dysk twardy...

0

Czego się nie da jak wszystko się da - poważniejsze protectory czy bindery odbudowują dllkę w pamięci i same ją rejestrują w procesie lub hookują odpowiednie funkcje pozwalając na dostęp do niej i prawidłowe działanie. Zrobić to z danymi ściągniętymi z sieci to nie problem, ba, można nawet zacząć odbudowę zanim ściągnie się całość, po kawałku.

0

Znaczy się jak bym napisał program w Delphi 4 to by poszło ???

1 użytkowników online, w tym zalogowanych: 0, gości: 1