Autor Beitrag
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Di 28.08.07 23:42 
Hallo,

mir ist gerade eine merkwürdige Idee gekommen und auch wenn ich nicht weiß wozu es gut sein sollte interessiert mich ob es generell möglich währe. Wie der Titel bereits verrät ist die Frage ob es prinzipiell möglich währe DLLs aus einem Stream ein zu binden ohne den Umweg über die Platte zu machen.

Wie gesagt ich wüsste gegenwärtig nicht wozu es gut ist aber ich finde die Frage recht interessant :mrgreen:.

Gruß
Klabautermann
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1338
Erhaltene Danke: 120

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Mi 29.08.07 00:48 
Die Frage ist absolut nicht uninteressant. Ich stelle mir diese und die Frage danach ob das auch mit einer Exe geht, schon geraume Zeit.
Wenn man sich die Hilfe zu LoadLibrary und LoadModule anschaut ist dort aber immer nur von einem Dateinamen die Rede.
Irgendwie muss es aber gehen, wie machen es sonst Exepacker wie zum Beispiel UPX.
Mit Pipes / Namedpipes hatte ich keinen Erfolg.
Die File Mapping Functions machen einen guten Eindruck aber ich komme einfach nicht weiter. :-( **im trüben stocher**

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 29.08.07 01:23 
Irgendwo hatte ich zu einer Exe mal ein Beispiel gefunden und das hatte ich dann mit DLLs ausprobiert. Damals mit mäßigem Erfolg, weil ich noch nicht gut Assembler und Delphi konnte (den Aufruf des Codes muss man manuell mit Assembler machen, zumindest war es in dem Beispiel so und ich wüsste auch keine andere Möglichkeit).

Jetzt müsste ich das nur noch finden... Ich such mal nochmal, eben hab ichs nicht gefunden, aber auf einer meiner Festplatten wird es noch liegen...
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: Mi 29.08.07 09:05 
Eigentlich kommt das vom Prinzip her dem was Exepacker (UPX) so machen doch schon recht nahe. Die müssen ja die Daten von der Platte erst einmal in den Speicher entpacken und dann ausführen. Und das geht ja auch mit DLLs wenn ich mich nicht vertue.

Der Source von UPX dürfte aber wohl doch etwas sehr extrem komplex sein.

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
Chryzler
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1097
Erhaltene Danke: 2



BeitragVerfasst: Mi 29.08.07 11:12 
Die Frage hab ich mir auch schon öfters gestellt. LoadLibrary macht ja im Prinzip nix anderes, als die DLL in den Speicher zu laden und ein Handle aufzumachen, damit man per GetProcAdress die Prozeduradressen bekommt.

Wann kommen eigentlich user profile iconuall@ogc und user profile iconLuckie online? :gruebel:
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 29.08.07 11:23 
Prinzipiell unter NT ff. möglich und schon gemacht von Nico: www.michael-puff.de/...Delphi/Importe/Nico/ -> inmemexe.zip

Aber wozu soll das gut sein?
Klabautermann Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Mi 29.08.07 11:53 
Hallo,
user profile iconLuckie hat folgendes geschrieben:
Aber wozu soll das gut sein?


wie gesagt, mir kam nur auf die Idee als ich die DLL einen Drittanbieters einband. War also eine prinzipielle Frage.

Das einzige was mir momentan als Anwendungszweck einfiele währe vielleicht ein Plugin-System welches Funktion in DLLs und Daten in Confgidateien zu einer Plugin-Datei Zusammenlinkt und so verwendet. Aber warum es den Aufwand lohnen sollte kann ich aber auch nicht sagen.

Den Link werde ich mir heute Abend mal ansehen. Danke dafür.

// Edit: Oh noch eine Idee. Ich stelle sicher das immer die aktuelle DLL verwendet wird indem ich sie Direkt aus einem Internet Stream einbinde. Dadurch das ich die DLL nicht Speicher funktioniert das auch wenn mein Programm von einer CD gestartet wird und ich nicht ans System Verzeichnis will oder kann ;).

Gruß
Klabautermann
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Mi 29.08.07 12:20 
Wir verwenden ein Plugin-System, bei denen man die DLL man jederzeit zur Laufzeit ändern (a.k.a. 'hochladen') kann. Daher kam eine Einbindung der Original-DLL gar nicht erst in Bertracht. Wir erstellen eine Kopie der DLL im Windows-Temp-Verzeichnis und verbiegen alle Aufrufe an diese Kopie.

Du könntest also die DLL als binäre Resource im Stream halten, bei Bedarf einfach in eine Temp-Datei schaufeln.

_________________
Na denn, dann. Bis dann, denn.
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1338
Erhaltene Danke: 120

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Mi 29.08.07 13:35 
Ein weiterer möglicher Einsatz wäre es, Angriffe auf ein Programm zu erschwehren. Mann könnte die Dll verschlüsselt aufbewahren und sie nur zur Laufzeit entschlüsseln und laden. Wobei natürlich immernoch die Möglichkeit besteht sie dann mit einem Debugger zu untersuchen. (geht mit Debugger Hooks zu erfassen, so das man auch da Gegenmaßnahmen ergreifen kann) Aber zumindest ist es so nicht mehr möglich eine geänderte Dll auf die Platte zu schreiben um diese in Zukunft zu verwenden.

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1338
Erhaltene Danke: 120

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Mo 03.09.07 20:01 
user profile iconLuckie hat folgendes geschrieben:
Prinzipiell unter NT ff. möglich und schon gemacht von Nico: www.michael-puff.de/...Delphi/Importe/Nico/ -> inmemexe.zip

Aber wozu soll das gut sein?


Feine Sache, das Beispiel.
Mal abgesehen davon das sich mein Vierenscanner energisch gegen die InMemExe wehrt und irgendwas von einem Virus rumfaselt, ist die verwendete Technik schon absolut Genial. Ich hätte es so ähnlich versucht, bzw. werde es mal versuchen. jetzt nachdem noch ein paar fragen mehr geklärt sind. aber ich bin mir recht sicher das sich mein Scanner immer wieder haben wird und das ganze als Virus verkaufen will. Schließlich ist es eine Methode mit der auch Vieren, die an Programme angehängt sind ausgeführt werden könnten. Also ist es ja eigentlich gut das er was dazu sagt.

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: Sa 29.09.07 17:37 
Soetwas wird bei vielen Anticheat Programmen benutzt (Valve Anti Cheat [VAC] bei Counter-Strike/Half-life) bzw. Warden (Warcaft3, World of Warcraft, StarCraft, DiabloII).
Die laden sich den Anticheat Schutz direkt vom Server entschlüsseln den und führen ih ndann direkt aus.

uall.overclock.ch/uallCollection/ @uallKernekl.LoadLibraryX ist eine eigene Implementation vom LoadLibrary (ein bisl abgeädnert kann man damit auch Streams angeben)

_________________
wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1338
Erhaltene Danke: 120

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Mo 01.10.07 12:42 
Danke! :flehan:
Genau das ist es.
Sowas in der Art habe ich schon in einem anderen Programm verbaut. Nur habe ich bisher nicht rausfinden können wie man es hinbekommt eine selber in den Ram geladene DLL ausführbar zu machen. Bisher bin ich aber nur soweit gekommen sie in ihre Bestandteile auseinander zu bauen.
Was mich jetzt noch interessieren würde, kann man eigentlich auf die gleiche Art auch eine Exe laden und ausführen? Das einzige was es da nicht gibt ist DllMain. Dafür ja aber EXE Main. Nur das man das nicht so einfach ausführen sollte(kann). Sondern dafür einen neuen Prozess erstellen muss in dem es dann ausgeführt wird.
Oder irre ich mich da? Habe ich was übersehen?

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: Mo 01.10.07 20:50 
Kannst eine Exe genau wie eine Dll benutzen und den Entrypoint einfach aufrufen anstatt dllmain.

_________________
wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit