Source code verschlampt, Funktion ausführen.



  • Hi,
    ich hab den Source Code von einem alten FunSpiel von mir nicht mehr, muss aber trotzdem was testen.
    An der Addresse 0056E3A4 von meinem Spiel ist ein
    "MOV DWORD PTR DS:[EDX+4],ECX"
    durch Breakpoints hab ich herausgefunden, dass ECX die neuen Lebenspunkte sind und in MOV DWORD PTR DS:[EDX+4] die aktuellen. Logischerweise ändern sich die Punkte wenn ich statt ECX nenn anderen Wert übergebe.
    Aber zu meinem Problem:
    Hier ist mein Code in einer DLL die ich injecte und dann sofort den code hier ausführe

    void *pointer= (void*)0x0056E3A4 ;
        __asm
        {
            mov ecx, 0x42C80000 // mein Wert
            call [pointer] // und "MOV DWORD PTR DS:[EDX+4],ECX" mit meinem ECX callen
        }
    

    Jedoch klappt das nicht, es ändert sich rein gar nichts. Ich will erst in ecx meinen Wert setzten und dann das mov aufrufen damit meine Punkte gesetzt werden.
    Wo ist mein denkfehler 😕



  • "MOV" ist kein "CALL".



  • ich meinte ich will die Zeile callen also das mov um genau zu sein



  • Probier's mal mit nem "jmp" und im Assembler-Forum.



  • Wieso schreibt ihr Kids nicht einfach rein dass ihr ein Spiel hacken wollt? Ich meine den Unfug mit Source-Code verschlampt glaubt doch eh keiner... 😕



  • Diese einzelne Instruktion wirst du bestimmt nicht aufrufen können.
    Patche es, leite es um oder schreibe selber in den Speicher.

    @Martin Richter:
    "Ach ne! Das glaube ich Dir nicht. Kein strcpy, kein sprintf, kein nix in der Richtung?
    Ich glaube es Dir nicht."
    War das Ironie?
    Falls nicht: Nein, wirklich nicht... keine CRT..



  • hustbaer schrieb:

    Wieso schreibt ihr Kids nicht einfach rein dass ihr ein Spiel hacken wollt? Ich meine den Unfug mit Source-Code verschlampt glaubt doch eh keiner... 😕

    Hab ich mir zwar auch gedacht aber...
    Irgendwie voll unpro, immer gleich zu meinen einer lügt, und wenn es so ist, ja mei...


  • Mod

    omylol schrieb:

    @Martin Richter:
    "Ach ne! Das glaube ich Dir nicht. Kein strcpy, kein sprintf, kein nix in der Richtung?
    Ich glaube es Dir nicht."
    War das Ironie?
    Falls nicht: Nein, wirklich nicht... keine CRT..

    Ich raffe hier grad nicht den Zusammmenhang...



  • scatter schrieb:

    hustbaer schrieb:

    Wieso schreibt ihr Kids nicht einfach rein dass ihr ein Spiel hacken wollt? Ich meine den Unfug mit Source-Code verschlampt glaubt doch eh keiner... 😕

    Hab ich mir zwar auch gedacht aber...
    Irgendwie voll unpro, immer gleich zu meinen einer lügt, und wenn es so ist, ja mei...

    Nein, garnicht "unpro". Realistisch.



  • An der Addresse 0056E3A4 von meinem Spiel ist ein
    "MOV DWORD PTR DS:[EDX+4],ECX"

    Okay die stelle bei der ers Aktualisiert scheinst du gefunden zu haben, aber die Register sind Speicher die ständig benutzt / geändert werden, und du kommst aus dem Nirvana, also würd ich dir raten erstmal Register sichern! ( Auf dem Stack )

    -- Befehl: pushad // Pusht die general-purpose register auf den stack
    -- " : popad // Füllt die general-purpose register nach der reihe mit den werten vom stack

    http://faydoc.tripod.com/cpu/pushad.htm

    So und jetzt meinst du.. du rufst die Funktion auf die die HP Aktualisiert, setzt das register, und dann ises drin...
    Das kann gut gehen, wenn die funktion die du da Callst in ihrer verwaltung auch gleich die HP auf das setzt was du ihr mitgibst, ist aber bei einer sauberen Programmierung unwarscheinlich.

    Also solltest du erstmal herrausfinden wo denn die HP genau gespeichert werden, step mal mit dem Debugger durch und guck aus welcher Speicherzelle ECX denn stammt. Am einfachsten wäre es wenn du eine statische Adresse über diverse Pointer findest. Dann könntest du einfach eine Dauerschleife / Timer machen der die HP immer wieder erneuert ( Cheat Engine - Freezen )... Sonst gäbe es die möglichkeit den Prozess über deinen zu Starten und über Breakpoints bei den stellen bei denen die HP verändert wurden ist ( Die Speicherzelle ) wieder auf einen größeren wert zu setzen ... gibt viele möglichkeiten

    Hier ist mein Code in einer DLL die ich injecte und dann sofort den code hier ausführe

    Meinst du hier deinen DLL entry point?
    Wenn du in einem Spiel nur einmal während die Dll geladen wird, deine HP setzt wirds dir nicht viel bringen, du musst so reinkommen das du just-in-time wenn du es brauchst deine HP "sicherst"

    Google mal inline patching oder hooking tutourials, gibts vieles zu den Themen


Log in to reply