![]() |
Delphi-Version: 7
ResourceDLL aus Speicher laden und direkt verwenden
Hallo,
Ich habe eine .RES-file, in welcher ein Bild ist. Diese .RES-File lade ich in einer DLL. Also ich habe eine DLL, die NUR aus dieser Resource besteht. Aus dieser DLL habe ich nun wieder eine .RES-Datei erstellt. Diese .RES-Datei möchte ich in den Speicher laden (hat funktioniert) und anschließend das Bild als String einlesen. Jemand eine Idee? |
AW: ResourceDLL aus Speicher laden und direkt verwenden
Du hast eine Ressourcen-DLL nochmals als Ressource eingebunden? Soll das nur zum Üben sein, oder welchen Mehrwert versprichst Du Dir gegenüber einer "normalen" Ressource? Ansonsten sollte das doch über LoadFromResourceName zu machen sein, sofern Du an das Instanzenhandle der DLL herankommst, wenn ich nicht irre.
|
AW: ResourceDLL aus Speicher laden und direkt verwenden
Zitat:
Ich nehm sie mir aus der Resource, lade sie in den Speicher und rufe ihre funktionen auf. So muss ich die DLL nicht auf dem Datei-System droppen :) Die Lösung ist ja klar, nur weiß ich nicht wie ichs in der Praxis umsetze:
Delphi-Quellcode:
Ich suche nach einer möglichkeit IN meiner Resourcen-DLL auf die resource zuzugreifen^^
library adpResources;
{$R ress.RES} function FileToStr(sPath:string; var sFile:string):Boolean; var hFile: THandle; dSize: DWORD; dRead: DWORD; begin Result := FALSE; hFile := CreateFile(PChar(sPath), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0); if hFile <> 0 then begin dSize := GetFileSize(hFile, nil); if dSize <> 0 then begin SetFilePointer(hFile, 0, nil, FILE_BEGIN); SetLength(sFile, dSize); if ReadFile(hFile, sFile[1], dSize, dRead, nil) then Result := TRUE; CloseHandle(hFile); end; end; end; <Ab jetzt Pseudo-Code> function Exporter(Resource : Resourcename) : String; stdcall; begin FileToStr(Resourcename,result); end; exports Exporter index 1; begin end. EDIT:// Und dass ich resourcen in eine dll einbinde und diese dll dann wieder in eine resource packe hat alles sinn ;) |
AW: ResourceDLL aus Speicher laden und direkt verwenden
Also ist das doch keine reine Ressourcen-DLL. Allerdings verstehe ich Deinen Code in diesem Zusammenhang nicht, ich denke, Du willst das Bild aus der Ressource der DLL laden und keine Datei?
|
AW: ResourceDLL aus Speicher laden und direkt verwenden
Ich habe eine DLL-Datei, in welcher sich ein Bild als Resource befindet.
Diese DLL habe ich wieder in eine Resource gepackt. In meinem Programm lade ich die DLL aus der Resource direkt in den Speicher. Nun könnte ich ohne die DLL zu droppen, auf die export-Funktionen zugreifen. Im obigen Beispiel die Funktion "Exporter" die mir einen String zurückgibt. Diese Funktion "Exporter" soll das Bild, was sich ja als Resource in der DLL selber befindet als String einlesen und mir dann zurückgeben :) |
AW: ResourceDLL aus Speicher laden und direkt verwenden
Dann versuch es doch einmal mit LoadFromResourceName, um das Bild zu laden, und packe es dann in einen TStringStream. Allerdings könnte es je nach Delphi-Version zu Problemen kommen, wenn Du nicht entweder Sharemem einbindest oder auf PChar ausweichst. Und was passiert, wenn ein Byte des Bildes 0 (Stringendezeichen) ist?
|
AW: ResourceDLL aus Speicher laden und direkt verwenden
Zitat:
|
AW: ResourceDLL aus Speicher laden und direkt verwenden
Na dann probier es mal aus. Allerdings bin ich gerade nicht sicher, ob bei einer DLL nun hInstance oder GetModuleHandle der richtige Parameter für LoadFromResourceName ist.
|
AW: ResourceDLL aus Speicher laden und direkt verwenden
Zitat:
|
AW: ResourceDLL aus Speicher laden und direkt verwenden
Ich weiß es auch nicht, deshalb sag ich ja: ausprobieren.
|
AW: ResourceDLL aus Speicher laden und direkt verwenden
Und warum der Umweg über die DLL? Pack die Ressource doch direkt in die Exe-Datei. Das macht vieles einfacher.
|
AW: ResourceDLL aus Speicher laden und direkt verwenden
Zitat:
|
AW: ResourceDLL aus Speicher laden und direkt verwenden
Welchen? Du wärst nämlich so mit der Erste.
|
AW: ResourceDLL aus Speicher laden und direkt verwenden
Den Sinn gibt es wo anders, z.B. wenn Funktionen (meist Hooks) in DLLs packen (weils ja nicht anders geht, wie viele glauben) muß und nicht will, daß jemand Anderes diese (bösen) DLLs sieht, bevor man sie überall in fremde Prozesse injiziert.
Das hier geht eher darauf hinaus, daß mein eine Datei in eine Zip steckt, welche wiederum in einer Zip liegt. :roll: |
AW: ResourceDLL aus Speicher laden und direkt verwenden
Nein, um ehrlich zu sein hab ich das nur gemacht um meinen code, der merkwürdigerweise von ein paar antivirenprog. als malware anerkannt wird (Gen., Dropper whatever) zu verschleiern. (hat auch geklappt).
Ich schätze die Bitdefender, kaspersky etc. haben Alarm geschlagen, weil ich vorher in der Resource ja einen sehr sehr langen String hatte (RC4 kodiert), diesen dann aus der Resource lud, dekodiert habe und dann via RunPE in dem speicher executed hab.. Sollte ein, bzw. ist nun ein Runtime-Packer. EDIT:// Nun tarne ich diesen String als .jpg z.B., dieses JPG befindet sich in einer Resourcen DLL. Diese DLL hat eine Funktion in den exports, die mir das Bild als String zurückgibt. Diese DLL ist wieder als Resource in der EXE. Die lade ich dann direkt in den Speicher, greife auf die exportierte Funktion zu und lade dann via RunPE. |
AW: ResourceDLL aus Speicher laden und direkt verwenden
Tarnen/Verstecken macht verdächtig.
Rate mal was passiert, wenn du behauptest diese Resource sei ein Bild und die AV-Hersteller kommen irgendwann mal auf die Idee und schauen ob das wirklich ein Bild ist. Da es kein Bild ist, würden sie dann ganz schnell wieder vor deinem Programm warnen. Mach es wie alle anderen auch. Wende dich an die AV-Hersteller und sag denen, das es in deinem Programm (als Anhang mitgeschickt) einen False-Positive gibt. Dann beheben die den Fehler und man hat selber keinerlei Probleme mehr. |
AW: ResourceDLL aus Speicher laden und direkt verwenden
Zitat:
überspitzt gesagt erinnert mich das an die Zeiten, als ich mich noch von Edith Blyton inspirieren ließ. Da galt das Motto, je mehr und je größer die Vorhängeschlösser sind, desto sicherer. Daß die Rückwand des Schuppens praktisch nicht vorhanden war, tat in dem Zusammenhang nichts zur Sache. Aber vielleicht irre ich mich ja auch.... Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz