ZwReadVirtualMemory benutzen



  • Hi,

    wie kann ich ZwReadVirtualMemory aus einem Treiber heraus benutzen?
    Alles was ich bisher versucht habe ist fehlgeschlagen.
    Der beste Versuch war:

    NTSYSAPI NTSTATUS NTAPI ZwReadVirtualMemory( IN HANDLE hProcess,IN PVOID BaseAddress, OUT PVOID Buffer,IN ULONG BytesToRead,OUT PULONG BytesRead);
    

    mit targetlibs=ntdll.lib

    compilen mit winDDK ging ohne fehler
    aber beim starten des treibers bekomme ich nen fehler und in der ereignisanzeige steht

    Der Dienst "Test" wurde aufgrund folgenden Fehlers nicht gestartet:
    Die angegebene Prozedur wurde nicht gefunden.

    liegt aber definitiv an der funktion.
    Wenn ich die auskommentiere gehts.

    Im internet habe ich auch nichts gefunden, was hilft.



  • ^^hast du vielleicht eine falsche version der ntdll.lib ?
    🙂



  • definiere "Falsche Version"

    hab das WinDDK installiert und unter sources:
    TARGETLIBS = $(BASEDIR)\lib\WXP\i386\ntdll.lib

    (Hab WinXP SP3)

    Habs jetzt mit KernelGetProcessAddress gelöst nachdem ich n haufen fehlermeldungen u.ä. beseitigen musste...macht kein Spaß

    Wenns was einfacheres gibt, wäre ich dankbar



  • Flamefire schrieb:

    Wenns was einfacheres gibt, wäre ich dankbar

    ich weiss ja nicht, was du vorhast, aber wenn du einfach nur hardware mit einer windose ansteuern willst: http://www.jungo.com/st/windriver_usb_pci_driver_development_software.html
    🙂



  • Ich will die funktion per SSDT hooken, als "Anti-Hook"-Hook
    mir gehts de facto darum, einen bestehenden Hook "auszutricksen"

    Im Prinzip spielerei, aber ich lerne ebn dadurch.

    BTW: Ich kann die Adresse zwar aus der SSDT auslesen und anscheinend auch hooken, nur krieg ich bei nem SSDT Hook auf ReadVirtualMemory nen BSOD wärend das für ZwOpenProcess anstandslos funktioniert...
    sehr seltsam...bisher macht der hook nix weiter als die originalfunktion aufzurufen 😞



  • Also der Hook funktioniert schonmal so wie er soll
    nur würde ich doch gerne ZwReadVirtualMemory benutzen.
    leider kann ich aus dem kernel mode anscheinend nicht den ssdt eintrag nehmen und einfach den aufrufen.
    und ZwReadVirtualMemory ist ja nicht exportiert.

    wie kann ich von einem Prozess speicher sicher lesen (also auch wenn wärend des lesevorgangs der speicher verändert wird)?
    das problem beim locken des prozesses ist ja, dass sich die struktur, aus der ich den parameter zum locken bekomme, mit jeder windows version ändert.
    das einzige sinnvolle erscheint ZwReadVirtualMemory. nur müsste ich um da ranzukommen den speicher der ntoskrnl.exe scannen und nach der signature suchen..
    aber iwie muss die doch referenziert sein. windbg erkennt die ja (als symbol) und möglichwerweise wird die ja auch mal aufgerufen.


Log in to reply