Extern Modul Base ermitteln



  • Hi 😉
    Ich beschäftige mich seit einiger Zeit mit C++ und momentan jetzt mir Memory.
    Na ja, wenn ich jetzt etwas durch mein Programm auslesen lassen will, dann brauche ich ja die Base des Moduls in dem ausgelesen werden soll.
    Nun wäre meine Frage: Wie ermittelt man am elegantesten die Base eines Moduls eines externen Prozesses?
    Über CreateToolhelp32Snapshot und System.Diagnostics weiß ich schon Bescheid, aber ich denke, dass es da doch eine weitaus bessere Methode geben müsste.

    Danke im Voraus 😉



  • inevergo schrieb:

    Hi 😉
    CreateToolhelp32Snapshot ... dass es da doch eine weitaus bessere Methode geben müsste.

    nee



  • Und wie sieht's mit VirtualQueryEx und GetMappedFileName aus?


  • Mod

    inevergo schrieb:

    Und wie sieht's mit VirtualQueryEx und GetMappedFileName aus?

    Und was soll das bei einem fremden Prozess bringen?



  • Wie was das bringen soll?
    Ich wende VirtualQueryEx auf den fremden Prozess an und überprüfe währenddessen, ob die Flag MEM_MAPPED steht. Wenn ja dann wird GetMappedFileName mit meinem gesuchten Modul verglichen. Wenn ja, dann lasse ich mir die BaseAdress ausgeben und höre auf.

    Da ich noch nicht so wirklich den Plan habe(Programmiere erst seit knapp einer Woche), frage ich hier ob es sich lohnt dies so zu machen oder halt nicht. (Ich suche eigentlich nur die effizienteste Lösung)



  • Ist halt ne script kiddy Lösung 😃 Hört sich jedenfalls weniger effizient an...



  • erstmal guten morgen leute!

    inwiefern scriptkiddie lösung?
    mir ist klar, daaa virtualquerYex wohl ncht sehr effizient ist/scheibt aber wenigstens versteh ich da (mehr oder weniger :D) was ich mache.
    bei toolhelp muss ich ja die einzelnen module durchgehen bis ich meins habe. dabei müssen die module ja auch irgendwie ermittelt werden.
    ich würd mir halt gern darüber klar werden wie toolhelp funktioniert um dann nachvollziehen zu können. gerade als anfänger fänd ich es besser wenn ich wüsste wieso etwas besser als das andere ist, als nicht.
    und da helfen solche aussagen wie "was soll das bringen" oder "skript kiddie lösung" ganz und garnicht.
    lieber wären mir da links zu büchern/texten/tutorials über das thema aber nicht sowas 🙂
    ich hoffe ihr versteht.

    so long einen schönen montag noch!


  • Mod

    inevergo schrieb:

    Da ich noch nicht so wirklich den Plan habe(Programmiere erst seit knapp einer Woche), frage ich hier ob es sich lohnt dies so zu machen oder halt nicht. (Ich suche eigentlich nur die effizienteste Lösung)

    Und warum machst Du es so, wenn es eben gerade dafür CreateToolhelp32Snapshot gibt?
    Und wie willst Du die "Module vergleichen"? Wenn Du nicht weiß was der Prozess dort gelesen hat?



  • hi,

    habe gehört dass toolhelp nicht sonderlich effektiv sei.
    ich überprüfe ob getmappedfilename den modulnamen enthält (ich weiß ja welches modul ich brauche)

    funktioniert tadelos aber obs effizient ist...


  • Mod

    Ohne zu wissen was Du vorhast spielt Effizient bei solchen Systemtools eine geringere Rolle...



  • CreateToolhelp32Snapshot ist deshalb vorzuziehen, weil es die Infos aus windowsinternen Strukturen bezieht. Und das ist sicher besser als deine bruteforce Methode.



  • Martin Richter schrieb:

    Ohne zu wissen was Du vorhast spielt Effizient bei solchen Systemtools eine geringere Rolle...

    mein programm soll einige wenige daten aus einem anderen programm auslesen. die pointer zu den daten sind dynamisch und bestehen aus der Baseadresse des Modules und einem konstanten offset.



  • mein programm soll einige wenige daten aus einem anderen programm auslesen. die pointer zu den daten sind dynamisch und bestehen aus der Baseadresse des Modules und einem konstanten offset.

    Interprozess Kommunikation?



  • Bitte ein Bit schrieb:

    mein programm soll einige wenige daten aus einem anderen programm auslesen. die pointer zu den daten sind dynamisch und bestehen aus der Baseadresse des Modules und einem konstanten offset.

    Interprozess Kommunikation?

    glaube eher dass es hier um einen cheat geht 🤡



  • danke für den link. interprozess kommunikation ist dort auf files bezogen 😕 und nicht auf memory.
    habe mich aber bei msdn umgesehen und will nun beide die performance von beiden methoden vergleichen 😉


  • Mod

    IPC schließt auch shared Memory ein. Und Memory-Files isnd zwar Dateien, aber eben über den Speicher. Wo soll das langsam sein.

    Für einen Cheat wird das aber nicht gehen. Dazu müsstest Du ja den Sourcecode im anderen Programm haben.



  • ja genau ^^ (shared memory ist nicht das was ich will :P)
    naja ich lese nur daten aus (in einem intervall) speicher sie und analysiere sie sobald sich das programm aus dem ausgelesen wird beendet hat. nix cheat.
    habe gerade die laufzeit überprüft
    bei 10 runs:
    snapshot: 20.37 sekunden
    virtualquery: 21.007 sekunden

    liegt sehr nah bei einander 😃
    da ich die methode nur einmal brauche ist hier der unterschied marginal hmm

    wo ich schon mal hier bin, könnt ihr mir gute bücher über das winapi empfehlen?
    sollten nicht zu trocken sein (am besten gezielt über memory an sich oder so :D)

    schonmal danke 😉


Anmelden zum Antworten