Heyho hat jemand ne Ahnung ob man mit Autoit nach bestimmten Pattern suchen kann, ich meine das gleiche wie bei Cheat Engine Array of Byte such methode
#requireadmin
#include <Pointer.au3>
#include <Array.au3>
global $Memory_Map
global $Memory_Cache
$PID = ProcessExists("Aion.bin")
$MemOpen = _MemoryOpen($PID)
_Get_Memory_Map()
Func _Get_Memory_Map()
$i = 0
$GameBaseAddr = _MemoryModuleGetBaseAddress($PID, "Game.dll")
$CrySystemBaseAddr = _MemoryModuleGetBaseAddress($PID, "CrySystem.dll")
$CrySystemBaseAddr += 0x10000000
Do
$Memory_Cache = _MemoryRead($CrySystemBaseAddr, $MemOpen, "BYTE")
$CrySystemBaseAddr += 0x00000001
$i += 1
$Memory_Cache_Hex = hex($Memory_Cache,2)
$Memory_Map &= $Memory_Cache_Hex
$Memory_Cache = ""
Until $i = 429496729
EndFunc
$file = FileOpen("memorymap.map",10)
FileWrite($file,$Memory_Map)
FileClose($file)
$Memory_Entities = StringRegExp($Memory_Map, "886E02460000000000......000000000000....00000000000000000000803F010000002600000000000000......0AA186010001000000......4000CD..0064CD(.*?)00000000000000000000000000000000000", 3)
_ArrayDisplay($Memory_Entities)
zunächst einmal sagte ich du sollst entweder das ganze modul oder die ganze datei einlesen und dann suchen...Quote:
ok darauf kam ich auch schon vorher nur ich dachte es gäbe evtl eine bequeme art wie ne fertige UDF aber ok :D
bisher ist mein codenur naja das ist viel zu langsam gibts da eine schnellere Möglichkeit und sind meine StringRegExp Parameter richtig umCode:#requireadmin #include <Pointer.au3> #include <Array.au3> global $Memory_Map global $Memory_Cache $PID = ProcessExists("Aion.bin") $MemOpen = _MemoryOpen($PID) _Get_Memory_Map() Func _Get_Memory_Map() $i = 0 $GameBaseAddr = _MemoryModuleGetBaseAddress($PID, "Game.dll") $CrySystemBaseAddr = _MemoryModuleGetBaseAddress($PID, "CrySystem.dll") $CrySystemBaseAddr += 0x10000000 Do $Memory_Cache = _MemoryRead($CrySystemBaseAddr, $MemOpen, "BYTE") $CrySystemBaseAddr += 0x00000001 $i += 1 $Memory_Cache_Hex = hex($Memory_Cache,2) $Memory_Map &= $Memory_Cache_Hex $Memory_Cache = "" Until $i = 429496729 EndFunc $file = FileOpen("memorymap.map",10) FileWrite($file,$Memory_Map) FileClose($file) $Memory_Entities = StringRegExp($Memory_Map, "886E02460000000000......000000000000....00000000000000000000803F010000002600000000000000......0AA186010001000000......4000CD..0064CD(.*?)00000000000000000000000000000000000", 3) _ArrayDisplay($Memory_Entities)
"88 6E 00 46 00 00 00 00 00 1C 6E 2B 00 00 00 00 98 15 39 43 00 00 00 00 00 00 00 00 00 00 80 3F 01 00 00 00 26 00 00 00 00 00 00 00 0A 47 1E 0A A1 86 01 00 01 00 00 00 70 3D EA 40 00 1C 38 00 64 7E"
[mit den .. meine ich zeichen die sich auch anders sein können und was hier nach kommt soll dann gefunden werden bis 00 00 kommt]
hoffe das hat man verstanden was ich hier will :D
wichtiger ist auchjedenfall mal den memoryscan schneller zu machen
ist es eventuell möglich einfach die .dll von cheatengine zu benutzen die er zum suchen benutzt?
cheat engine brauch für den suchvorgang nur 2-5 sekunden :(
Hey natürlich gibt es dafür UDFs entweder diejenige Funktion, die sich ScanPattern nennt und in irgendeiner anderen UDF ist oder meine Funktion SearchForBytes in der CCInject.au3 logischerweise werde ich meine Funktion empfehlen, aber google einfach einmal nach beiden funktionen die haben beide ihr Vor- und Nachteile. ;)Quote:
ok darauf kam ich auch schon vorher nur ich dachte es gäbe evtl eine bequeme art wie ne fertige UDF aber ok :D
bisher ist mein codenur naja das ist viel zu langsam gibts da eine schnellere Möglichkeit und sind meine StringRegExp Parameter richtig umCode:#requireadmin #include <Pointer.au3> #include <Array.au3> global $Memory_Map global $Memory_Cache $PID = ProcessExists("Aion.bin") $MemOpen = _MemoryOpen($PID) _Get_Memory_Map() Func _Get_Memory_Map() $i = 0 $GameBaseAddr = _MemoryModuleGetBaseAddress($PID, "Game.dll") $CrySystemBaseAddr = _MemoryModuleGetBaseAddress($PID, "CrySystem.dll") $CrySystemBaseAddr += 0x10000000 Do $Memory_Cache = _MemoryRead($CrySystemBaseAddr, $MemOpen, "BYTE") $CrySystemBaseAddr += 0x00000001 $i += 1 $Memory_Cache_Hex = hex($Memory_Cache,2) $Memory_Map &= $Memory_Cache_Hex $Memory_Cache = "" Until $i = 429496729 EndFunc $file = FileOpen("memorymap.map",10) FileWrite($file,$Memory_Map) FileClose($file) $Memory_Entities = StringRegExp($Memory_Map, "886E02460000000000......000000000000....00000000000000000000803F010000002600000000000000......0AA186010001000000......4000CD..0064CD(.*?)00000000000000000000000000000000000", 3) _ArrayDisplay($Memory_Entities)
"88 6E 00 46 00 00 00 00 00 1C 6E 2B 00 00 00 00 98 15 39 43 00 00 00 00 00 00 00 00 00 00 80 3F 01 00 00 00 26 00 00 00 00 00 00 00 0A 47 1E 0A A1 86 01 00 01 00 00 00 70 3D EA 40 00 1C 38 00 64 7E"
[mit den .. meine ich zeichen die sich auch anders sein können und was hier nach kommt soll dann gefunden werden bis 00 00 kommt]
hoffe das hat man verstanden was ich hier will :D
wichtiger ist auchjedenfall mal den memoryscan schneller zu machen
ist es eventuell möglich einfach die .dll von cheatengine zu benutzen die er zum suchen benutzt?
cheat engine brauch für den suchvorgang nur 2-5 sekunden :(
#include <NomadMemory.au3>
$MemOpen = _MemoryOpen(ProcessExists("nfsw.exe"))
_AOBScan($MemOpen, "AOB as string ex: 0F 74 - Also it doesn't support unknown bytes")
Func _AOBScan($handle, $sig)
$sig = StringRegExpReplace($sig, "[^0123456789ABCDEFabcdef.]", "")
$start_addr = 0x00400000
$end_Addr = 0x0FFFFFFF
For $addr = $start_addr To $end_Addr Step 51200 - (StringLen($sig) / 2)
StringRegExp(_MemoryRead($addr, $handle, "byte[51200]"), $sig, 1, 2)
If Not @error Then
Return StringFormat("0x%.8X", $addr + ((@extended - StringLen($sig) - 2) / 2))
EndIf
Next
Return 0
EndFunc ;==>_AOBScan