Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/30: Рейтинг темы: голосов - 30, средняя оценка - 4.97
1 / 1 / 0
Регистрация: 16.03.2012
Сообщений: 5

Поиск адреса в памяти запущенного процесса

16.03.2012, 11:34. Показов 6024. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, всем доброго здравия и времени суток! У меня есть вот такая тема, пишу программу которая ищет в памяти процесса указанный адрес и считывает его значение. Собственно сам программный код ниже:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var
  GameScreen: HWND;
  Buffer: Byte;
  ProcessIdentifier, ProcessHandle, Temp: Cardinal;
  Difference: Integer;
  Previous: Byte = 0;
begin
  GameScreen := FindWindow(nil, PChar('Заголовок окна процесса'));
  if GameScreen <> 0 then
  begin
    GetWindowThreadProcessId(GameScreen, @ProcessIdentifier);
    ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessIdentifier);
    ReadProcessMemory(ProcessHandle, Ptr($0B47BD00), @Buffer, 1, Temp);
    WriteLn(IntToStr(Buffer));
  end;
end;
Сам код работает безупречно! Но вот в чем загвоздка, адрес из которого я считываю нужные мне данные является динамическим, то есть он меняется при каждом запуске программы или обновлении. Собственно вопрос, как же мне прочитать нужное значение если его адрес постоянно меняется?
Хотя мне удалось выяснить некоторую закономерность, при новом получении адреса изменяются только несколько символов, стольные же остаются неизменными. Может быть надо производить некий поиск с фильтрацией или что?
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.03.2012, 11:34
Ответы с готовыми решениями:

Поиск строки в памяти запущенного процесса и её изменение
Не могу решить задачку нужно считать строку из памяти процесса запущенной программы. RVA строки $0036D0C8 нужен ведь RVA не VA ...

Поиск адреса в памяти процесса и изменение нескольких байт по этому адресу
Помогите Поиск адреса сделал осталось изменение байт по адресу как адрес из string перевести в Pointer? в string он записывается...

Поиск строки в памяти запущенного процесса и её изменение
Подскажи пожалуйста, что я делаю не так. Вот мой код. #include &quot;windows.h&quot; #include &lt;iostream&gt; using namespace std; int...

7
 Аватар для БогДелфей
474 / 337 / 36
Регистрация: 31.05.2011
Сообщений: 1,164
16.03.2012, 12:57
ну ищи с фильтрацией
0
1 / 1 / 0
Регистрация: 16.03.2012
Сообщений: 5
16.03.2012, 15:46  [ТС]
Цитата Сообщение от БогДелфей Посмотреть сообщение
ну ищи с фильтрацией
Если мои предположения по поводу поиска с фильтрацией кажутся вам очень смешными, то что в таком случаи что вы посоветуете?
0
 Аватар для БогДелфей
474 / 337 / 36
Регистрация: 31.05.2011
Сообщений: 1,164
16.03.2012, 16:38
ты не туды курс держишь, тебе нужно искать статический адрес в котором будет находица динамический адрес твоего значения возможно в определённый момент
0
1 / 1 / 0
Регистрация: 16.03.2012
Сообщений: 5
16.03.2012, 18:04  [ТС]
Цитата Сообщение от БогДелфей Посмотреть сообщение
тебе нужно искать статический адрес в котором будет находица динамический адрес твоего значения
Опять не понял! Искать статический адрес в котором будет находится динамический искомого значение. Хм... Честно говоря я пока смутно себе это представляю. Вернее, иными словами, как же мне узнать статический адрес? Динамический я нашел с помощью, ArtMoney. Но при попытке найти статический нечего не выходит или я опять что-то не так понял?
0
 Аватар для БогДелфей
474 / 337 / 36
Регистрация: 31.05.2011
Сообщений: 1,164
16.03.2012, 18:16
узнать можно потрасеровав в отладчике, но там есть свои тонкости, ещё есть вариант накодить артманю, не всю канечно а поиск значения
0
1 / 1 / 0
Регистрация: 16.03.2012
Сообщений: 5
17.03.2012, 09:33  [ТС]
Цитата Сообщение от БогДелфей Посмотреть сообщение
узнать можно потрасеровав в отладчике, но там есть свои тонкости, ещё есть вариант накодить артманю, не всю канечно а поиск значения
Так вы меня заинтересовали своими словами. Ну, с отладчиками я плохо управляюсь. Ну, адрес нужного мне значения, как уже говорил, нахожу с помощью, ArtMoney. Работаю с компьютерной игрой, Unreal Tournament 2004. Динамический адрес находится без проблем, но что делать дальше что бы найти его статический адрес? Можете объяснить, детальнее как это делается? За оказанную помощь буду очень благодарен! Просто я уже сам не знаю что я ищу, вернее как запутался уже...
0
 Аватар для БогДелфей
474 / 337 / 36
Регистрация: 31.05.2011
Сообщений: 1,164
17.03.2012, 12:32
гугл детально может
вот те кусок для поиска адреса значения
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
var
  ProcessID, Addr, Value, BytesRead: DWord;
  ProcessHandle: THandle;
  Mbi: TMemoryBasicInformation;
  i: Cardinal;
  Buf: PChar;
begin
  ProcessHandle := FindWindow(nil, PChar('Заголовок окна процесса'));
  GetWindowThreadProcessId(ProcessHandle, @ProcessID);
  Value := 12321;
  ProcessHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_ALL_ACCESS or PROCESS_VM_OPERATION, false, ProcessID);
    if ProcessHandle <> 0 then
      try
        Addr := 0;
          while VirtualQueryEx(ProcessHandle, Pointer(Addr), Mbi, SizeOf(Mbi)) <> 0 do
            begin
              if (Mbi.State = MEM_COMMIT) and not ((Mbi.Protect and PAGE_GUARD) = PAGE_GUARD) then
                begin
                  GetMem(Buf, Mbi.RegionSize);
                    try
                      if ReadProcessMemory(ProcessHandle, Mbi.BaseAddress, Buf, Mbi.RegionSize, BytesRead) then
                        begin
                          for i := 0 to BytesRead - SizeOf(Value) do
                            begin
                              if PDWord(@Buf[i])^ = Value then Memo1.Lines.Add('$' + IntToHex(Integer(Cardinal(Mbi.BaseAddress) + i), 8));
                            end;
                        end
                      else
                    finally
                      FreeMem(Buf);
                    end;
                end;
              Addr := Addr + Mbi.RegionSize;
            end;
      finally
        CloseHandle(ProcessHandle);
      end;
end;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.03.2012, 12:32
Помогаю со студенческими работами здесь

Чтение памяти запущенного процесса
Уважаемые, подскажите, как и чем можно воспользоваться для чтения памяти запущенного процесса ? Насколько я понимаю,...

Поиск запущенного процесса и его завершение
Доброго всем времени суток. Сам в VBS не силен, но необходимо: Скрипт проверяет наличие запущенного процесса, если процесс запущен...

Поиск запущенного процесса Visual Studio C++
Добрый день форум!)хех Мне нужно что-бы при запуске консольного приложения писалось например что процесс &quot;TslGame.exe&quot; -...

Чтение памяти процесса. Динамические адреса
Здравствуйте! Пожалуйста помогите разобраться. Я научился читать память виртуального процесса, а именно World of Warcraft. Но адреса в...

Нахождение статического адреса в памяти процесса
Всем привет, может кто-нибудь помочь найти статический адрес в памяти процесса при помощи c# Win.Form и изменить его значение ? Вот адрес...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru