Inline Assembler RAM



  • [quote="life"]26 Beiträge innerhalb von 2 tagen .. nicht schlecht .. tt[/quote]

    scheißegal-interessiert sowieso nur die Leute hier im Forum... 🙂



  • Nix Assembler. Nimm WriteProcessMemory.



  • wo wir grad dabei sind: wie schafft mans die speicheradresse für einen Wert, z.b. die Gesundheit in einem SPiel heraus zu finden?

    es wäre ja möglich alles durch zu scannen, dann seinen health wert im spiel zu verändern und dann wieder zu scannen und zu schauen was sich verändert hat aber wie scannt man dann alles durch? o_O *ahnungslosbin*^^

    theduke



  • Ja, ich wollte eine Schleife proggen, die am Levelstart den ganzen Arbeitsspeicher ausließt. Bsp.: Health == 100 --> Speichert alle Variablen, die Hundert sind und ihre Adressen. Während des Spiels (Health == 0; 76, 33 ...) lässt mann die Funktion dann noch mehrmals durchlaufen (gespeicherten Adressen nochmal abschecken ), sodass alle Fremden Variablen ausschließen kann.
    In Konsole dürfte es scnell geschrieben sein. API is auch kein Problem!

    Hab nur keine Assembler Kenntnisse 😡



  • the-duke schrieb:

    wo wir grad dabei sind: wie schafft mans die speicheradresse für einen Wert, z.b. die Gesundheit in einem SPiel heraus zu finden?

    es wäre ja möglich alles durch zu scannen, dann seinen health wert im spiel zu verändern und dann wieder zu scannen und zu schauen was sich verändert hat aber wie scannt man dann alles durch? o_O *ahnungslosbin*^^

    Man kann z.B. einen Windows-Hook an Tastatur-Events binden. Fuer den Hook schreibt man eine DLL, die von Windows automatisch in den Speicher jedes Prozesses gemappt wird. Im Eventhandler scannt man dann den Speicher des Prozesses durch. Nuetzlich auch die TOOLHLP DLL in dem Zusammenhang.



  • Dum meinst, dass man nur während es Spiels ne (bestimme) Taste drückt, und schon scannt er die verdächtigen Adressen??



  • Tc++H schrieb:

    Dum meinst, dass man nur während es Spiels ne (bestimme) Taste drückt, und schon scannt er die verdächtigen Adressen??

    Ja.



  • Sorry, sehr grad, dass ich mich verschriben habe "Dum". Scheint eine gute IDEE zu sein, aber hast du asm Kenntnisse???



  • Tc++H schrieb:

    Sorry, sehr grad, dass ich mich verschriben habe "Dum". Scheint eine gute IDEE zu sein, aber hast du asm Kenntnisse???

    Ja.



  • Das, was Du eigentlich in Assembler machen wolltest, geht aber auch in C++:

    int getValue( unsigned int address )
    {
       return *((int*)address);
    }
    
    void SetValue( unsigned int address, int value )
    {
       *((int*)address) = value;
    }
    


  • Kennt jemand Funktionen, mit den man auf die Audio-, Grafik-, Systemhardware zugreifen kann??
    Und ich such ne Funktion, mit der ich den Computer ausschalten, bzw. Neustarten kann.



  • int getValue( unsigned int address )
    {
       return *((int*)address);
    }
    
    void SetValue( unsigned int address, int value )
    {
       *((int*)address) = value;
    }
    

    Das kann so nicht gehen (virtuelle Adressräume). Wie ein Vorposter schon gesagt hat, unter Windows musst Du mit ReadProcessMemory und WriteProcessMemory den Speicher eines anderen Prozesses in deinen eigenen Speicherbereich mappen. Dann kann man fröhlich drauf rumturnen.

    Zum Neustarten kannst Du übrigens den großen runden Knopf auf der Vorderseite deines Rechners benutzen 😉



  • Tc++H schrieb:

    Kennt jemand Funktionen, mit den man auf die Audio-, Grafik-, Systemhardware zugreifen kann??

    Direkt auf die Hardware zugreifen kann man unter Windows nur, wenn man einen Treiber schreibt (dafuer gibt's den DDK von Microsoft).

    Ansonsten bleiben einem nur die diversen System-APIs, z.B. den Windows API, DirectX usw.



  • Ich hab ne Konsolenanwendung mit VC++ 6.0 angelegt und die Funktioen eingebunden.

    void main()
    {
    getValue(34465);
    }
    

    --> Das Programm stürzt ab Warum?? Ich hab auch mal nen Hexadezimal Wert übergeben, stürzt trotzdem ab.



  • Lies mal meinen vorherigen Beitrag. Diese Adresse gehört dir nicht und zeigt ins Nirvana. Zusätzlich ist sie unaligned. Deshalb *knall* *bumm* *peng* *aua*



  • Un wie kann ich nun auf den Arbeitsspeicher zugreifen und die Werte auslesen, auch wenn die Adresse nicht "meine" ist?



  • Du kommst nicht einfach an den Arbeitsspeicher. Es gibt nur virtuelle Adressräume, die das BS für dich verwaltet. Adresse 0x12345678 ist in jedem Prozess eine andere physikalische. Und Adressen eines anderen Prozesses kannst Du so nicht einsehen. Dafür brauchst Du unter Windows z.B. ReadProcessMemory und dazu dann WriteProcessMemory.


Anmelden zum Antworten