2015-07-18 11 views
14

Zunächst einmal ist mir bewusst 1. Is it possible to export a dll definition from my AppDomain? 2. Is it possible to save a dynamic assembly to disk? 3. How can I extract DLL file from memory dump?Ist es möglich, eine DLL aus dem Prozessspeicher in eine Datei zu exportieren/zu exportieren?

aber keiner von denen scheinen besonders meine Frage zu beantworten.

Stellen Sie sich das folgende Szenario vor: Eine C# -Anwendung lädt eine DLL aus einem Arbeitsspeicherstrom (so dass die DLL dem Benutzer nicht direkt verfügbar ist). Gibt es ein Tool, das ausdrücklich ermöglicht, diese bestimmte DLL in ihrer ursprünglichen Form von Speicher auf Datenträger zu exportieren oder zu exportieren?

Hinweis: Ich möchte, dass mir jemand eine vollständige Schritt-für-Schritt-Anleitung zum Extrahieren einer intakten DLL aus dem Speicherabbild einer C# -Anwendung zeigt.

+0

Welches Format haben Sie beim Laden der DLL? Haben Sie noch einen Verweis auf das Objekt "Assembly" oder das Byte []? –

+0

Versuchen Sie es mit MyAssembly.Location ... Dies gibt Ihnen einen Dateipfad, aus dem Sie möglicherweise lesen können. Ich weiß, es ist ein MemoryStream, aber möglicherweise erstellen sie intern eine temporäre Datei. –

+0

@ PhilippeParé Der Pfad zur Baugruppe ist für den Benutzer niemals zugänglich. Ich bin interessiert zu wissen, die genaue Methode zum Extrahieren der geladenen DLL-Dateien aus dem Prozess zugewiesen Speicher oder aus dem Speicherabbild. – IneedHelp

Antwort

9

WinDbg mit verwalteten Debugging-Erweiterungen ist zu diesem Trick fähig. Zuerst WinDbg herunterladen (google microsoft debugging tools for windows, sie sind nicht Standalone herunterladen, sondern Teile anderer Kits).

Der nächste Teil ist die Installation der psscor2 Erweiterung (von https://www.microsoft.com/en-us/download/details.aspx?id=1073) und extrahieren Sie es in den Ordner, wo WinDbg befindet.

Als nächstes führen Sie Ihr Programm und WinDbg daran (es ist im Menü). Geben Sie die folgenden Befehle:

  1. .load psscor2
  2. !SaveAllModules c:\modules\

Finden Sie das Modul, das Sie wollen und genießen.

+0

Ich habe die Lösung auf einer zufälligen .NET-App auf meinem Computer getestet und die Ergebnisse waren, was ich erwartet hatte. Allerdings hat diese App wahrscheinlich 'Assembly.Load (byte [])' nicht verwendet, aber ich glaube nicht, dass es ein Problem sein sollte. Sind die Baugruppen, an denen Sie interessiert sind, mindestens mit dem Befehl '! DumpDomain' aufgelistet? – rkapl

+0

Ich habe es versucht, und ich bekomme diesen Fehler: 0: 021>! DumpDomain Fehler beim Suchen Laufzeit DLL (mscorwks.dll), 0x80004005 Erweiterungsbefehle brauchen mscorwks.dll um etwas zu tun haben. – IneedHelp

+0

Nun, '! DumpDomain' funktioniert für mich. Versuchen Sie, '.loadby sos mscorwks' vor'! DumpDomain' auszuführen. – rkapl

Verwandte Themen