Страница: 1 | 2 |
Вопрос: Зачение из памяти
Добавлено: 11.05.06 09:56
Автор вопроса: AsHeS | ICQ: 229759992
Нужно из памяти загруженной программы найти значения определенных (заранее известных) величин, т.е сделать то что делает программа artmoney. Я хочу узнать как можно побайтово считывать значение программы из памяти.
Либо другой вариант
Значения эти отображаються в определенных полях, следовательно они должны туда посылаться через API. Но токо я не уверен что правильно соображаю , так как с API не работал никогда
Ответы
Всего ответов: 17
Номер ответа: 1
Автор ответа:
AsHeS
ICQ: 229759992
Вопросов: 14
Ответов: 93
Профиль | | #1
Добавлено: 11.05.06 10:14
Значение числа в Артмани я взломал и мне известен его адрес (при перезапуске он не меняется). Научите плз как мне перекачать его в свою программу ! Плиииз. Мне позарез нада
Номер ответа: 2
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #2
Добавлено: 11.05.06 11:31
Copymemory
Номер ответа: 3
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #3
Добавлено: 11.05.06 11:49
При чем тут CopyMemory? Чел говорит про адресное пространство другого процесса.
Тема уже обсасывалась не раз, в поиске найдешь.
Для тебя самое простое будет ReadProcessMemory
Номер ответа: 4
Автор ответа:
AsHeS
ICQ: 229759992
Вопросов: 14
Ответов: 93
Профиль | | #4
Добавлено: 11.05.06 13:22
Вот пример
Form1
Dim hWnd As Long '‘ удерживает управление, переданное функцией Find Window.
Dim pID As Long '‘ используется для хранения идентификатора процесса.
Dim pHandle As Long '‘ держит управление процессом.
Dim Znach As String * 20 'в этой переменной хранится считываемый блок памяти
hWnd = FindWindow(vbNullString, "Lineage II"
If (hWnd = 0) Then
MsgBox Not window
Exit Sub
End If
GetWindowThreadProcessId hWnd, pID
pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pID)
If (pHandle = 0) Then
MsgBox "Couldn"
Exit Sub
End If
ReadProcessMemory pHandle, &09980E90, Znach, 4, 0&
CloseHandle hProcess
Debug.Print Znach
End Sub
module1
Public Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long
Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAcess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAdress As Any, ByVal lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Public Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddess As Any, ByVal lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWriten As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Const PROCESS_ALL_ACCESS = &HF0000 Or &H100000 Or &HFFF
Public Const STANDARD_RIGHTS_REQUIRED = &HF0000
Public Const SYNCHRONIZE = &H100000
Public Const PROCESS_VM_READ = &H10
Public Const PROCESS_VM_WRITE = &H20
Проблема в
Ругаеться на значение памяти &09980E90 , а если без "&" то бейсик трансформирует в 9.98E+93
Номер ответа: 5
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #5
Добавлено: 11.05.06 13:23
А &H09980E90 не судьба написать? Или ты хочешь передать это как ссылку
Номер ответа: 6
Автор ответа:
AsHeS
ICQ: 229759992
Вопросов: 14
Ответов: 93
Профиль | | #6
Добавлено: 11.05.06 13:35
Ой вот я олух Сейчас попробую
Номер ответа: 7
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #7
Добавлено: 11.05.06 13:37
А вообще напрасно ты буффер как стринг объявил. Байтовый массив был бы надежнее.
Номер ответа: 8
Автор ответа:
AsHeS
ICQ: 229759992
Вопросов: 14
Ответов: 93
Профиль | | #8
Добавлено: 11.05.06 13:43
Теперь непойму ... Выдает "†". Как мне теперь 1414 получить ?
Номер ответа: 9
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #9
Добавлено: 11.05.06 13:54
1414 - это число или строка?
Подсунь буффер массив () as Byte
Вообще, раз ты читаешь всего 4 байта - то Long тебе в самый раз. Забудь про стринги.
Номер ответа: 10
Автор ответа:
AsHeS
ICQ: 229759992
Вопросов: 14
Ответов: 93
Профиль | | #10
Добавлено: 11.05.06 14:00
1414 это число
Номер ответа: 11
Автор ответа:
AsHeS
ICQ: 229759992
Вопросов: 14
Ответов: 93
Профиль | | #11
Добавлено: 11.05.06 14:02
Если Long то Znach получается 0 - я уже так делал
Номер ответа: 12
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #12
Добавлено: 11.05.06 14:04
Тогда смотри выше
Номер ответа: 13
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #13
Добавлено: 11.05.06 14:06
Извини за тупой вопрос, но ты в декларации
Public Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddess As Any, ByVal lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWriten As Long) As Long
ByVal lpBuffer As Any на ByRef заменял?
Номер ответа: 14
Автор ответа:
AsHeS
ICQ: 229759992
Вопросов: 14
Ответов: 93
Профиль | | #14
Добавлено: 11.05.06 14:18
Заменил - при запуске бейсик слетел с критом
Номер ответа: 15
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #15
Добавлено: 11.05.06 14:27
ByRef lpBuffer As Long должно прокатить палюбому. Че т ты там наглюкавил