Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > AutoIt
You last visited: Today at 23:12

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Multilevelpointer in Autoit verwenden

Discussion on Multilevelpointer in Autoit verwenden within the AutoIt forum part of the Coders Den category.

Reply
 
Old   #1
 
Paraly's Avatar
 
elite*gold: 27
Join Date: Sep 2009
Posts: 5,592
Received Thanks: 1,596
Multilevelpointer in Autoit verwenden

Heyho ich habe einen Multilevelpointer von dem Spiel Aion zwar in CE gefunden aber ich bekomm ihn einfach nicht in Autoit eingebunden, hab schon wie verrückt gegoogelt aber ich bekomms nicht hin
hoffe ihr könnt mir da weiterhelfen


So siehts in CE aus




und so sieht mein bisheriger code aus
Code:
#RequireAdmin  
#include <Pointer.au3>  

HotKeySet("{F1}", "_Read")  

$PID = ProcessExists("aion.bin")  
If $PID > 0 Then  
    $Handle = _MemoryOpen($PID)  
    $Address = _MemoryModuleGetBaseAddress(ProcessExists("aion.bin"), "Game.dll")  
    $Address = "0x" & Hex($Address + Dec("00FB22BC"))  
    Dim $Offset[6] = [ 0, 0x5d4, 0, 0x248, 0x208, 0x264]  
Else  
    Exit  
EndIf  

While True  
    Sleep(10)  
WEnd  

Func _Read()  
    $Read = _MemoryPointerRead($Address, $Handle, $Offset, "float")  
    MsgBox(0, "", $Read[1])  
 EndFunc
Paraly is offline  
Old 07/08/2013, 11:44   #2

 
BladeTiger12's Avatar
 
elite*gold: 64
Join Date: May 2011
Posts: 1,228
Received Thanks: 847
Code:
#RequireAdmin
#include <Pointer.au3>

HotKeySet("{F1}", "_Read")

Global $Address, $PID, $Handle
Dim $Offset[5] = [ 0x5d4, 0x0, 0x248, 0x208, 0x264]

$PID = ProcessExists("aion.bin")
If $PID > 0 Then
    $Handle = _MemoryOpen($PID)
    $Address = _MemoryModuleGetBaseAddress($PID, "Game.dll")
    $Address = $Address + 0x00FB22BC
Else
    Exit
EndIf

While True
    Sleep(10)
WEnd

Func _Read()
	$Read = _ReadPtr($Address, $Offset, $Handle, "float")
    MsgBox(0, "", $Read)
EndFunc

Func _ReadPtr($Ptr, $Offset, $MemOpen, $Type = "dword")
	If IsArray($Offset) Then
		For $i = 0 To UBound($Offset) -1
			$Ptr = _MemoryRead($Ptr, $MemOpen) + $Offset[$i]
		Next
		Return _MemoryRead($Ptr, $MemOpen, $Type)
	Else
		Return 0
	EndIf
EndFunc
Wenn es nicht geht sag bescheid.
Hier oder per Skype.
Skype steht unter meinem Profilbild.

Habs bei mir getestet.
Lvl 1 Char -> ergebnis 73.

Keine Ahnung was du da ausließt^^.

PS: Wenn du noch hilfe brauchst frag mich auch per Skype.
Helfe immer noch gerne :P.
BladeTiger12 is offline  
Thanks
1 User
Old 07/08/2013, 12:52   #3
 
Paraly's Avatar
 
elite*gold: 27
Join Date: Sep 2009
Posts: 5,592
Received Thanks: 1,596
Danke danke funktioniert perfekt
Paraly is offline  
Old 07/08/2013, 13:10   #4

 
BladeTiger12's Avatar
 
elite*gold: 64
Join Date: May 2011
Posts: 1,228
Received Thanks: 847
Versuch mal zu vermeiden:
1. In der Array ( Platz 0 ) eine 0 rein zu schreiben weil das ändert nichts.
2. warum so umständlich : "0x" & Hex($Module + (Dec("Addresse"))
3. Deklarier die Variablen lieber weiter oben.
4. Du musst nur einmal den PID deklarieren.

Mehr sehe ich auf die schnelle nicht.
BladeTiger12 is offline  
Old 07/08/2013, 18:03   #5
 
elite*gold: 0
Join Date: Mar 2009
Posts: 7,260
Received Thanks: 33,147
Das Script von BladeTiger12 ist unbrauchbar. Schon allein aus dem Grund da das Spiel vor dem Script gestartet werden muss. Ist das nicht der Fall beendet es sich einfach.
Es fehlt jede Art von Fehlererkennung, es wird nur überprüft, ob das Spiel zu Beginn des Scripts läuft. Beendet man das Spiel vor dem Script stürzt es ab.
Es wird eine komplett sinnlose Funktion hinzugefügt (_ReadPtr()), welcher wiederum jegliche Art von Fehlererkennung fehlt.

Quote:
Originally Posted by BladeTiger12 View Post
1. In der Array ( Platz 0 ) eine 0 rein zu schreiben weil das ändert nichts.
Unabhängig davon, ob man jetzt "deine" Funktion verwendet oder nicht, diese Aussage ist einfach nur falsch. Ein 0er Offset hat wie jeder andere Wert eines Offsets einen Nutzen.

Quote:
Originally Posted by BladeTiger12 View Post
3. Deklarier die Variablen lieber weiter oben.
Das ist eigentlich egal, solange sie nicht global verwendet werden.



Dieses Script ist lange nicht perfekt, aber dennoch besser:
Code:
#RequireAdmin
#include <Pointer.au3>

HotKeySet("{F1}", "_Read")

Dim $szProcessName = "Aion.bin", $szModuleName = "Game.dll"
Dim $dwOffsets[6] = [0, 0x5D4, 0, 0x248, 0x208, 0x264]

While Sleep(10)
WEnd

Func _Read()
	$dwProcessId = ProcessExists($szProcessName)
	If $dwProcessId > 0 Then
		$hProcess = _MemoryOpen($ProcessId)
		If Not @error Then
			$dwModuleAddress = _MemoryModuleGetBaseAddress($dwProcessId, $szModuleName)
			If Not @error Then
				$dwBaseAddress = $dwModuleAddress + 0xFB22BC
				$rValue = _MemoryPointerRead($dwBaseAddress, $hProcess, $dwOffsets, "float")
				If Not @error Then MsgBox(64, "Info", "Adresse: " & $rValue[0] & @CRLF & "Wert: " & $rValue[1])
			EndIf
		EndIf
		_MemoryClose($hProcess)
	EndIf
EndFunc
KDeluxe is offline  
Old 07/08/2013, 18:32   #6

 
BladeTiger12's Avatar
 
elite*gold: 64
Join Date: May 2011
Posts: 1,228
Received Thanks: 847
Ja ok, ich erwähnte nie das es brauchbar ist.
Und das mit der 0 In der Offset-Array finde ich trotz allem unnötig.
Und das man das Script noch verbessern kann ist schon klar.
Aber dafür das es unbrauchbar ist funktioniert es.

Und die Funktion _MemoryPointerRead habe ich schon immer gehasst :P.
BladeTiger12 is offline  
Old 07/08/2013, 18:38   #7
 
Paraly's Avatar
 
elite*gold: 27
Join Date: Sep 2009
Posts: 5,592
Received Thanks: 1,596
Das Script von KDeluxe funktioniert nicht, es crasht direkt wenn ich F1 drücke

Edit: Habs jetzt mal ein bisschen verändert jetzt stürtzt es nicht mehr ab aber es gibt mir eine falsche Adresse raus

Code:
#RequireAdmin
#include <Pointer.au3>

HotKeySet("{F1}", "_Read")

Dim $szProcessName = "aion.bin", $szModuleName = "Game.dll"
Dim $dwOffsets[6] = [0, 0x5D4, 0, 0x248, 0x208, 0x264]

While Sleep(10)
WEnd

Func _Read()
	$dwProcessId = ProcessExists($szProcessName)
	If $dwProcessId > 0 Then
		$hProcess = _MemoryOpen($szProcessName)
		If Not @error Then
			$dwModuleAddress = _MemoryModuleGetBaseAddress($dwProcessId, $szModuleName)
			If Not @error Then
				$dwBaseAddress = $dwModuleAddress + 0xFB22BC
				$rValue = _MemoryPointerRead($dwBaseAddress, $hProcess, $dwOffsets, "float")
				If Not @error Then MsgBox(64, "Info", "Adresse: " & $rValue[0] & @CRLF & "Wert: " & $rValue[1])
			EndIf
		EndIf
		_MemoryClose($hProcess)
	EndIf
EndFunc
Paraly is offline  
Old 07/08/2013, 18:43   #8

 
BladeTiger12's Avatar
 
elite*gold: 64
Join Date: May 2011
Posts: 1,228
Received Thanks: 847
Keine Ahnung warum, sieht relativ richtig aus.
Aber ich mag so eine Script-art auch nicht wirklich.
BladeTiger12 is offline  
Old 07/08/2013, 23:37   #9
 
elite*gold: 0
Join Date: Mar 2009
Posts: 7,260
Received Thanks: 33,147
Fehlerbeachtung nicht zu mögen weil es mehr Code benötigt ist schlecht. Ich hab die ganzen UDFs gar nicht und kenne die Funktionsrückgaben nicht, evtl. gibt eine Funktionen kein @error zurück. Getestet habe ich das Script natürlich nicht.
Der Fehler dürfte aber _MemoryClose() sein, dieser Funktionsaufruf muss in den "If Not @error Then" Block.
Code:
#RequireAdmin
#include <Pointer.au3>

HotKeySet("{F1}", "_Read")

Dim $szProcessName = "Aion.bin", $szModuleName = "Game.dll"
Dim $dwOffsets[6] = [0, 0x5D4, 0, 0x248, 0x208, 0x264]

While Sleep(10)
WEnd

Func _Read()
	$dwProcessId = ProcessExists($szProcessName)
	If $dwProcessId > 0 Then
		$hProcess = _MemoryOpen($ProcessId)
		If Not @error Then
			$dwModuleAddress = _MemoryModuleGetBaseAddress($dwProcessId, $szModuleName)
			If Not @error Then
				$dwBaseAddress = $dwModuleAddress + 0xFB22BC
				$rValue = _MemoryPointerRead($dwBaseAddress, $hProcess, $dwOffsets, "float")
				If Not @error Then MsgBox(64, "Info", "Adresse: " & $rValue[0] & @CRLF & "Wert: " & $rValue[1])
			EndIf
			_MemoryClose($hProcess)
		EndIf
	EndIf
EndFunc
KDeluxe is offline  
Old 07/13/2013, 19:33   #10
 
Paraly's Avatar
 
elite*gold: 27
Join Date: Sep 2009
Posts: 5,592
Received Thanks: 1,596
sorry das ich den thread nochmal auspack aber ich bräuchte eben kurz hilfe ich möchte an die gleiche value einen wert schreiben aber irgendwas funktioniert nicht so ganz bzw. das skript stürtzt nicht ab oder so nur es schreibt nicht.

Code:
#RequireAdmin
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Pointer.au3>


$Form1 = GUICreate("Aion FoV", 318, 131, 192, 124)
$Button1 = GUICtrlCreateButton("Write", 208, 32, 75, 25, $WS_GROUP)
$Button2 = GUICtrlCreateButton("Reset", 208, 72, 75, 25, $WS_GROUP)
$Label1 = guictrlcreatelabel("Wert zwischen 60-140",48,30)
$Input1 = GUICtrlCreateInput("60", 48, 48, 121, 21)
GUISetState(@SW_SHOW)


$open = _MemoryOpen(ProcessExists("aion.bin"))
Global $base = _MemoryModuleGetBaseAddress($open, "Game.dll")
Global $base = $base + 0x00FB22BC
Global $offis[5] = [ 0x5d4, 0x0, 0x248, 0x208, 0x264]


While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
            
        Case $Button1 
        _MemoryPointerWrite($base,$open,$offis,GUICtrlRead($Input1))    
            
        Case $Button2
            _MemoryPointerWrite($base,$open,$offis,"60")
    EndSwitch
WEnd
Paraly is offline  
Old 07/13/2013, 20:56   #11



 
Asuramaru's Avatar
 
elite*gold: 20
The Black Market: 110/0/0
Join Date: Nov 2009
Posts: 2,256
Received Thanks: 1,570
Denke mal im Offset fehlt die 0 am Anfang.

Außerdem solltest du angeben welcher Datentyp benutzt wird.
Denn standardmäßig wird "dword" und nicht "float" von der UDF benutzt.
Asuramaru is offline  
Thanks
1 User
Old 07/13/2013, 21:07   #12
 
Paraly's Avatar
 
elite*gold: 27
Join Date: Sep 2009
Posts: 5,592
Received Thanks: 1,596
hab das mit float schonmal angepasst und auch die 0 bei den offsets hinzugefügt aber es funktioniert immernoch nicht, in dem ersten skript von bladetiger12 hat er ja auch keine 0 am anfang deklariert bei den offsets und trotzdem funktioniert sein skript


so sieht der code jetzt aus
Code:
#RequireAdmin
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Pointer.au3>


$Form1 = GUICreate("Aion FoV", 318, 131, 192, 124)
$Button1 = GUICtrlCreateButton("Write", 208, 32, 75, 25, $WS_GROUP)
$Button2 = GUICtrlCreateButton("Reset", 208, 72, 75, 25, $WS_GROUP)
$Label1 = guictrlcreatelabel("Wert zwischen 60-140",48,30)
$Input1 = GUICtrlCreateInput("60", 48, 48, 121, 21)
GUISetState(@SW_SHOW)

global $PID = ProcessExists("aion.bin")
   If $PID > 0 Then
	  global $open = _MemoryOpen($PID)
	  Global $base = _MemoryModuleGetBaseAddress($PID, "Game.dll")
	  Global $base = $base + 0x00FB22BC
	  Global $offis[5] = [ 0x5d4, 0x0, 0x248, 0x208, 0x264]
   Else
	  msgbox(0,"ERROR","Aion nicht gefunden")
	  exit
   endif

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
            
        Case $Button1 
        _MemoryPointerWrite($base,$open,$offis,GUICtrlRead($Input1),"float")    
            
        Case $Button2
            _MemoryPointerWrite($base,$open,$offis,"60","float")
    EndSwitch
WEnd
kann es daran liegen das ich ein 64-bit system habe, hab mal irgendwo gelesen das man dann die pointer.au3 anpassen müsse?

Wow endlich nach langem ausprobieren und versuchen jeden einzelnen schritt nochmal genau zu analysieren von bladetiger12 skript hab ich jetzt endlich alles verstanden

Code:
#requireadmin

#include <Pointer.au3>
$PID = ProcessExists("aion.bin") 
$MemOpen = _MemoryOpen($PID) 

Dim $Offset[5] = [ 0x5d4, 0x0, 0x248, 0x208, 0x264]

$StaticOffset = Dec("00FB22BC")
$BaseAddr = _MemoryModuleGetBaseAddress($PID, "Game.dll")  
$Addr = "0x" & Hex($BaseAddr + 0x00FB22BC)  



$var = 0
do
$Addr = _MemoryRead($Addr, $MemOpen) + $Offset[$var]
$var = $var + 1
until $var = UBound($Offset)



_MemoryWrite($Addr, $MemOpen,"140", "float")
Exit
somit hat sich alles geklärt
Paraly is offline  
Reply


Similar Threads Similar Threads
Pointer in AutoIt verwenden
07/07/2013 - AutoIt - 2 Replies
Hallo, ich habe einige Probleme bei der Verwendung eines Pointers in Autoit. Den Pointer mittels CheatEngien gefunden und soweit funktioniert alles problemlos. Erst in Autoit gibt es Probleme da der ausgegebene Wert bzw. die ausgegebene Addresse nicht stimmen, Ich hoffe jemand hat eine idee woran es liegen kann: #include <Pointer.au3> SetPrivilege("SeDebugPrivilege", 1) $pid = ProcessExists("StrongholdKingdoms.exe")
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...
[AutoIT]Php und Mysql verwenden
07/22/2011 - Coding Tutorials - 2 Replies
Hi zusammen, In diesem Tutorial will ich euch zeigen wie man in AutoIT mit php und dadurch mit mysql verknüpfen kann. Let's go! Was benötigt ihr?: -AutoIT ;) -(Optional)Einen PHP Editor -Einen FTP Server (funpic.de) -Einen MySql Server -Filezilla(Download)
AutoIt-Pointer verwenden
06/01/2010 - General Coding - 0 Replies
*geklärt* Kann gelöscht werden...



All times are GMT +2. The time now is 23:12.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.