Что нового

NomadMemory удобная работа с памятью

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Т.к. большинству ботоводов, жизненно необходима эта UDF и в связи с тем, что иногда делая перерыв между своей активностью на год - другой, можно потом в ужасе потеть в попытках найти её и процеживать десятки сообщений пытаясь найти "вот ту которая использовалась вон там", создаю эту тему и размещаю в ней NomadMemory 3.1.127
Список функций:
[list type=decimal]
[*]_MemoryOpen
[*]_MemoryRead
[*]_MemoryWrite
[*]_MemoryClose
[*]_MemoryModuleGetBaseAddress
[*]SetPrivilege
[*]_MemoryPointerRead
[*]_MemoryPointerWrite
[/list]
 

Вложения

  • NomadMemory.zip
    2.7 КБ · Просмотры: 128

Dellroc

Осваивающий
Сообщения
151
Репутация
31
Re: NomadMemory удобная работа с памятью.

Поправил
Код:
Func _MemoryPointerRead($iv_Address, $ah_Handle, $av_Offset, $sv_Type = 'dword')

    If IsArray($av_Offset) Then
        If IsArray($ah_Handle) Then
            Local $iv_PointerCount = UBound($av_Offset) - 1
        Else
            SetError(2)
            Return 0
        EndIf
    Else
        SetError(1)
        Return 0
    EndIf

    Local $iv_Data[2], $i
    Local $v_Buffer = DllStructCreate('dword')

    For $i = 0 To $iv_PointerCount
        If $i = $iv_PointerCount Then
            $v_Buffer = DllStructCreate($sv_Type)
            If @error Then
                SetError(@error + 2)
                Return 0
            EndIf
            $iv_Address = '0x' & Hex($iv_Data[1] + $av_Offset[$i],8)
            DllCall($ah_Handle[0], 'int', 'ReadProcessMemory', 'int', $ah_Handle[1], 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'int', DllStructGetSize($v_Buffer), 'int', '')
            If @error Then
                SetError(7)
                Return 0
            EndIf
            $iv_Data[1] = DllStructGetData($v_Buffer, 1)
		ElseIf $i = 0 Then
            DllCall($ah_Handle[0], 'int', 'ReadProcessMemory', 'int', $ah_Handle[1], 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'int', DllStructGetSize($v_Buffer), 'int', '')
            If @error Then
                SetError(7)
                Return 0
            EndIf
            $iv_Data[1] = DllStructGetData($v_Buffer, 1)
        Else
            $iv_Address = '0x' & Hex($iv_Data[1] + $av_Offset[$i],8)
            DllCall($ah_Handle[0], 'int', 'ReadProcessMemory', 'int', $ah_Handle[1], 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'int', DllStructGetSize($v_Buffer), 'int', '')
            If @error Then
                SetError(7)
                Return 0
            EndIf
            $iv_Data[1] = DllStructGetData($v_Buffer, 1)
        EndIf
    Next
    $iv_Data[0] = $iv_Address
    Return $iv_Data
EndFunc   ;==>_MemoryPointerRead

Ошибка была в этом месте:
$iv_Address = '0x' & Hex($iv_Data[1] + $av_Offset[$i],8)
_MemoryPointerWrite не проверял на работоспособность.
 

ZeBot

Новичок
Сообщения
1
Репутация
1
Re: NomadMemory удобная работа с памятью.

Вот еще интересная функция из этой же коллекции, может кому пригодиться.
Код:
;===================================================================================================
; Function........:  _MemoryGetBaseAddress($ah_Handle, $iHD)
;
; Description.....:  Reads the 'Allocation Base' from the open process.
;
; Parameter(s)....:  $ah_Handle - An array containing the Dll handle and the handle of the open
;                                 process as returned by _MemoryOpen().
;                    $iHD - Return type:
;                       |0 = Hex (Default)
;                       |1 = Dec
;
; Requirement(s)..:  A valid process ID.
;
; Return Value(s).:  On Success - Returns the 'allocation Base' address and sets @Error to 0.
;                    On Failure - Returns 0 and sets @Error to:
;                       |1 = Invalid $ah_Handle.
;                       |2 = Failed to find correct allocation address.
;                       |3 = Failed to read from the specified process.
;
; Author(s).......:  Nomad. Szhlopp.
; URL.............:  <a href='http://www.autoitscript.com/forum/index.php?showtopic=78834' class='bbc_url' title=''>http://www.autoitscript.com/forum/index.php?showtopic=78834</a>
; Note(s).........:  Go to Www.CheatEngine.org for the latest version of CheatEngine.
;===================================================================================================
Func _MemoryGetBaseAddress($ah_Handle, $iHexDec = 0)

    Local $iv_Address = 0x00100000
    Local $v_Buffer = DllStructCreate('dword;dword;dword;dword;dword;dword;dword')
    Local $vData
    Local $vType

    If Not IsArray($ah_Handle) Then
        SetError(1)
        Return 0
    EndIf


    DllCall($ah_Handle[0], 'int', 'VirtualQueryEx', 'int', $ah_Handle[1], 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'int', DllStructGetSize($v_Buffer))

    If Not @Error Then

        $vData = Hex(DllStructGetData($v_Buffer, 2))
        $vType = Hex(DllStructGetData($v_Buffer, 3))

        While $vType <> "00000080"
            DllCall($ah_Handle[0], 'int', 'VirtualQueryEx', 'int', $ah_Handle[1], 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'int', DllStructGetSize($v_Buffer))
            $vData = Hex(DllStructGetData($v_Buffer, 2))
            $vType = Hex(DllStructGetData($v_Buffer, 3))
            If Hex($iv_Address) = "01000000" Then ExitLoop
            $iv_Address += 65536

        WEnd

        If $vType = "00000080" Then
            SetError(0)
            If $iHexDec = 1 Then
                Return Dec($vData)
            Else
                Return $vData
            EndIf

        Else
            SetError(2)
            Return 0
        EndIf

    Else
        SetError(3)
        Return 0
    EndIf

EndFunc   ;==>_MemoryGetBaseAddress

EDIT:
Нарыл еще пару интересных вещей из той же лодки, прикрепил все вместе, пофиксил пост выше. Кому интересно, потыкайтесь ^^

_MemoryGetBaseAddress - для чтения "NAME.exe"+ADRESS ( Работает только на експешке почему-то, ищу решение для семерки )
_MemoryModuleGetBaseAddress - для чтения "NAME.dll"+ADRESS
 

bistriy

Новичок
Сообщения
22
Репутация
0
Belfigor сказал(а):
Т.к. большинству ботоводов, жизненно необходима эта UDF и в связи с тем, что иногда делая перерыв между своей активностью на год - другой, можно потом в ужасе потеть в попытках найти её и процеживать десятки сообщений пытаясь найти "вот ту которая использовалась вон там", создаю эту тему и размещаю в ней NomadMemory 3.1.127
Список функций:
[list type=decimal]
[*]_MemoryOpen
[*]_MemoryRead
[*]_MemoryWrite
[*]_MemoryClose
[*]_MemoryModuleGetBaseAddress
[*]SetPrivilege
[*]_MemoryPointerRead
[*]_MemoryPointerWrite
[/list]

Очень содержательный заголовок темы. Улыбаюсь. Но где же описание функций . Чешу репу.
 

sngr

AutoIT Гуру
Сообщения
1,011
Репутация
409
описание функций в самой udf
 
Автор
Belfigor

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Ого, а вложение то не пережило обновление движка форума, перезалил
 
Верх