Чтение памяти процесса

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Demonx
Бывалый
Бывалый
 
Сообщения: 237
Зарегистрирован: 25.06.2003 (Ср) 0:08
Откуда: Литва/Висагинас

Чтение памяти процесса

Сообщение Demonx » 18.01.2006 (Ср) 21:45

Открыл Artmoney, выбрал процесс, нашёл нужное значение по адресу 00B17913.
Как сделать тоже самое на VB, то есть прочитать значение по адресу 00B17913?
Изображение

Arcanoid
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 162
Зарегистрирован: 01.01.2005 (Сб) 15:44

Сообщение Arcanoid » 18.01.2006 (Ср) 21:58

ReadProcessMemory()
Invalid user or password...

Demonx
Бывалый
Бывалый
 
Сообщения: 237
Зарегистрирован: 25.06.2003 (Ср) 0:08
Откуда: Литва/Висагинас

Сообщение Demonx » 18.01.2006 (Ср) 22:07

А подробней можно? Я много примеров находил..сначала в Artmoney нашёл адрес, потом в вб подставил - ничего не работает :(
Изображение

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 19.01.2006 (Чт) 11:48

Demonx писал(а):потом в вб подставил - ничего не работает :(


а что не работает то? как подставлял? куда подставлял? что собственно говоря хотел получить?... Одним словом: Код в студию!
Весь мир матрица, а мы в нем потоки байтов!

Demonx
Бывалый
Бывалый
 
Сообщения: 237
Зарегистрирован: 25.06.2003 (Ср) 0:08
Откуда: Литва/Висагинас

Сообщение Demonx » 20.01.2006 (Пт) 3:59

Код: Выделить всё

Private Const PROCESS_ALL_ACCESS As Long = &H1F0FFF
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long

Private Function ReadMemory(hWnd As Long, Address As Long, Bytes As Long) As String
    On Error Resume Next
    Dim pId As Long        ' Used to hold the Process Id
    Dim pHandle As Long    ' Holds the Process Handle
    Dim bytValue As Long   'Stores the value of a byte in the memory
    Dim i As Long
    Dim Text As String
   
    ' Get the ProcId of the Window
    GetWindowThreadProcessId hWnd, pId

    ' use the pId to get a handle
    pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pId)
   
    If (pHandle = 0) Then
         'MsgBox "Unable to open process!"
         Exit Function
    End If
    If Address = 0 Then Exit Function
   
    For i = 1 To Bytes Step 2
       ' Read Byte to Byte
       ReadProcessMemory pHandle, Address + i - 1, bytValue, 1, 0&
       'value now contains the long value of the byte located in [Address + i - 1] pos.
       'ReadMemory is a string...
       
       ReadMemory = ReadMemory & Chr$(bytValue)
    Next
    CloseHandle pHandle
End Function


Совсем по этому адресу ничего не выдаёт..хотя artmoney показывает
Изображение

Wild VB Code for Food
Постоялец
Постоялец
 
Сообщения: 387
Зарегистрирован: 16.06.2005 (Чт) 17:34
Откуда: ты, друг? =)) Сообщений: 1234

Сообщение Wild VB Code for Food » 20.01.2006 (Пт) 4:26

ты hwnd тот получил?
Лучше думать чем жевать.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 20.01.2006 (Пт) 12:11

не вдаваясь в суть кода можно узреть одну странность: цикл идет с шагом 2, запрашивается для чтения 1 байт, а для его чтения используется переменная типа Long с 4 байтами.

Не тут ли собака покапалась?
Весь мир матрица, а мы в нем потоки байтов!

mdx
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 169
Зарегистрирован: 06.01.2006 (Пт) 18:13
Откуда: I'm from Russia!

Сообщение mdx » 20.01.2006 (Пт) 12:29

Код: Выделить всё
Dim bytValue As Byte
For i = 0 To Bytes - 1
       ReadProcessMemory pHandle, Address, bytValue, 1, 0&
This posting is provided "AS IS" with no warranties, and confers no rights.

Изображение

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 20.01.2006 (Пт) 13:09

:shock:
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 20.01.2006 (Пт) 16:07

mdx писал(а):
Код: Выделить всё
Dim bytValue As Byte
For i = 0 To Bytes - 1
       ReadProcessMemory pHandle, Address, bytValue, 1, 0&


И зачем тебе Bytes раз читать байт с одного и того же адреса?
Весь мир матрица, а мы в нем потоки байтов!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Yandex-бот и гости: 160

    TopList