Что нового

Работа с памятью программы если она использует dll

MadDog

Новичок
Сообщения
26
Репутация
0
Открываю Cheat Engine 6.1 процесс с игрой - game.exe.
Нахожу нужное мне значение....
Показывает что нужное значение лежит тут
<Address>god.dll+320155</Address>


делаю скрипт

Код:
#include "NomadMemory.au3"

$ID = _MemoryOpen(ProcessExists("game.exe"))
$iPID = WinGetProcess("god")
$sModule = "god.dll"
$iOffset = "0x320155"
$baseADDR = _MemoryModuleGetBaseAddress($ID, $sModule) + $iOffset



MsgBox (0, "!", $baseADDR)



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


он мне выдаёт что адрес у меня к примеру 7575096

а на самом деле он в этот момент - 0x04FE9638

как быть ?!
 
Автор
MadDog

MadDog

Новичок
Сообщения
26
Репутация
0
первоначальный вопрос нужно поставить так ..... как найти базовый адрес под которой скрывается god.dll... )
 
Автор
MadDog

MadDog

Новичок
Сообщения
26
Репутация
0
Код:
#AutoIt3Wrapper_UseX64=n

$ProcessID = WinGetProcess("game")
$sModule = "god.dll"
$baseADDR = _MemoryModuleGetBaseAddress($ProcessID, $sModule)

Global $HPdec = dec(StringTrimLeft($baseADDR, 3))

MsgBox (0, "Базовое значение", $baseADDR)
MsgBox (0, "Базовое значение2", $HPdec)



 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


добавил в 1 строчку #AutoIt3Wrapper_UseX64=n
теперь выдаёт результат как пример - 0x04920000 а чит энжи показывает базовое значение - 05059000
 
Верх