Hellow leidenschaftliche Coder:mofo:
Vor kurzem habe ich angefangen, zu versuchen ein Hack(später dann ein Trainer) für Age Of Empires II zu schreiben. Ich habe die Pointer der Ressourcen gefunden und sie sind statisch. Nur habe ich allerdings Probleme dies in ein Programm zu verwickeln.
Hier ist der Pointer mit den Offsets in Cheatengine
[Only registered and activated users can see links. Click Here To Register...]
Für mich zum verstehen, wird dies so "gerechnet" das als erstes der Wert der Adresse "AoK HD.exe"+00527378 ausgelesen wird und in dem Fall wäre dies 12A1E00 dies wird dann + C gerechnet und dies wiederum ist eine Adresse, der den Wert 12532980 enthält usw.. ?
Habe auch schon mit C# versucht, mit schon bestehenden Klassen von anderen, doch ich denke da AutoIt noch recht einfach zu verstehen ist und ich schon etwas länger damit rumprobiert habe, ist es für mich auch einfacher.
freue mich auf jede Hilfe
Vor kurzem habe ich angefangen, zu versuchen ein Hack(später dann ein Trainer) für Age Of Empires II zu schreiben. Ich habe die Pointer der Ressourcen gefunden und sie sind statisch. Nur habe ich allerdings Probleme dies in ein Programm zu verwickeln.
Code:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <NomadMemory.au3>
#RequireAdmin
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("AoE 2 - Hack", 253, 36, 200, 122)
$Button1 = GUICtrlCreateButton("Holz", 160, 8, 25, 17, $WS_GROUP)
GUICtrlSetFont(-1, 8, 400, 0, "Palatino Linotype")
$Button2 = GUICtrlCreateButton("Off", 192, 8, 25, 17, $WS_GROUP)
GUICtrlSetFont(-1, 8, 400, 0, "Palatino Linotype")
$Input1 = GUICtrlCreateInput("", 80, 8, 73, 19)
GUICtrlSetFont(-1, 6, 400, 0, "Palatino Linotype")
$Label1 = GUICtrlCreateLabel("Holz", 8, 8, 58, 20)
GUICtrlSetFont(-1, 8, 400, 0, "Palatino Linotype")
$Graphic1 = GUICtrlCreateGraphic(224, 8, 25, 17)
GUICtrlSetColor(-1, 0x000000)
GUICtrlSetBkColor(-1, 0xFF0000)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
$GamePid = ProcessExists("AoK HD.exE")
If($GamePid) Then
$GameHandle = _MemoryOpen($GamePid)
Else
MsgBox(0,"Error","Prozess existiert nicht, oder ist noch nicht offen")
Exit
EndIf
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
_MemoryClose($GameHandle)
Exit
Case $Button1
_GiveHolz($GameHandle,GUICtrlRead($Input1))
Case $Button2
_ZeigAn($GameHandle)
EndSwitch
WEnd
Func _Zeig($GameHandle)
$BaseAdresse = 0x527378
Dim $Offset[3]
$Offset[0] = 12
$Offset[1] = 168
$Offset[2] = 4
MsgBox(0,"",$BaseAdresse)
;~ $Werto = _MemoryGetBaseAddress($GameHandle,1)
;~ MsgBox(0,"BaseAdress",$Werto)
;~ $Wert = _MemoryRead(0x15E8FB40, $GameHandle)
;~ MsgBox(0,"Wert",Hex($Wert))
;~ MsgBox(0,"BaseAdress",$BaseAdresse)
;~ $BaseAdresse = $Wert + $Offset[$i]
;~ MsgBox(0,"BaseAdress",$BaseAdresse)
;~ MsgBox(0,"",$BaseAdresse)
EndFunc
#cs
Hier habe ich versucht auch ohne PointerRead/Write zu machen. Auch schon in einer For-Schleife. Einfach die Offsets selber addieren
und den Wert der Adresse auslesen und so weiter..
#ce
Func _ZeigAn($GameHandle)
$BaseAdresse = 0x00527378
$BaseAdresse_New = _MemoryRead($BaseAdresse, $GameHandle)
Dim $Offset[3]
$Offset[0] = 12
$Offset[1] = 168
$Offset[2] = 4
for $i=0 To UBound($Offset) Step 1
$BaseAdresse = $BaseAdresse_New + $Offset[$i]
if($i==3) Then ExitLoop(1)
$BaseAdresse_New = _MemoryRead($BaseAdresse, $GameHandle)
Next
MsgBox(0,"Holz","Anzahl: '"&_MemoryRead($BaseAdresse, $GameHandle,"FLOAT" )&"'")
;~ Dim $back[2]
;~ $back = _MemoryPointerRead($BaseAdresse, $GameHandle, $Offset, "FLOAT")
;~ MsgBox(0,"Holz",@error)
;~ MsgBox(0,"Holz","Anzahl: '"&$back[0]&"' "&$back[1])
EndFunc
Func _GiveHolz($GameHandle,$Value)
$BaseAdresse = 0x123296A4
Dim $Holz[4]
$Holz[0] = 0
$Holz[1] = 0x334
$Holz[2] = 0xA8
$Holz[3] = 0x2C
_MemoryWrite($BaseAdresse, $GameHandle, $Value, "FLOAT") ;Funktioniert aber nur mit einer Dynamischen Adresse
;_MemoryPointerWrite($BaseAdresse, $GameHandle,$Holz, $Value, "FLOAT") Funktioniert nicht, zwar gibt es kein Error-Code aber der Wert wird nicht eingetragen
MsgBox(0,"",@error)
GUICtrlSetBkColor($Graphic1, 65280)
EndFunc
Func _Exit()
Exit
EndFunc
Hier ist der Pointer mit den Offsets in Cheatengine
[Only registered and activated users can see links. Click Here To Register...]
Für mich zum verstehen, wird dies so "gerechnet" das als erstes der Wert der Adresse "AoK HD.exe"+00527378 ausgelesen wird und in dem Fall wäre dies 12A1E00 dies wird dann + C gerechnet und dies wiederum ist eine Adresse, der den Wert 12532980 enthält usw.. ?
Habe auch schon mit C# versucht, mit schon bestehenden Klassen von anderen, doch ich denke da AutoIt noch recht einfach zu verstehen ist und ich schon etwas länger damit rumprobiert habe, ist es für mich auch einfacher.
freue mich auf jede Hilfe