_memorygetbaseadress returns 0

09/30/2013 23:21 c0w#1
da ich mich grade ein wenig mit memory-"hacking" beschäftige und mit CE auch schon ein paar adressen rausgesucht hab, bin ich natürlich irgendwann nicht mehr um _memorygetbaseadress gestoßen.
nun habe ich aber das problem, dass diese funktion (bei mir aus der pointer.au3) immer 0 returned und @error auf 2 setzt
ich hab win 7-64bit und denke auch dass es daran liegt. habe schon etliche stunden google gequält aber bin dabei nicht wirklich zum erfolg gekommen.
hat einer evtl. eine idee woran es liegt, wie mans fixt, oder wie ich die baseadresse alternative bekomme? denn wenn ich das selbe script verwenden will ohne mir jedes mal die adresse selbst zu suchen bleibt das ned aus.

PS: ich habe schon alle möglichen .exen probiert. vom explorer bis zu meiner game.exe, error und return sind immer gleich. einen fehler im script davor kann ich ausschließen, ist ja nur pid lesen und mit memoryopen.
09/30/2013 23:29 alpines#2
Versuchs mal als x86 zu compilen mit #RequireAdmin drinne, vielleicht geht es dann.
09/30/2013 23:32 c0w#3
ne, requireadmin is drin und hab auch schon beide arten compiled... x86 is ja eh by default
10/01/2013 18:29 BladeTiger12#4
Schonmal so probiert?:

Code:
#RequireAdmin
$pID = ProcessExists("Process.exe")
$Base = _MemoryModuleGetBaseAddress($pID, "Process.exe")
MsgBox(0,"","Base: " & $Base)

Func _MemoryModuleGetBaseAddress($iPID, $sModule)
    If Not ProcessExists($iPID) Then Return SetError(1, 0, 0)

    If Not IsString($sModule) Then Return SetError(2, 0, 0)

    Local   $PSAPI = DllOpen("psapi.dll")

    ;Get Process Handle
    Local   $hProcess
    Local   $PERMISSION = BitOR(0x0002, 0x0400, 0x0008, 0x0010, 0x0020) ; CREATE_THREAD, QUERY_INFORMATION, VM_OPERATION, VM_READ, VM_WRITE

    If $iPID > 0 Then
        Local $hProcess = DllCall("kernel32.dll", "ptr", "OpenProcess", "dword", $PERMISSION, "int", 0, "dword", $iPID)
        If $hProcess[0] Then
            $hProcess = $hProcess[0]
        EndIf
    EndIf

    ;EnumProcessModules
    Local   $Modules = DllStructCreate("ptr[1024]")
    Local   $aCall = DllCall($PSAPI, "int", "EnumProcessModules", "ptr", $hProcess, "ptr", DllStructGetPtr($Modules), "dword", DllStructGetSize($Modules), "dword*", 0)
    If $aCall[4] > 0 Then
        Local   $iModnum = $aCall[4] / 4
        Local   $aTemp
        For $i = 1 To $iModnum
            $aTemp =  DllCall($PSAPI, "dword", "GetModuleBaseNameW", "ptr", $hProcess, "ptr", Ptr(DllStructGetData($Modules, 1, $i)), "wstr", "", "dword", 260)
            If $aTemp[3] = $sModule Then
                DllClose($PSAPI)
                Return Ptr(DllStructGetData($Modules, 1, $i))
            EndIf
        Next
    EndIf

    DllClose($PSAPI)
    Return SetError(-1, 0, 0)

EndFunc
10/01/2013 20:45 c0w#5
ja return ist nach wie vor 0 :/ aber danke für deine mühe
und müsste es nicht
Code:
$pID = _memoryopen(ProcessExists("Process.exe"))
sein? oder ist bei getMODULEbase die pid relevant und nicht das handle zum geöffneten prozess?
10/01/2013 21:53 BladeTiger12#6
Nope, so wie es ist stimmt das schon o.o.
Du musst nur Process.exe ändern

#Edit:

Für welches Spiel ist es denn?
10/01/2013 21:56 c0w#7
hmm ok, naja dann liegts an was anderem :/, danke trotzdem
10/01/2013 21:59 BladeTiger12#8
Für welches Spiel ist es denn?
10/02/2013 11:43 c0w#9
versuchen tu ichs mit dragons prophet aber ich krieg bei keiner exe was raus :D. ums so zu sagen ich hab kein festes projekt hab mir nur gleich n mmo genommen um mir das mal beizubringen
10/03/2013 09:14 [LS]Michael#10
bei dragons prophet brauchst du es nicht versuchen du wirst dort kaum pionters finden die einen interresieren.
10/03/2013 14:22 c0w#11
doch hab jetz schon ein paar, und dass ich die baseaddress nicht finden konnte lag (wahrscheinlich) daran dass ich "#AutoIt3Wrapper_UseX64=y" nicht drin hatte. hab da gestern noch sehr viel hilfe bekommen jetzt klappts =). jetzt versuch ich mal die koordinaten des spiels zu finden. stellt sich aber als schwierig heraus