POINERRRR



  • Das ist mir bewusst. Der gesamte Speicher wird aber vom Betriebssystem kontrolliert und es schützt alle Adressen vor direktem Zugriff aus dem Ring 3 - bis auf die Adressen im Data-Segment der eigenen Applikation.

    Du musst mit Hilfe einer OS-API-Funktion in einen inneren Ring kommen der die nötigen Rechte hat andere Adressen zu verändern.

    Es ist sehr löblich, dass du ein erfahrenerer Programmierer werden willst, aber das wird man nicht dadurch, dass man sich ein für den derzeitigen Kenntnisstand viel zu schwieriges Projekt aussucht.

    MfG SideWinder



  • SeppJ schrieb:

    iHofel schrieb:

    und warum schfft es dan cheat engine ? 😃

    Es ist ja nicht unmöglich. Man muss eben eine Anfrage an das Betriebssystem stellen, auf den fremden Prozessspeicher zugreifen zu dürfen. Das ist auch an sich nicht weiter schwierig. Man muss aber natürlich die entsprechenden Rechte haben.

    Wir sagen nur, dass du es nicht kannst. Du weißt nicht einmal was ein Pointer zu benutzen ist, geschweige denn, wie virtueller Prozessspeicher funktioniert. Und das ist nur das absolut nötigste, um überhaupt etwas zu sehen. Um gezielt etwas zu ändern, da muss man auch verstehen, was man da tut, also wie das fremde Programm funktioniert.

    ich weiß was sich pointer bringen -.- Zb Es gib Heap und Steak New und Delete Konstante Zeiger und es gibt auch Zeiger und Funktionen bla bla bla



  • LEUTE ich will nur die var in meinen kleinen CMD Programm ändern nicht auf dem betriebsystem -.-



  • iHofel schrieb:

    LEUTE ich will nur die var in meinen kleinen CMD Programm ändern nicht auf dem betriebsystem -.-

    Nein, du willst die eingegebene Adresse ändern und die liegt nunmal höchstwahrscheinlich NICHT innerhalb des Adressraums deines Programms.

    Es ist schön, dass du weißt, was ein Zeiger in C++ ist, es fehlt dir aber schlichtweg das nötige Computer-Wissen dazu. Das kannst du dir erstmal sogar via Wikipedia beibringen.

    Es hat keinen Sinn dir hier irgendeinen Copy&Paste-Code zu liefern. Wenn du diesen willst downloade ein OpenSource-Cheat-Programm und sieh dort nach.

    int addr = 0;
    cin >> addr;
    
    int* ptr = static_cast<int*>(addr);
    *ptr = 5; // most probably crash
    

    Warum crash? Weil du eben doch außerhalb deines eigenen Programmes auf Speicher zugreifst, das Betriebssystem verhindert das. Glaub's mir. Das hat nichts mit "auf dem betriebssystem" zu tun.

    MfG SideWinder



  • Dafuer ist uebrigens ein reinterpret_cast erforderlich, ausserdem empfiehlt sich die benutzung von uintptr_t. :p



  • SideWinder schrieb:

    iHofel schrieb:

    LEUTE ich will nur die var in meinen kleinen CMD Programm ändern nicht auf dem betriebsystem -.-

    Nein, du willst die eingegebene Adresse ändern und die liegt nunmal höchstwahrscheinlich NICHT innerhalb des Adressraums deines Programms.

    Es ist schön, dass du weißt, was ein Zeiger in C++ ist, es fehlt dir aber schlichtweg das nötige Computer-Wissen dazu. Das kannst du dir erstmal sogar via Wikipedia beibringen.

    Es hat keinen Sinn dir hier irgendeinen Copy&Paste-Code zu liefern. Wenn du diesen willst downloade ein OpenSource-Cheat-Programm und sieh dort nach.

    int addr = 0;
    cin >> addr;
    
    int* ptr = static_cast<int*>(addr);
    *ptr = 5; // most probably crash
    

    Warum crash? Weil du eben doch außerhalb deines eigenen Programmes auf Speicher zugreifst, das Betriebssystem verhindert das. Glaub's mir. Das hat nichts mit "auf dem betriebssystem" zu tun.

    MfG SideWinder

    ok ich habs jetzt kapiert ich brauch bessere kenntise also kann man einach nicht auf die addresse zugreifen ok

    und was muss ich jetzt lernen damit ih kapier wie man die sperre vom betriebsystem umgeht ? 🙂 😕



  • Kellerautomat schrieb:

    Dafuer ist uebrigens ein reinterpret_cast erforderlich, ausserdem empfiehlt sich die benutzung von uintptr_t. :p

    also muss ich ne headerdatei eingeben um cast zuverwenden ? :0 ?



  • @Kellerautomat: Danke, von uintptr_t hatte ich noch nichts gehört 🙂

    @iHofel: Unter Windows:
    Allgemeines Verständnis bzgl. physikalischem und virtuellem Speicher
    Paging
    Verstehen des Memory Managements unter Windows
    dazugehörige API (also allokieren von Speicher mit WinAPI-Funktionen statt mit new/delete)
    Prozesse und Prozessrechte unter Windows
    WriteProcessMemory()

    MfG SideWinder



  • SideWinder schrieb:

    @iHofel: Unter Windows:
    Allgemeines Verständnis bzgl. physikalischem und virtuellem Speicher
    Paging
    Verstehen des Memory Managements unter Windows
    dazugehörige API (also allokieren von Speicher mit WinAPI-Funktionen statt mit new/delete)
    Prozesse und Prozessrechte unter Windows
    WriteProcessMemory()

    MfG SideWinder

    und kannst du mir zeigen wie ich WriteProcessMemory() verwenden kann oder was ich in den parameter schreiben muss oder dergleichen n skript zum zeigen währ nicht schlecht falls du dir die zeit nimmst 🙂



  • C++ ist keine Scriptsprache.



  • Kellerautomat schrieb:

    C++ ist keine Scriptsprache.

    coden ?



  • Bevor du WriteProcessMemory() verwenden sollst, solltest du dir die 5 Punkte darüber ansehen und verstehen. Copy & Paste von http://noz3001.wordpress.com/2009/10/07/writeprocessmemory-examples/ wird zwar funktionieren, wird dich aber nicht zu einem erfahreneren Programmierer erheben.

    MfG SideWinder



  • Danke links sind immer gut 🙂


Anmelden zum Antworten