Страница: 1 |
Страница: 1 |
Вопрос: Поиск и редактирование значения в памяти
Добавлено: 06.11.05 22:20
Автор вопроса: xa0c | ICQ: 993606
Если бы можно было редактировать названия тем, я бы переименовал старый топик...
Вот ссылка: http://vbnet.ru/forum/show.aspx?id=90339
(извиняюсь за даблпост)
Ответы
Всего ответов: 10
Номер ответа: 1
Автор ответа:
BUG(O)R
ICQ: 827887
Вопросов: 13
Ответов: 142
Web-сайт:
Профиль | | #1
Добавлено: 09.11.05 15:42
FindWindowA
GetWindowThreadProcessId
OpenProcess
ReadProcessMemory/WriteProcessMemory
Только, когда будешь вызывать OpenProcess будь внимателен с параметрами(тестрировал на калкуляторе с параметром PROCESS_ALL_ACCESS).
Номер ответа: 2
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #2
Добавлено: 10.11.05 01:46
Код, но тут чего-то не хватает
Private Declare Function GetWindowThreadProcessId Lib "user32.dll" (ByVal hwnd As Long, ByRef lpdwProcessId As Long) As Long
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
Private Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long
Private Declare Function WriteProcessMemory Lib "kernel32.dll" (ByVal hProcess As Long, ByRef lpBaseAddress As Any, ByRef lpBuffer As Any, ByVal nSize As Long, ByRef lpNumberOfBytesWritten As Long) As Long
Private Declare Function VirtualQueryEx Lib "kernel32.dll" (ByVal hProcess As Long, ByRef lpAddress As Any, ByRef lpBuffer As MEMORY_BASIC_INFORMATION, ByVal dwLength As Long) As Long
Private Type MEMORY_BASIC_INFORMATION
BaseAddress As Long
AllocationBase As Long
AllocationProtect As Long
RegionSize As Long
State As Long
Protect As Long
lType As Long
End Type
Private Const STANDARD_RIGHTS_REQUIRED As Long = &HF0000
Private Const SYNCHRONIZE As Long = &H100000
Private Const PROCESS_ALL_ACCESS As Long = (STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &HFFF)
Sub Main()
Dim hwnd As Long, _
hProcess As Long, _
sStr As String
Dim MI As MEMORY_BASIC_INFORMATION
sStr = StrConv("Hello", vbUnicode) & vbNullChar
hwnd = FindWindow(vbNullString, "Калькулятор"
If hwnd = 0& Then
MsgBox "calc.exe не запущен..."
Exit Sub
End If
Call GetWindowThreadProcessId(hwnd, hProcess)
hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0&, hProcess)
Call VirtualQueryEx(hProcess, ByVal &H959E2, MI, Len(MI))
Call WriteProcessMemory(hProcess, ByVal &H959E2, ByVal sStr, Len(sStr), ByVal 0&
Call CloseHandle(hProcess)
End Sub
Номер ответа: 3
Автор ответа:
xa0c
ICQ: 993606
Вопросов: 7
Ответов: 28
Профиль | | #3
Добавлено: 10.11.05 02:45
Эт конечно хорошо, только как мне найти именно тот адрес, куда значение писАть?
Он же при каждом запуске меняется...
Номер ответа: 4
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #4
Добавлено: 10.11.05 03:43
Как например артманя ищет? Берёт смотрит с какого адреса прога начинается, знает размер проги, т.е. есть начальная и конечная точка для поиска значений в памяти, потом перебирает все адреса и сравнивает значения в них с нашим искомым, всё как в сказке! только дайте сырсы )))))!
Номер ответа: 5
Автор ответа:
xa0c
ICQ: 993606
Вопросов: 7
Ответов: 28
Профиль | | #5
Добавлено: 10.11.05 05:30
сырсы чего? ))
directvobsub - opensource
Не могу понять чего там сказочного, по дефолту значение параметра "0" - сколько адресов выдаст поиск представьте...
Номер ответа: 6
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #6
Добавлено: 10.11.05 06:36
а никто и не говорил что их должно мало выдать... просто их потом надо фильтровать, ну как артманя
Номер ответа: 7
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #7
Добавлено: 11.11.05 01:15
Поставь другое число по дефолту, скомпиль и посмотри адрес тем же ArtMoney. В разных версиях адрес, скорее всего, будет разным, а для того, чтобы его "жестко" найти, тебе понадобится найти, в какой функции в стеке хранится указатель на объект, содержащий элементом это число, по этому указателю найти само число и молиться, что в следующей версии девелоперы не поменяют расположение объявлений данных-членов. Поэтому проще попросить девелоперов сделать простой IPC для управления своей софтиной
Номер ответа: 8
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #8
Добавлено: 11.11.05 23:39
Для этого тут: VirtualQueryEx
Номер ответа: 9
Автор ответа:
xa0c
ICQ: 993606
Вопросов: 7
Ответов: 28
Профиль | | #9
Добавлено: 12.11.05 04:14
Хехе... Один простой вопрос - как? )
Номер ответа: 10
Автор ответа:
xa0c
ICQ: 993606
Вопросов: 7
Ответов: 28
Профиль | | #10
Добавлено: 12.11.05 04:18
Даже если и делать так (но всё равно не уверен, что прокатит).
Это же dll'ка, плагин. Нужно искать la.exe, bsplayer.exe итд - т.е. те процессы, к которым этот плагин подключён, а как узнать к какому?