|
You last visited: Today at 22:13
Advertisement
AutoIt - Pointer auslesen prob.
Discussion on AutoIt - Pointer auslesen prob. within the AutoIt forum part of the Coders Den category.
08/05/2012, 13:54
|
#1
|
elite*gold: 0
Join Date: Mar 2012
Posts: 41
Received Thanks: 1
|
AutoIt - Pointer auslesen prob.
Hallo Leute !
Also komm ich mal gleich zum Punkt o.O
Ich hab versucht wie schon oben steht einen Pointer mit AutoIt auszulesen
klappte ja auch alles super... nur das die Vaule immer als 0 angezeigt wird und ich einfach nicht drauf komme was ich falsch gemacht habe
Also hier der Code für den Pointer :
Quote:
#RequireAdmin
#include <Pointer.au3>
While 1
$PID = ProcessExists("ZumHacken.exe")
$MemOpen = _MemoryOpen($PID)
Global $Offset[3]
$Offset[0] = 0
$Offset[1] = Dec ("0")
$Offset[2] = Dec("18")
$StaticOffset = Dec("000A86BC")
$BaseAddr = _MemoryGetBaseAddress($MemOpen, 1)
$Addr = "0x" & Hex($BaseAddr + $StaticOffset)
$Value = _MemoryPointerRead($Addr, $MemOpen, $Offset)
Tooltip ($Value[1])
WEnd
|
Schöne grüße
Philipp
|
|
|
08/05/2012, 16:07
|
#2
|
elite*gold: 0
Join Date: Mar 2009
Posts: 7,260
Received Thanks: 33,147
|
Du verwendest das Handle ohne vorher zu prüfen, ob es überhaupt gültig ist. Das führt schnell mal zum Programmabsturz.
Die ganzen Konvertierungen zwischen Strings und Zahlen sind zum einen umständlich und verbrauchen zum anderen nur unnötig Rechenleistung.
Code:
#RequireAdmin
#include <Pointer.au3>
Dim $dwOffset[3] = [0, 0, 0x18]
Dim $dwBaseAddress = 0, $dwStaticOffset = 0xA86BC
While Sleep(10)
$dwProcessId = ProcessExists("[Process]")
$aHandle = _MemoryOpen($dwProcessId)
If Not @error Then
If Not $dwBaseAddress Then
$dwAddress = _MemoryGetBaseAddress($aHandle, 1)
If $dwAddress Then $dwBaseAddress = $dwAddress + $dwStaticOffset
Else
$dwValue = _MemoryPointerRead($dwBaseAddress, $aHandle, $dwOffset)
If @error Then
ToolTip("Error: " & @error)
Else
Tooltip("Value: " & $dwValue[1])
EndIf
EndIf
_MemoryClose($aHandle)
EndIf
WEnd
Zum eigentlichen Problem:
ReadProcessMemory gibt einen Wert von 0 zurück, wenn die Funktion fehlschlägt (wird nicht von DllCall erkannt). Ein Grund dafür wären fehlende Leseberechtigung. Kann man eigentlich ausschließen.
Da dein aktuelles Script ja scheinbar funktioniert, sofern der Prozess schon gestartet wurde, sollte das Problem auch bei keinem Anti Hacking Tool liegen. Andernfalls würde das Script spätestens bei der Ausgabe des gelesen Werts abstürzen, da du auf ein Array zugreifen möchtest, das überhaupt kein Array ist.
Evtl. ist der Pointer einfach nicht der richtige.
|
|
|
08/06/2012, 22:43
|
#3
|
elite*gold: 0
Join Date: Mar 2012
Posts: 41
Received Thanks: 1
|
Hallo KDeluxe !
Ich hab dein Script ausprobiert - es startet aber es erscheint nicht mal ein ToolTip.
Der Pointer stimmt, beim Scannen meines Testprogrammes (Pointer - Level 1) ist das Offset immer 18.
|
|
|
08/07/2012, 00:16
|
#4
|
elite*gold: 0
Join Date: Mar 2009
Posts: 7,260
Received Thanks: 33,147
|
Dann sollte eine 0 zu viel sein.
Wenn ich das jetzt richtig verstehe sollte es so sein:
Code:
Dim $dwOffset[2] = [0, 0x18]
Je nachdem was du unter "Level 1" verstehst. CE beginnt bei 0, Level 1 wäre also eigentlich das 2. Offset.
Wenn das Tooltip nie angezeigt wird, wird _MemoryPointerRead() nie ausgeführt, zur Fehlerfindung hättest du nur ein paar Tooltips (oder anderes) hinzufügen müssen.
Code:
#RequireAdmin
#include <Pointer.au3>
$szProcessName = "[Process]"
Dim $dwOffset[2] = [0, 0x18]
Dim $dwBaseAddress = 0, $dwStaticOffset = 0xA86BC
While Sleep(10)
$dwProcessId = ProcessExists($szProcessName)
$aHandle = _MemoryOpen($dwProcessId)
If Not @error Then
If Not $dwBaseAddress Then
$dwAddress = _MemoryGetBaseAddress($aHandle, 1)
If $dwAddress Then $dwBaseAddress = $dwAddress + $dwStaticOffset
Else
$dwValue = _MemoryPointerRead($dwBaseAddress, $aHandle, $dwOffset)
If @error Then
ToolTip("Error: " & @error, Default, Default, "_MemoryPointerRead()")
Else
Tooltip("Value: " & $dwValue[1], Default, Default, "_MemoryPointerRead")
EndIf
EndIf
Tooltip("Address: " & $dwBaseAddress, Default, Default, "Base")
_MemoryClose($aHandle)
Else
ToolTip("Error: " & @error, Default, Default, "_MemoryOpen()")
EndIf
WEnd
|
|
|
08/07/2012, 13:42
|
#5
|
elite*gold: 0
Join Date: Mar 2012
Posts: 41
Received Thanks: 1
|
Jop...
Diesmal gehts, doch die Adresse ist immer noch 0 >.<
Bild :
|
|
|
08/07/2012, 17:57
|
#6
|
elite*gold: 0
Join Date: Mar 2009
Posts: 7,260
Received Thanks: 33,147
|
Dann solltest du dem Script eigentlich entnehmen können, dass das Problem bei der Funktion _MemoryGetBaseAddress() liegt. Probier es doch einfach mal mit _MemoryGetModuleAddress() (oder so ähnlich) aus.
|
|
|
08/07/2012, 23:48
|
#7
|
elite*gold: 0
Join Date: Mar 2012
Posts: 41
Received Thanks: 1
|
Hallo KDeluxe...
Es will einfach nicht klappen, ich habe schon fast alles ausprobiert
das mit dem Pointen haut bei mir einfach nicht hin >.<
Entweder mag mich mein PC nicht oder ich bin einfach zu dumm ._.
Liegt es vllt. an meinem Betriebssystem ? (Windows 7 64 Bit)
|
|
|
08/08/2012, 00:54
|
#8
|
elite*gold: 0
Join Date: Mar 2009
Posts: 7,260
Received Thanks: 33,147
|
Mach einfach mal einen Screenshot vom Pointeraufbau von CE.
|
|
|
08/08/2012, 13:09
|
#9
|
elite*gold: 0
Join Date: Mar 2012
Posts: 41
Received Thanks: 1
|
Hey KDeluxe...
Hier hast du den Screen :
|
|
|
08/08/2012, 13:54
|
#10
|
elite*gold: 0
Join Date: Jan 2009
Posts: 70
Received Thanks: 19
|
Also nach erfolgreicher Fehlersuche per Skype konnte ich das Problem mit folgendem Script isolieren:
Code:
#RequireAdmin
#include <Pointer.au3>
$szProcessName = "TestProgramm.exe"
Dim $dwOffset[2] = [0, 0x18]
Dim $dwBaseAddress = 0, $dwStaticOffset = 0xA86BC
While Sleep(10)
$dwProcessId = ProcessExists($szProcessName)
$aHandle = _MemoryOpen($dwProcessId)
If Not @error Then
If Not $dwBaseAddress Then
$dwAddress = _MemoryGetBaseAddress($aHandle, 1)
If $dwAddress Then
$dwBaseAddress = $dwAddress + $dwStaticOffset
Else
FileWrite("Adressen.txt", $dwProcessId & @CRLF & $aHandle & @CRLF)
EndIf
Else
$dwValue = _MemoryPointerRead($dwBaseAddress, $aHandle, $dwOffset)
If @error Then
FileWrite("error.txt", "Error: " & @error &@CRLF)
Else
ToolTip("Value: " & $dwValue[1] &@CRLF)
EndIf
EndIf
_MemoryClose($aHandle)
Else
Exit
EndIf
WEnd
Bei mir funktioniert das Script so wunderbar, bei Likeascript wird die Zeile 10 ($aHandle = _MemoryOpen($dwProcessId)) übersprungen --> warum weiss ich auch nicht so genau
Aber da liegt wohl das Problem.
(OS: Win7 64-bit Home Premium keine UAC)
Edit: Was mir grad noch einfällt - wenn ich ihm ne compiled version von exakt dem gleichen Script schicke gehts - wäre zwar unlogisch aber könnte das PRoblem an AutoIt selbst liegen? o.O
|
|
|
08/08/2012, 15:26
|
#11
|
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
|
Quote:
Originally Posted by mdna
Bei mir funktioniert das Script so wunderbar, bei Likeascript wird die Zeile 10 ($aHandle = _MemoryOpen($dwProcessId)) übersprungen --> warum weiss ich auch nicht so genau
|
zunächst einmal werden zeilen nicht übersprungen... es ist durchaus möglich das der funktionsaufruf der winapi in der udf fehlerhaft abläuft.
vergleiche die typisierung im aufruf nochmal mit der in msdn vorgegebenen von OpenProcess. ich nehme mal an das der fehler dort zu finden ist.
|
|
|
08/08/2012, 17:23
|
#12
|
elite*gold: 0
Join Date: Mar 2012
Posts: 41
Received Thanks: 1
|
Quote:
Originally Posted by lolkop
zunächst einmal werden zeilen nicht übersprungen... es ist durchaus möglich das der funktionsaufruf der winapi in der udf fehlerhaft abläuft.
vergleiche die typisierung im aufruf nochmal mit der in msdn vorgegebenen von OpenProcess. ich nehme mal an das der fehler dort zu finden ist.
|
Mdna hat das gleiche Programm und Script.
Beim ihm funzt es... bei mir nicht
PS: Ich habe ihm das Script und das Test-programm per Skype
geschickt...
Hab AutoIt und Scite schonmal neu Installiert..
Geht trozdem noch nicht >.<
|
|
|
08/08/2012, 23:12
|
#13
|
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
|
Quote:
Originally Posted by LikEaScripT
Mdna hat das gleiche Programm und Script.
Beim ihm funzt es... bei mir nicht
PS: Ich habe ihm das Script und das Test-programm per Skype
geschickt...
Hab AutoIt und Scite schonmal neu Installiert..
Geht trozdem noch nicht >.<
|
und in wiefern hat das etwas mit dem zu tun was ich sagte?
|
|
|
08/08/2012, 23:22
|
#14
|
elite*gold: 0
Join Date: Jan 2009
Posts: 70
Received Thanks: 19
|
Nun ganz einfach --> bei mir funktioniert das Script mit exakt der GLEICHEN Pointer.au3 (Wo ja die API-Aufrufe gemacht werden) wunderbar aber bei likeascript nicht --> das ist das was er dir mitgeteilt hat
|
|
|
08/08/2012, 23:49
|
#15
|
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
|
Quote:
Originally Posted by mdna
Nun ganz einfach --> bei mir funktioniert das Script mit exakt der GLEICHEN Pointer.au3 (Wo ja die API-Aufrufe gemacht werden) wunderbar aber bei likeascript nicht --> das ist das was er dir mitgeteilt hat
|
das sagt nichts über das system aus... ein dll aufruf kann auf unterschiedlichen system selbstverständlich zu unterschiedlichen reaktionen führen...
mögliche fehlerquellen: - die dll existiert auf einem system überhaupt nicht
- die dll befindet sich an einer anderen stelle
- die dll wurde geupdated / verfügt über unterschiedliche parameter
- man befindet sich auf x86 / x64 systemen -> integer, handles etc. sind nichtmehr 4 sondern 8byte lang, was bei der typisierung beachtet werden muss
- viele mehr...
die häufigste fehlerquelle wird wohl die bereits angesprochene x64/x86 typisierungs-fehlerquelle sein...
|
|
|
|
|
Similar Threads
|
[AutoIT] Pointer auslesen
07/14/2013 - AutoIt - 5 Replies
Guten Abend/Nacht liebe Community,
heute möchte ich euch gerne das anzeigen eines Wertes via Pointer in Autoit näher bringen.
Vorwort:
Bitte bedenkt das dies hier mein erstes Tutorial ist und ich es mitten in der Nacht schreibe. Ich werde jeden Teil dieses Tutorials auch nocheinmal als Video verfilmen und hochladen und das Script posten damit ihr euch alles nochmal in Ruhe anschauen könnt.
Als Beispiel zum Pointer auslesen habe ich das Rollenspiel NosTale genommen.
Ihr könnt...
|
WoW Pointer mit Autoit auslesen
12/08/2010 - AutoIt - 9 Replies
Ich habe den 4byte wert von der z position von meinem eigenen Chara herausgefunden. Ich weiß das 4 Byte falsch sind aber das ist egal. Mir reicht auch ein 4 byte wert. Danach habe ich rechtsklick auf den Wert gemacht und Pointer Scan for this adress. Alles So gelassen und OK geklickt. Ich habe eine Liste mit offsets und allem möglichen gefunden. Wenn ich diesen Pointer mit offsets aber in Autoit einbinde und mit memorypointerread auslese bekomme ich
0x00000017
als rückgabewert.
...
|
WoW Pointer mit Autoit auslesen
12/05/2010 - World of Warcraft - 0 Replies
Ich habe mit Cheat Engine 5.6 die werte von der Z position des eigenen Spielers herausgefunden. Anschließend habe ich rechtsklick auf den Wert gemacht und Pointer Scan for this Adress gemacht. Ich bekam eine Liste mit den Offsets und den Werten.
Meine Werte sind alle 4 byte weil ich nicht weiß welche ich sonst nehmen soll. Das ist aber egal. Mit Cheat Engine klappt alles auch wenn es 4 byte sind.
Nun meine Frage. Ich binde die Offsets mit der Nomadmemory in Autoit ein. Wenn ich den Wert...
|
(Autoit) Wie Pointer auslesen ?
10/13/2009 - General Coding - 6 Replies
Hiho...
Ich progge gerade an einem bot und habe nur ein problem...
Ich hab mit CE nen pointer für die HP gefunden...
In diesem fall: game.dat+0037CC28 offset: 13C
Hab aber bis jetzt keine funktionierende möglichkeit gefunden das in Autoit auszulesen...
Kann mir pls einer verraten wie das geht ?
|
All times are GMT +2. The time now is 22:13.
|
|