Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Поиск значения в памяти процесса (API) Добавлено: 29.09.09 13:56  

Автор вопроса:   Aleksey
Хочу сделать некую пародию на трейнер для игры, чтобы можно было в нужные адреса в памяти писать нужные значения.
И так, делать это пытаюсь с пом. WinAPI в vb.net.

'Объявил все нужные функции
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, ByRef lpdwProcessId As Long) As Long
Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAcess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Declare Function ReadProcessMemory Lib "KERNEL32.DLL" Alias "ReadProcessMemory" (ByVal hProcess As Byte, ByVal lpBaseAddress As Long, ByVal lpBuffer As Object, ByVal nSize As Byte, ByVal lpNumberOfReadedBytes As Long) As Long

sub main()
Dim PID, hWnd As Long
hWnd = FindWindow(vbNullString, "SomeWindowTitle")
GetWindowThreadProcessId(hWnd, PID)
PID = OpenProcess(PROCESS_ALL_ACCESS, 0&, PID)
'и вот самое главное - чтение из памяти:
ReadProcessMemory(PID, lpBaseAddress, lpBuffer, buffsize, readedbyte)

откуда брать значение lpBaseAddress?
По идее это значение должно быть из диапазона адресов занимаемых процессом, вот как узнать этот диапазон?

Ответить

  Ответы Всего ответов: 2  

Номер ответа: 1
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #1
Добавлено: 29.09.09 23:33
VirtualQueryEx

Ответить

Номер ответа: 2
Автор ответа:
  Aleksey



Вопросов: 12
Ответов: 35
 Профиль | | #2 Добавлено: 02.10.09 12:11
Ок, добавляю нужные объявления функций:
...
Declare Function VirtualQueryEx Lib "kernel32" (ByVal hProcess As Long, ByRef lpAddress As Long, ByRef lpBuffer As MEMORY_BASIC_INFORMATION, ByVal dwLength As Long) As Long

Structure MEMORY_BASIC_INFORMATION
        Dim BaseAddress As Long
        Dim AllocationBase As Long
        Dim AllocationProtect As Long
        Dim RegionSize As Long
        Dim state As Long
        Dim protect As Long
        Dim type As Long
End Structure

Sub main ()
...
dim meminfo as MEMORY_BASIC_INFORMATION

VirtualQueryEx PID, lpAddress, meminfo, Len(meminfo)

но тут возникает вопрос: а откуда взять lpAddress?
Порывшись в МСДН, понял что его надо взять из GetSystemInfo()
добавляю объявление этой ф-ции:
Public Structure SYSTEM_INFO
        Public dwOemID As Long
        Public dwPageSize As Long
        Public lpMinimumApplicationAddress As Long
        Public lpMaximumApplicationAddress As Long
        Public dwActiveProcessorMask As Long
        Public dwNumberOfProcessors As Long
        Public dwProcessorType As Long
        Public dwAllocationGranularity As Long
        Public wProcessorLevel As Short
        Public wProcessorRevision As Short
End Structure

Declare Function GetSystemInfo Lib "kernel32.dll" (ByRef lpSystemInfo As SYSTEM_INFO) As Long

Dim sysinfo As SYSTEM_INFO

GetSystemInfo(sysinfo)

после этого уже вызываю VirtualQueryEx
dim lpAddress=sysinfo.lpMinimumApplicationAddress
VirtualQueryEx PID, lpAddress, meminfo, Len(meminfo)

но переменная meminfo не заполняется данными :(
Что я тут делаю не так?

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам