Autoit Memory Region

09/11/2012 23:06 Crack-wtf#1
Hey gibt es eine Udf mit der es möglich ist, die Informationen der Memory Regions eines Prozesses auszulesen?
Bei Cheat engine gibt es ja die Funktion.
Müsste das in Autoit machen.
09/12/2012 11:09 kamarun#2
schau mal hier nach:

[Only registered and activated users can see links. Click Here To Register...]

[Only registered and activated users can see links. Click Here To Register...]

lg
09/12/2012 16:57 Crack-wtf#3
Ist nicht das was ich brauche.
Wie man Memory ausliest und beschreibt weis ich doch, aber nicht wie ich informationen aus Memory Regionen bekomme.
Beispielsweise welches Modul in welcher Memory Region seinen Platz hat oder welche rechte die region hat. (Execute/Read/Write)
09/12/2012 21:10 lolkop#4
Quote:
Originally Posted by Crack-wtf View Post
Ist nicht das was ich brauche.
Wie man Memory ausliest und beschreibt weis ich doch, aber nicht wie ich informationen aus Memory Regionen bekomme.
Beispielsweise welches Modul in welcher Memory Region seinen Platz hat oder welche rechte die region hat. (Execute/Read/Write)
die [Only registered and activated users can see links. Click Here To Register...] solltest du dir mal genauer anschauen.

setzen kannst du sie einfach mit den [Only registered and activated users can see links. Click Here To Register...] und [Only registered and activated users can see links. Click Here To Register...] funktionen.

über die [Only registered and activated users can see links. Click Here To Register...] funktion kannst du dann noch die [Only registered and activated users can see links. Click Here To Register...] setzen, über welche du dann genauere infos zu deinem module bekommst
09/12/2012 21:37 Crack-wtf#5
Ok hab mir jetz ne Funktion geschrieben fürs auslesen der Mapped File.
Und zum Filtern der Regionen nutz ich VirtualQuery.
Wenns euch Interessiert.

PHP Code:
#include <Winapi.au3>
#include <array.au3>

$pid ProcessExists("Engine.exe")
$Base 0x00000010
$Size 
0x0
Global $Addresses[1500][2]

For 
$i 1 To 1499
    
If $Base 0x7ffe0001 Then
        $Addresses
[0][0] = $i-1
        ExitLoop
    
EndIf
    
$Region _ProcessMemoryVirtualQuery($pid,$Base+$Size)
    
    if 
IsArray($RegionThen
        $Base 
$Region[0]
        
$Size "0x"&Hex($Region[3])
        
$Addresses[$i][0] = $Region[0]
        
$Addresses[$i][1] = GetMappedFileName($pid,$Region[0])
    
    EndIf
Next

_ArrayDisplay
($Addresses)


Func GetMappedFileName($PID$Address)
    
Local Const $PROCESS_QUERY_INFORMATION=0x0400
    Local 
Const $PROCESS_VM_READ=0x0010
    Local $hprocess
    $Psapi 
DllOpen("Psapi.dll")
     

    
$hProcess=_WinAPI_OpenProcess(BitOR($PROCESS_QUERY_INFORMATION,$PROCESS_VM_READ),False,$PID)
    If 
Not $hProcess Then Return 0

    $Filename 
DllStructCreate("char[255]")
    
DllCall($Psapi"DWORD""GetMappedFileNameA""ptr"$hProcess"DWORD"$Address"ptr"DllStructGetPtr($Filename), "DWORD"255)
    
    
_WinAPI_CloseHandle($hProcess)
    
DllClose($Psapi)
    Return 
DllStructGetData($Filename1)
EndFunc

Func _ProcessMemoryVirtualQuery
($PID,$pAddress,$iInfo=-1)
    
$_COMMON_KERNEL32DLL DllOpen("Kernel32.dll")
    
Local $hProcess _WinAPI_OpenProcess(0x400,False,$PID)
    If 
Not IsPtr($hProcess) Or Ptr($pAddress)=Or $iInfo>6 Then Return SetError(1,0,-1)

    
Local $aRet,$stMemInfo=DllStructCreate("ptr;ptr;dword;ulong_ptr;dword;dword;dword"),$iStrSz=DllStructGetSize($stMemInfo)

    
$aRet=DllCall($_COMMON_KERNEL32DLL,"ulong_ptr","VirtualQueryEx","handle",$hProcess,"ptr",$pAddress,"ptr",DllStructGetPtr($stMemInfo),"ulong_ptr",$iStrSz)

    If 
$iInfo<0 Then
        Dim $aMemInfo
[7]
        For 
$i=0 To 6
            $aMemInfo
[$i]=DllStructGetData($stMemInfo,$i+1)
        
Next
        
Return $aMemInfo
    
EndIf
    Return 
DllStructGetData($stMemInfo,$iInfo+1)
EndFunc