|
You last visited: Today at 14:40
Advertisement
Pointer und Offsets Finden und Scripten! Autoit
Discussion on Pointer und Offsets Finden und Scripten! Autoit within the AutoIt forum part of the Coders Den category.
01/17/2014, 17:55
|
#1
|
elite*gold: 0
Join Date: Mar 2010
Posts: 7
Received Thanks: 0
|
Pointer und Offsets Finden und Scripten! Autoit
Hallo Pvpers^^
Ich möchte per Autoit ein Programm schreiben, welches mir aus WoW Version 3.3.5a die aktuellen Lebenspunkte ausliest und diese in einer MsgBox ausgibt. Habe dazu jedes erdenkliche Tutorial aus dem Internet durchgearbeitet, komme aber einfach nicht weiter.
Als erstes habe ich mit CE die Pointer mit Offsets ausgelesen.
Auf die Base Adresse werden Werte addiert und dann verweist diese Adresse auf den Wert. Habe ich das richtig verstanden?
Jetzt wähle ich irgendeinen aus oder?
Aber was genau ist davon die Baseadresse?
Und was hat dieses "WoW.exe" vor manchen Adressen zu suchen?
Wie setzte ich das in Autoit um?
Ich benutze die NomandMemory.au3.
Vielen Dank!
|
|
|
01/17/2014, 19:08
|
#2
|
elite*gold: 0
Join Date: Nov 2011
Posts: 317
Received Thanks: 32
|
Also, verstehe nicht ganz wie du gesucht hast?
also es gibt eig. einige wege das zu machen aber ich nenne dir hier mal 2:
1.Exact Value , 4Bytes
2.gebe deine HP Anzahl ein und suche dannach
3.lasse dich schlagen das du ein paar -HP Punkte bekommst ODER das beste was du
machen kannst ist, zieh ein "EQ" teil aus und dan hast ja sowieso - HP wenn das eq teil HP dazu gibt
4. gebe dan diese HP in CE ein und suche dannach
5.mache weiter so bis du die "Adresse" gefunden hast.(eig. nach 2-3x suchen solltest du sie schon haben)
aderes beispiel:
1.Exact value
2.gebe deine HP ein
3.lasse dich schlagen
4.suche in CE nach "Value decresed by"
5.lasse dich wider hauen
6.das gleiche etc... bis du sie findest.
Nähstes beispiel:
per "String" suchen, also wie du siehst gibt es mehrere möglichkeiten
und mit dem script rufst du die Adresse per MsgBox auf:
#RequireAdmin
#include <NomadMemory.au3>
Global $PlayerMaxHPOut
Func AionMemoryRead()
SetPrivilege("SeDebugPrivilege", 1)
$ID=_MemoryOpen(ProcessExists("Game.exe"))
;STATIC POINTER Max HP
$PlayerMaxHPPointer = 0x116798C4
$PlayerMaxHP = _MemoryRead($PlayerMaxHPPointer, $ID)
$PlayerMaxHPOut = $PlayerMaxHP
_MemoryClose($ID)
EndFunc
AionMemoryRead()
MsgBox(0,"Test",$PlayerMaxHpOut)
EDIT: Hier hast du noch den Code zum Pointer ausgeben
ACHTUNG du musst yeh nach scaN/value type "Dword" etc... austauschen sonst bekommst du einen falschen wert raus
#RequireAdmin
#include <NomadMemory.au3>
$Value = _Pointer()
MsgBox(0,"", "Value: " & $Value)
Func _Pointer()
Local $Base = 0x00400000, $Staticoffset = 0x00231360
Local $hOpen, $sRead
$hOpen = _MemoryOpen( ProcessExists("Tutorial-i386.exe"))
$sRead = _MemoryRead($Base + $Staticoffset, $hOpen, 'dword') + 0x0
$sValue = _MemoryRead($sRead , $hOpen, 'dword')
$write = _MemoryWrite($sRead, $hOpen, "5000", 'dword')
_MemoryClose($hOpen)
Return $sValue
EndFunc
|
|
|
01/17/2014, 21:47
|
#3
|
elite*gold: 0
Join Date: Mar 2009
Posts: 7,260
Received Thanks: 33,147
|
Ich habe mein Beispielscript entsprechend angepasst. Ich habe den 1. Pointer des Screenshots verwenden:
Code:
#AutoIt3Wrapper_UseX64=n ; 32 Bit application
;~ #AutoIt3Wrapper_UseX64=y ; 64 Bit application
#RequireAdmin
#include "KDMemory.au3"
Dim $handles = 0, $address = 0, $tmpError = 0, $tmpData[2]
Const $processName = "Wow.exe", $moduleName = $processName
Const $baseOffset = 0x0026B8D8
Const $offsetsValue[2] = [0x58, 0x68]
GUICreate("Example", 200, 40)
$lbl_Info = GUICtrlCreateLabel("Waiting for '" & $processName & "'...", 5, 5, 190, 30)
GUISetState()
While True
;~ Sleep()
$msg = GUIGetMsg()
Switch $msg
Case -3 ; $GUI_EVENT_CLOSE
Exit
EndSwitch
$processId = ProcessExists($processName)
If $processId == 0 Then
If IsArray($handles) Then
_KDMemory_CloseHandles($handles)
$handles = 0
$address = 0
GUICtrlSetData($lbl_Info, "Waiting for '" & $processName & "'...")
EndIf
ContinueLoop
EndIf
If $handles == 0 Then
$handles = _KDMemory_OpenProcess($processId)
If @error Then
If MsgBox(52, "Error", "Can't open '" & $processName & "'!" & @CRLF & "@error: " & @error & @CRLF & @CRLF & "Continue?") == 6 Then
$handles = 0
ContinueLoop
Else
Exit
EndIf
EndIf
EndIf
If $address == 0 Then
$address = _KDMemory_GetModuleBaseAddress($handles, $processName) + $baseOffset
If @error Then
If MsgBox(52, "Error", "Can't get ModuleBaseAddress '(" & $moduleName & ")'!" & @CRLF & "@error: " & @error & ", @extended: " & @extended & @CRLF & @CRLF & "Continue?") == 6 Then
$address = 0
ContinueLoop
Else
Exit
EndIf
EndIf
EndIf
$memoryData = _KDMemory_ReadProcessMemory($handles, $address, "DWORD", $offsetsValue)
If @error Then
If $tmpError <> @error Then
$tmpError = @error
GUICtrlSetData($lbl_Info, "Can't read memory!" & @CRLF & "@error: " & @error & ", @extended: " & @extended)
EndIf
Else
If $tmpData[0] <> $memoryData[0] Or $tmpData[1] <> $memoryData[1] Then
$tmpData = $memoryData
GUICtrlSetData($lbl_Info, "Address: " & $memoryData[0] & @CRLF & "Value: " & $memoryData[1])
EndIf
EndIf
WEnd
|
|
|
01/18/2014, 12:02
|
#4
|
elite*gold: 0
Join Date: Mar 2010
Posts: 7
Received Thanks: 0
|
Vielen Dank erstmal
KDeluxe ich habs mit deinem vorgefertigtem Script probiert und es läuft super.
Aber wenn ich nun mit deiner KDMemory arbeite bekomme ich keine Rückantwort.
Hier mein Script
#RequireAdmin
#include<KDMemory.au3>
$base=0x006DB754
$offsetsValue[5] = [0x24,0x24,0x3c,0x4c,0x68]
$pid=WinGetProcess("World of Warcraft")
$handle=_KDMemory_OpenProcess($pid)
$hp=_KDMemory_ReadProcessMemory($handle,$base,"DWO RD",$offsetsValue)
MsgBox(0,"",$hp)
|
|
|
01/18/2014, 12:43
|
#5
|
elite*gold: 64
Join Date: May 2011
Posts: 1,228
Received Thanks: 847
|
Hängt vielleicht an:
1. die Variable $hp ist eine Array, also:
[0] = Addresse, [1] = Value
2. Da steht "DWO RD", soll es nicht "DWORD" heißen?
Also die Space.
3. Du hast $offsetsValue[5] einfach so Deklariert ohne "Dim, Global, Local".
Das sollte doch ein Fehler geben.
4. Dein Process wird nicht von WinGetProcess gefunden.
Solltest dir das mal alles anschauen.
|
|
|
01/18/2014, 13:04
|
#6
|
elite*gold: 0
Join Date: Mar 2010
Posts: 7
Received Thanks: 0
|
Hab alle Punkte von dir beachtet, aber bekomme wieder keine MsgBox :/
1. Array habe ich geändert. Stimmt das so?
2. Das DWORD ist richtig geschrieben, irgendwie ein Anzeigefehler im Forum.
3. Variablen habe ich jetzt mit Dim deklariert.
4. PID wird gefunden. Habe zum testen eine ini anlegen lassen, in dieser steht die richtige PID, habs mit dem Taskmanager abgeglichen.
Kann es sein das ich ein Fehler wegen meinem 64bit System habe? In der KDMemory steht ja was davon.
Hab grad etwas herausgefunden, wenn ich unten bei der MsgBox bei $hp das [1] weglasse bekomme ich eine MsgBox mit FALSE
neues Script ->
#RequireAdmin
#include<KDMemory.au3>
Const $pid=WinGetProcess("World of Warcraft")
Const $base=0x006DB754
Const $offsetsValue[5] = [0x24,0x24,0x3c,0x4c,0x68]
IniWrite("pid","1","1",$pid)
$handle=_KDMemory_OpenProcess($pid)
$hp=_KDMemory_ReadProcessMemory($handle,$base,"dwo rd",$offsetsValue)
MsgBox(0,"",$hp[1])
|
|
|
01/18/2014, 13:07
|
#7
|
elite*gold: 64
Join Date: May 2011
Posts: 1,228
Received Thanks: 847
|
Kann es sein, dass deine Base-Address falsch ist?
Die ist nicht in jedem Spiel "0x400000".
Lass sie dir mal so ausgeben:
Code:
MsgBox(0,"",_KDMemory_GetModuleBaseAddress($handles, "Wow.exe"))
|
|
|
01/18/2014, 13:42
|
#8
|
elite*gold: 0
Join Date: Mar 2010
Posts: 7
Received Thanks: 0
|
Vielen Dank BladeTiger,
Du hattest recht die Baseadresse ist 0x400000 und auf diese habe ich meine vorherige Baseadresse addiert. Jetzt klappt alles wunderbar.
Hier nochmal der fertige Script mit dem es funktioniert!
#RequireAdmin
#include<KDMemory.au3>
Dim $pid=WinGetProcess("World of Warcraft")
Dim $base=0x400000+0x006DB754
Dim $offsetsValue[5] = [0x24,0x24,0x3c,0x4c,0x68]
$handle=_KDMemory_OpenProcess($pid)
$hp=_KDMemory_ReadProcessMemory($handle,$base,"DWO RD",$offsetsValue)
MsgBox(0,"",$hp[1])
|
|
|
01/18/2014, 16:50
|
#9
|
elite*gold: 0
Join Date: Mar 2009
Posts: 7,260
Received Thanks: 33,147
|
Es macht mich immer wieder traurig wenn ich sehe, wie ein ~ 40 Zeilen Script auf acht Zeilen minimiert wird. Weniger Code ist besser, das ist aber lange kein Grund gänzlich auf eine Fehlerbehandlung zu verzichten. Wenn ein Fehler nicht ausgeschlossen werden kann, was hier definitiv nicht möglich ist, so kann dieser Fall nicht einfach ignoriert werden. Wenn du halbwegs vernünftig programmieren möchtest solltest du das im Hinterkopf behandeln.
|
|
|
01/19/2014, 13:52
|
#10
|
elite*gold: 0
Join Date: Mar 2010
Posts: 7
Received Thanks: 0
|
Ja das ist mir völlig klar, aber ich wollte erstmal die Kernfunktion zum laufen bringen und begreifen, später baue ich dann natürlich auchnoch Fehlerbehandlungen mit ein.
|
|
|
|
Similar Threads
|
Pointer/Pointer finden (problem)
01/08/2014 - AutoIt - 7 Replies
Hallo Leute.
Bin schon seid einigerzeit am suchen bzw. rumtesten wie ich
"die Adresse der Koordinaten der hingeklickten Stelle"
finden kann ... :S
will ein bot erstellen und damit er im hintergrund aufen kann brauche ich:
Meine character coordinaten/Pointer ( Habe ich)
und jetzt muss ich die coordinaten der hingeklickten stelle finden bzw. die adresse aber iwie klappt nix x,x ... finde immer einige adressen und den pointer meines charas , der Pointer der coordinaten meines charas...
|
Cheat engine pointer finden und in autoit verwenden
03/05/2013 - AutoIt - 12 Replies
Würde gern die Punktzahl in einem Spiel verändern, Wert finden und über CE ändern kein Problem, die Adresse ändert sich jedoch bei Neustart des Spiels...
ich weiß, das ich jetzt einen Pointer und dessen Offset benötige, ich habe auch schon gegoogelt und viel ausprobiert, jedoch finde ich den Pointer nicht?
Ich habe probiert: Rechtsklick auf die Adresse, find out what writes to this adress, dann bekomm ich auch werte raus, wenn ich dann auf mehr anzeigen klicke ist eins rot unterlegt: 0042B727...
|
Einfache Pointer/Offsets mit IDA Pro finden
08/22/2012 - Coding Tutorials - 12 Replies
Hey,
das ist jetz mein erstes Tutorial auf Epvpers, also verzeiht mir bitte wenn ich etwas falsch mache :handsdown:
Benötigte Programme:
IDA Pro: http://www.hex-rays.com/idapro/idadown.htm
Hex-Rays Decompiler Plugin: http://www.hex-rays.com/decompiler.shtml ( Optional aber nur zu empfehlen ;)
|
Pointer + Offsets in AutoIt beschreiben
06/03/2010 - AutoIt - 48 Replies
Also ein HI an alle AutoIt'ler,
Erstmal ich bin AutoIt Anfänger.:D (nur so zur Info)
Jetzt auch schon sofort zur Frage:
Ich hab im Spiel "4story"(online Game) den Pointer + 2 Offsets für die Adresse gefunden ,die mich durch Beeinflussen
entweder sichtbar oder unsichtbar erscheinen lässt.
Dazu ein Screen aus Moonlight Engine
http://www.imagebanana.com/img/fer4fsx9/PointerOf fset.bmp.png
|
All times are GMT +2. The time now is 14:40.
|
|