Bisonte hat geschrieben:PS:Ich hoffe die Adressen die oben standen waren Hexwerte und keine Dezimalwerte
Sind Hexwerte.
Thorium hat geschrieben:Wenn du mehr Trainer schreiben möchtest, solltest du dich lieber ein wenig mit Assembler auseinandersetzen.
Wäre schon froh wenn ich einen Klassischen Trainer der mit Dynamischen Adressen zu recht kommt zum laufen krieg. Kannst mich aber gern auf ein paar Beispiele zum Thema Assembler mit Purebasic explizit zum Thema Trainer bau verweisen je mehr Input desto besser 

.
Thorium hat geschrieben:Cheat Engine hat nen Debugger dabei, der dir die Codestellen auflistet, welche auf die Speicheradresse zugreifen.
Ich weiß nur leider ist Cheat Engine bekannt so das sich damit nicht alles Hacken lässt es sei man kann Delphi/Lazarus um sich ein "Undetectable" Cheat Engine anhand des Source Codes kompilieren zu können. Deswegen bevorzuge ich da ein anderen Memory Scanner und einen Externen Debugger/Disassembler 

.
Na ja. wie dem auch sei krieg den Trainer trotzdem nicht hin 

.
Kompletter Test Source:
Code: Alles auswählen
Global PlantsVsZombiesTest
Procedure HackTheSun(*HackTheSun)
  Repeat
    Sleep_(0)
    If PlantsVsZombiesTest = 1
      hWnd = FindWindow_("MainWindow", "Plants vs. Zombies") ;Finde das Fenster Plants vs. Zombies
      GetWindowThreadProcessId_(hWnd, @PID) ;Ermittel den Process Identifier des Fensters Plants vs. Zombies
      hProcess = OpenProcess_(#PROCESS_ALL_ACCESS,0,PID) ;Öffnet den Prozess Plants vs. Zombies anhand des Process Identifier 
      BaseAddress = $189190 ;Die BaseAdress der Sonne
      OffsetSun = $21880  ;Der Offset der Sonne
      NewValue = 1337    ;Der neue Wert
      ReadProcessMemory_(hProcess, BaseAddress, @BasePointer, 4, 0) ;Liest die BaseAddresse aus und übergiebt ihn an den BasePointer
      WriteProcessMemory_(hProcess, BasePointer + OffsetSun, @NewValue, 4, 0) ;Addire den BasePointer mit OffsetSonne und Überschreibe den alten Wert im Speicher durch den neuen   
    EndIf
  ForEver
EndProcedure
If OpenWindow(0, 0, 0, 100, 70, "DMA Test Trainer", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  ButtonGadget(0, 10, 10, 155, 50, "PRESS TO HACK")
  Repeat
    Event = WaitWindowEvent()
    If Event = #PB_Event_Gadget
      Select EventGadget()
        Case 0
          If PlantsVsZombiesTest = 0
            SetGadgetText(0, "HACK IS ON")
            CreateThread(@HackTheSun(),0)
            PlantsVsZombiesTest = 1
          Else
            PlantsVsZombiesTest = 0
            SetGadgetText(0, "HACK IS OFF")
          EndIf
      EndSelect
    EndIf
  Until Event = #PB_Event_CloseWindow
EndIf