Memimager

führt einen Speicherabzug mit NTSYSTEMDEBUGCONTROL aus
Jetzt downloaden

Memimager Ranking & Zusammenfassung

Anzeige

  • Rating:
  • Lizenz:
  • Freeware
  • Name des Herausgebers:
  • Arne Vidstrom
  • Betriebssysteme:
  • Windows All
  • Dateigröße:
  • 7 KB

Memimager Stichworte


Memimager Beschreibung

Die MEMIMAGER-Anwendung wurde als ein Werkzeug entwickelt, das einen Speicherabzug mit NTSYSTEMDEBUGCONTROL ausführt. Verwenden von NTSYSTEMDEBUGCONTROL zum Dumping Für den Steuerungscode 10 verwenden wir eine Struktur mit dem folgenden Layout als Eingabepuffer: - Dword PhysicalAddress; - Dword reserved1; - Leere * Puffer; - Dword-Länge; Als nächstes können wir beispielsweise Malloc ein Puffer-Puffer, den wir Puffer aufrufen, 4096 in der Länge zeigen, und zeigen Sie physicalAddress an die Adresse der Seite, die wir den Inhalt kopieren möchten. Dann führen wir NTSYSTEMDEBUGCONTROL aus, und wenn alles gut geht, enthält unser Puffer jetzt eine Kopie der Daten auf der physischen Seite. Ziemlich trivial eigentlich. Innen ntystemdebugcontrol. Um zu verstehen, ob, und wenn ja, wie, ntysteindebugcontrol handelt, um Probleme mitzuteilen, müssen wir einen Tauchgang in den Kernel nehmen. Der Kernel exportiert die Routine namens NTSYSTEMDEBUGCONTROL, die eine Switch-Anweisung enthält, die mit dem Versand auf die korrekte Funktionalität basierend auf dem Steuerungscode verwendet wird. Im Folgenden werde ich nicht jedes winzige kleine Detail des Codes beschreiben. Der erste Grund ist, dass es viele Details gibt, die nicht für das, was wir ansehen, nicht relevant sind. Zweitens habe ich den Code nicht dezitiert, sondern folgte nur den relevanten Teilen der Demontage (von einem Windows Server 2003 SP0-Kernel). Der Code-Handhabungssteuerungscode 10 ruft den undokumentierten Routine _exlockuserbuffer auf, der die Seiten in unserem Puffer (* Puffer) ansässig macht, sie im Speicher sperrt und zurückgibt (in einem Zeiger als Parameter, der als Parameter übergeben wird) eine virtuelle Adresse des Systemraums, auf das auf ihn angezeigt wird. Dann wird eine weitere undokumentierte Funktion namens _kdpcopymemoryChunks aufgerufen. Die an ihn übergebenen Parameter sind unter anderem die virtuelle Systemraum-virtuelle Adresse, die auf unseren Puffer zeigt, die Anzahl der Bytes, die (Länge), und die Adresse, die von (physicalAddress) kopiert werden soll. Nun wird noch eine weitere undokumentierte Funktion genannt: _mmdbgcopymemory. Diese Funktion führt das eigentliche Kopieren der Daten aus. Bevor er jedoch ein Kopieren darf, muss er eine virtuelle Adresse der Quelle anstelle einer physikalischen Adresse haben. Daher nennt es unsere letzte undokumentierte Funktion: _MIDBGTRANSLATEPYSIALAG Jetzt schließen wir uns wirklich auf der Antwort auf unsere Frage. _MIDBGTRANSLATEPHYSIKALADDRess empfängt unsere physische Adresse als Parameter. Es verwendet dann eine Variable namens _validkernelpte, die als eine Art Vorlage für Kernel Pte dient: S. Die Flags aus der Vorlage werden mit der physikalischen Adresse kombiniert, um ein Pte zu bilden, das auf die Seite zeigt, die wir kopieren möchten. Dann wird die PFN-Datenbank indexiert, um den Eintrag zu finden, der unserer Quellseite entspricht. In diesem Eintrag betrachtet der Kernel die Cacheaturtribute-Flags des U3.E1-Mitglieds. Die Cacheaturtribute-Flags werden dann verwendet, um den Pat-Index in das PTE einzustellen. Jetzt haben wir wirklich unsere Antwort, aber ich werde trotzdem ein winziges bisschen fortsetzen. Das Pte, das der Kernel gebaut hat, ist jetzt an den Ort kopiert, auf den die Kernel-Variable _MMDEBUGTE aufwiesen. Schließlich gibt die Funktion die virtuelle Adresse zurück, die das PTE für das Mapping verwendet. Jetzt kann _MMDBGCOPYMEMORMONE frei werden, um die Daten von der physischen Quellseite mit virtuellen Adressen nur in unseren Puffer zu kopieren.


Memimager Zugehörige Software