Solitär Punktestad verändern Hilfe bitte



  • Ne, du musst einfach eine fixe Adresse in der exe finden. Entweder ne globale, oder im code segment suchen, wo die Adresse des Wertes verwendet wird.
    Generell ist ASLR kein Hindernis. Man kann einfach mit moduloffsets arbeiten.

    Tool: http://cheatengine.org



  • Du kannst dir auch einfach mit Cheat Engine den Disassembly anschauen und dann schauen was die Base Adresse ist.
    Falls dir das zu umständlich ist würde ich dir einen Pointer Scann empfehlen.
    Wenn du darauf auch kb hast dann mach einfache eine Code oder DLL Injection (Stichwört: Dll Injection 😃 , Function Hooking) .

    Hier ein kleines beispiel um die Punktzahl auf 2000 zu halten:

    Original Function:

    jmp SetValue   
    
    .... irgendwelcher code
    .... irgendwelcher code
    .... irgendwelcher code
    
    SetValue:
             mov [ebp-24],eax
    

    Code aus DLL bzw. Code Injection

    jmp CustomFunction  ; Springt zu einer Funktion die deinen Injecteten Code aufruft
    
    .... irgendwelcher code
    .... irgendwelcher code
    .... irgendwelcher code
    
    CustomFunction:
                  mov eax,2000
                  mov [ebp-24],eax
    

    DerNoob1993 schrieb:

    nur wenn ich dann in die Adresse den Wert schreiben will von value passiert einfach nichts

    Dann fang mal an zu Debuggen und schau was du da machst.^^

    - Kannst du Assembler?
    Wenn nein dann lern es.

    - Kennst du dich mit Reverse Code Engineering aus?
    Wenn nein dann lernen.

    Einen Einstieg ins Reverse Code Engineering bekommst du hier:
    http://tuts4you.com/download.php?list.17

    Den Kommentaren in deinem Quelltext nach zu urteilen hast du den Code 1:1 aus einem Tutorial übernommen, und somit wohl auch diese Adressen:

    unsigned adress = 0x000BB038; 
    unsigned offset1 = 0x5B4; 
    unsigned offset2 = 0x30; 
    unsigned adress2 = 0; 
    unsigned adress3 = 0; 
    unsigned adress4 = 0;
    

    Wobei wenn der Autor das selbe Solitär verwende hat sowie du sollte es mit den Pointern eigentlich keine Probleme geben.



  • Bassmaster schrieb:

    Du kannst dir auch einfach mit Cheat Engine den Disassembly anschauen und dann schauen was die Base Adresse ist.
    Falls dir das zu umständlich ist würde ich dir einen Pointer Scann empfehlen.
    Wenn du darauf auch kb hast dann mach einfache eine Code oder DLL Injection (Stichwört: Dll Injection 😃 , Function Hooking) .

    Hier ein kleines beispiel um die Punktzahl auf 2000 zu halten:

    Original Function:

    jmp SetValue   
    
    .... irgendwelcher code
    .... irgendwelcher code
    .... irgendwelcher code
    
    SetValue:
             mov [ebp-24],eax
    

    Code aus DLL bzw. Code Injection

    jmp CustomFunction  ; Springt zu einer Funktion die deinen Injecteten Code aufruft
    
    .... irgendwelcher code
    .... irgendwelcher code
    .... irgendwelcher code
    
    CustomFunction:
                  mov eax,2000
                  mov [ebp-24],eax
    

    DerNoob1993 schrieb:

    nur wenn ich dann in die Adresse den Wert schreiben will von value passiert einfach nichts

    Dann fang mal an zu Debuggen und schau was du da machst.^^

    - Kannst du Assembler?
    Wenn nein dann lern es.

    - Kennst du dich mit Reverse Code Engineering aus?
    Wenn nein dann lernen.

    Einen Einstieg ins Reverse Code Engineering bekommst du hier:
    http://tuts4you.com/download.php?list.17

    Den Kommentaren in deinem Quelltext nach zu urteilen hast du den Code 1:1 aus einem Tutorial übernommen, und somit wohl auch diese Adressen:

    unsigned adress = 0x000BB038; 
    unsigned offset1 = 0x5B4; 
    unsigned offset2 = 0x30; 
    unsigned adress2 = 0; 
    unsigned adress3 = 0; 
    unsigned adress4 = 0;
    

    Wobei wenn der Autor das selbe Solitär verwende hat sowie du sollte es mit den Pointern eigentlich keine Probleme geben.

    Danke auch dir für die Antwort,und nein ich habe den code nicht 1:1 übernommen.
    Ich habe schon verstanden was die verschiedenen Funktionen bewirken,und habe die Parameter auf meinen Quelltext angepasst ,und die Adressen hab ich erst recht nicht ausm Tut übernommen wo wäre da der sinn?Das würde ja zu 99,9999% nicht gehen vor allem da das Tut mit nem win xp betriebssystem erstellt wurde 🙂 .
    Ich habe mir verschiedene Tuts angeschaut und versucht es zu verstehen was gemacht wird und habe dann meinen Quelltext aus verschiedenen Tuts zusammengebastelt ( aber natürlich hab ich die Parameter,Adressen usw auf meinen Quelltext angepasst ,so blöd bin ich dann auch nicht 😃 )
    Ich wollte es eigentlich auch erstmal ohne dll injektion versuchen, aber ich denke mal es wird noch i-was mit den Adressen falsch sein weil am Quelltext selbst hat ja i-wie noch keiner nen groben Fehler gefunden woran es liegen könnte wenn ich das richtig sehe.An Debug rechten kann es nicht liegen ,da ich auch ohne mit WriteProcessmemory in eine Adresse schreiben kann( z.b. in eine der Adressen des Punktesads von Solitär,da sich die nach jedem Neustart aber natürlich verändert versuche ich das wie ichs jetzt mache mit Offsets und ner Base Adresse aber da wird wohl mein Fehler liegen schätze ich (Bei den Adressen).
    Ich habe es auch wie du oben erwähnt hast immer mit einem Pointer scan gemacht,und danach solitär neugestartet und geguckt ob der Pointer immernoch funktioniert.Dann hab ich die Adresse + die Offsets des Pointers miteingebunden aber es klappt nicht,Ich hab mal nen screenshot gemacht von dem mit Cheat engine gefundenen Pointer und den Offsets:
    http://epvpimg.com/OeaGb

    Die von mir Blau markierte Adresse sollte ja die Base adresse sein ,die Offsets 0x5B4 und 0x30 sieht man ja auch dort,dieser mit Cheat Engine gefundene Pointer funktioniert auch nach mehrfachen neustart von Solitär sollte also der richtige sein was mache ich nur falsch-.-



  • mapper schrieb:

    ....... Für WriteProcessMemory brauchst du wahrscheinlich auch Debugprivilegien. ........ .

    Nein braucht er nicht!

    @DerNoob1993
    Du solltest immer die Rückgabewerte prüfen!
    Und Du solltest OpenProcess so aufrufen.

    OpenProcess(PROCESS_VM_READ | PROCESS_VM_OPERATION | PROCESS_VM_WRITE , FALSE, pid);

    Ansonsten hast Du keine Rechte aus dem Zielprocess zu lesen.

    Um C++ zu lernen ist dass das falsche....



  • was ist der vorteil von dll injection gegenüber writeprocessmemory?



  • Lass dein Programm doch einfach mal die ganzen Zwischenschritte ausgeben und vergleiche mit dem was Cheat Engine anzeigt.
    Vermutlich ist 0xBB038 schonmal falsch. 0xBB038 ist < 1 MB, d.h. da musst du wohl noch die Load-Address draufaddieren (0x100000).



  • groderich schrieb:

    was ist der vorteil von dll injection gegenüber writeprocessmemory?

    Der das mann sich nicht erst das Handle und die Process Id holen muss ,und sich die anderen Rechte holen muss,da man dann direkt im Speicher ist(so habe ich es zumindest verstanden).



  • DerNoob1993 schrieb:

    Der das mann sich nicht erst das Handle und die Process Id holen muss ,und sich die anderen Rechte holen muss,da man dann direkt im Speicher ist(so habe ich es zumindest verstanden).

    o_O

    Also an einer DLL Injection gefällt mir das ich nicht mit den Opcodes rumhantieren muss.

    Beispiel:

    Angenommen du willst an die Adresse 401000 folgendes schreiben:

    jmp 12ff90
    

    In Assembler sieht das ja noch sehr übersichtlich aus, aber bei einer Code Injection schreibt man halt direkt die Opcodes an die passenden Adresse. Die richtigen Opcodes wäre in diesem Fall:

    E98BEFD2FF
    

    E9 steht für einen long jmp.

    Woher weiss man welche Opcodes man hier braucht?

    Manuelel Code Injection mit Cheat Engine oder einem Debugger seiner wahl machen und die Opcodes einfach abschreiben.^^

    Oder man rechnet folgendes: (Zieladresse - Quelladresse)-5

    Bsp:

    Zieladresse: 12ff90
    Quelladresse: 401000

    ( 12ff90 - 401000 ) -5 = FFFFFFFFFFD2EF8B
    Jetzt erst mal etwas formatieren: FF D2 EF 8B
    Und jetzt muss der Kram ins little endian Format, was ganz rechts steht schreibst du einfach an den Anfang also so: 8B EF D2 FF
    Wie du ja weisst steht E9 für einen long jump um das ganze zu vervollständigen schreibt man jetzt einfach: E9 8B EF D2 FF



  • Aber wie macht man das dann per dll-injection?



  • fischVegetarier schrieb:

    Aber wie macht man das dann per dll-injection?

    Tja, das würdest du wohl gerne wissen was. 😃

    1. In der MSDN allen möglichen kram über DLL´s lesen und hoffen das man selber drauf kommt. (Zeitintensiv)

    2. Kurz Googeln (Nicht Zeitintensiv)
    Ich hab mal für dich gegoogelt:

    http://www.elitepvpers.com/forum/tutorials/446037-code-dll-injection-tutorial.html

    http://www.elitepvpers.com/forum/coding-tutorials/1327704-c-game-hacking-via-dll-injection.html

    http://damiproductions.darkbb.com/t494-c-dll-injection-tutorial


Anmelden zum Antworten