Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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-сайт: hunger.ru
 Профиль | | #1
Добавлено: 09.11.05 15:42
FindWindowA
GetWindowThreadProcessId
OpenProcess
ReadProcessMemory/WriteProcessMemory

Только, когда будешь вызывать OpenProcess будь внимателен с параметрами(тестрировал на калкуляторе с параметром PROCESS_ALL_ACCESS).

Ответить

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



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #2
Добавлено: 10.11.05 01:46
Код, но тут чего-то не хватает ;)

Option Explicit

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-сайт: sharpc.livejournal.com
 Профиль | | #7
Добавлено: 11.11.05 01:15
Поставь другое число по дефолту, скомпиль и посмотри адрес тем же ArtMoney. В разных версиях адрес, скорее всего, будет разным, а для того, чтобы его "жестко" найти, тебе понадобится найти, в какой функции в стеке хранится указатель на объект, содержащий элементом это число, по этому указателю найти само число и молиться, что в следующей версии девелоперы не поменяют расположение объявлений данных-членов. Поэтому проще попросить девелоперов сделать простой IPC для управления своей софтиной

Ответить

Номер ответа: 8
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #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
hwnd = FindWindow(vbNullString, "Калькулятор";)

Даже если и делать так (но всё равно не уверен, что прокатит).
Это же dll'ка, плагин. Нужно искать la.exe, bsplayer.exe итд - т.е. те процессы, к которым этот плагин подключён, а как узнать к какому?

Ответить

Страница: 1 |

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



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