Страница: 1 | 2 | 3 |
Вопрос: ReadProcessMemory()
Добавлено: 17.03.07 18:12
Автор вопроса: Gogic
Мне нужно вытащить данные из одного приложения. Я пытаюсь осуществить это с помощью функции ReadProcessMemory().
Dim WindowID As Long
Dim ThreadID As Long
Dim ProcessID As Long
Dim MemoryID As Long
Dim WBytes As Long
Dim MyBuffer
Private Sub Command1_Click()
'Получаю манипулятор окна по заголовку
WindowID = FindWindow(vbNullString, "ArbAlarm")
Debug.Print WindowID
'Получаю манипулятор текущего процесса и нити
ThreadID = GetWindowThreadProcessId(WindowID, ProcessID)
Debug.Print ProcessID
'Теперь мне нужно воспользоваться функцией ReadProcessMemory() чтобы получить копию памяти процесса
MemoryID = ReadProcessMemory(ProcessID, 1, MyBuffer, 500, WBytes)
Debug.Print MemoryID, MyBuffer, WBytes
'MemoryID=0, значит я что-то не так делаю.
'Второй параметр - это адрес в памяти процесса.
'Вопрос: что там задавать?
End Sub
Ответы
Всего ответов: 34
Номер ответа: 1
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #1
Добавлено: 17.03.07 18:48
базовый адрес не верно задан
для EXE = &H400000
для DLL = &H10000000
Номер ответа: 2
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #2
Добавлено: 17.03.07 19:04
OpenProcess должен предшествовать ReadProcessMemory
Номер ответа: 3
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #3
Добавлено: 17.03.07 19:23
Option Explicit
Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
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 CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Const PROCESS_VM_READ = &H10
Dim MyBuffer() As Byte
Private Sub Command1_Click()
Dim WindowID As Long
Dim ThreadID As Long
Dim ProcessID As Long
Dim MemoryID As Long
Dim WBytes As Long
Dim basar As Long
Dim hndl As Long
Dim x As Integer
Dim sz As Integer
sz = 500
WindowID = FindWindow(vbNullString, "Form1"
ThreadID = GetWindowThreadProcessId(WindowID, ProcessID)
basar = &H400000
ReDim MyBuffer(sz - 1)
hndl = OpenProcess(PROCESS_VM_READ, True, ProcessID)
MemoryID = ReadProcessMemory(hndl, ByVal basar, ByVal VarPtr(MyBuffer(0)), sz, WBytes)
CloseHandle (hndl)
For x = 0 To 499
Debug.Print MyBuffer(x)
Next
End Sub
Номер ответа: 4
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #4
Добавлено: 18.03.07 02:52
вот только зачем всё это???
Номер ответа: 5
Автор ответа:
W[4Fh]LF
Вопросов: 0
Ответов: 187
Web-сайт:
Профиль | | #5
Добавлено: 18.03.07 15:27
для DLL = &H10000000
ImageBase для PE файлов не есть константа.
Номер ответа: 6
Автор ответа:
Gogic
Вопросов: 38
Ответов: 121
Профиль | | #6
Добавлено: 18.03.07 18:32
Я хотел данные вытащить из программы. Она подключается клиентом к одному серверу. Пакеты я снифал, там белиберда, похоже они шифрованные. В памяти тоже лажа, как я вчера увидел (спасибо за посты, кстати). Сейчас попробую еще что-нибудь вытащить на уровне окон, если есть какая инфа по этой теме, подскажите тоже плиз. Прога вообще какая-то странная, ни к dll, ни к ocx не обращается, т.е. вся скомпиленная вместе с контролами похоже.
Номер ответа: 7
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #7
Добавлено: 18.03.07 19:17
Ты хоть бы рассказал какие именно данные, может есть другие способы их вытащить кроме как сканирование памяти процесса
Номер ответа: 8
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #8
Добавлено: 18.03.07 20:25
CODE]какие именно данные[/CODE]
букмейкерские записи, как я понял.
Номер ответа: 9
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #9
Добавлено: 18.03.07 22:26
х.з. я ещё телепатию не досконально освоил...
Номер ответа: 10
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #10
Добавлено: 18.03.07 22:29
ArbAlarm
Номер ответа: 11
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #11
Добавлено: 18.03.07 23:32
ох, ну прям как я мог незнать благо яндекс выручил, и то одна ссылка только
http://www.yandex.ru/yandsearch?rpt=rad&text=ArbAlarm
)))
Номер ответа: 12
Автор ответа:
Gogic
Вопросов: 38
Ответов: 121
Профиль | | #12
Добавлено: 18.03.07 23:36
Прога представляет собой клиент, который цепляется к серверу. На сервер собирает букмекерские
вилки паук. Сервак betspider.net:8989. Прога при включении посылает серваку логин с паролем,
после чего периодически получает данные. Мне эти данные нужны для дальнейшей обработки. Может
как-нибудь еще можно вытащить? Я даже незнаю, что там за типы идут. Из окна проги можно
вытащить, как вы думаете?
Номер ответа: 13
Автор ответа:
Gogic
Вопросов: 38
Ответов: 121
Профиль | | #13
Добавлено: 18.03.07 23:37
Прога буржуйская и анлимный доступ к серваку стоит 2.5k енотов.
Номер ответа: 14
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #14
Добавлено: 19.03.07 00:31
Как прога отображает полученные данные? Где точнее? ListView etc?...
Номер ответа: 15
Автор ответа:
Gogic
Вопросов: 38
Ответов: 121
Профиль | | #15
Добавлено: 19.03.07 01:29
Ага, там 3 взаимосвязанных Listview, каждый Listview во Frame.