Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.10.2019, 13:11   #1
STest
 
Регистрация: 23.10.2019
Сообщений: 6
Вопрос Считать память программы

Привет.
Хочу написать программу для чтения данных с определенной программы (что то типа ArtMoney). Суть такова: программа запускается и считывает всю память что занимает программа и по определенным адресам вытягивает информацию в мемо. Подскажите как лучше это сделать?
STest вне форума Ответить с цитированием
Старый 23.10.2019, 16:29   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,657
По умолчанию

Хорошая хакерская задача. Я сам когда-то мечтал о такой - прикуп в Marriage подсматривать Только ОС, видимо, не позволит ковыряться в "чужой" памяти. Задача для крутых профи - как-то обойти это.
digitalis вне форума Ответить с цитированием
Старый 23.10.2019, 16:54   #3
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Только ОС, видимо, не позволит ковыряться в "чужой" памяти.
Позволяет.
ReadProcessMemory(hProcess, pProcBasicInfo.PebBaseAddress, @pPeb, SizeOf(PEB), ReturnLength)
Только надо знать из какого блока читать можно, а из какого нельзя. А для этого разобрать весь процесс по байтам: Как здесь:
http://rouse.drkb.ru/winapi.php#pmm
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 23.10.2019, 17:01   #4
STest
 
Регистрация: 23.10.2019
Сообщений: 6
По умолчанию

Да вы правы. Нашел код который может сделать все что нужно. Только вот действительно нужно знать что и откуда считывать. Пробовал разобраться используя ArtMoney но не помогло (или плохо разобрался)

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  pe:TProcessEntry32;
  hProc, PID, numberRead : DWORD;
  hWnd  : THandle; // Хэндл окна чата
  IpBuf : Real; // буфер куда поместиться наше значение 
  ipBase: ^dword; // точка входа в памяти
begin
 
 pe.dwSize:=SizeOf(pe);
 hWnd:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
  If Process32First(hWnd,pe) then
    While Process32Next(hWnd,pe) do
      if ExtractFileName(pe.szExeFile)='ABC.exe' then
        PID:=(pe.th32ProcessID);
        Edit2.Text:=inttostr(PID);
  hProc:=OpenProcess(PROCESS_VM_READ, False, PID); // подключаемся к процессу зная его ID
  if hProc <> 0 then // условие проверки подключения к процессу
  try
    Edit3.Text:=inttostr(hProc); // заносим в edit Process
    ipBase:=ptr($005C2582); // RVA слова в памяти
    ReadProcessMemory(hProc, ipBase, Addr(ipbuf), sizeof(IpBuf), numberRead); // чтение из памяти строки
    Edit4.Text:=FloatToStr(ipbuf); // заносим в edit Buffer
  finally
    CloseHandle(hProc); // отсоединяемся от процесса
  end;
end;
STest вне форума Ответить с цитированием
Старый 23.10.2019, 17:16   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от STest Посмотреть сообщение
ArtMoney
CheatEngine лучше.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 23.10.2019, 17:17   #6
STest
 
Регистрация: 23.10.2019
Сообщений: 6
По умолчанию Карта памяти процесса.

Цитата:
Сообщение от Pavia Посмотреть сообщение
Позволяет.
ReadProcessMemory(hProcess, pProcBasicInfo.PebBaseAddress, @pPeb, SizeOf(PEB), ReturnLength)
Только надо знать из какого блока читать можно, а из какого нельзя. А для этого разобрать весь процесс по байтам: Как здесь:
http://rouse.drkb.ru/winapi.php#pmm
не могу скомпилировать ваш пример
Изображения
Тип файла: jpg Screenshot_1.jpg (112.2 Кб, 46 просмотров)
STest вне форума Ответить с цитированием
Старый 23.10.2019, 22:49   #7
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,897
По умолчанию

Цитата:
Сообщение от STest Посмотреть сообщение
не могу скомпилировать ваш пример
Версии Дельфи не совместимы.
northener вне форума Ответить с цитированием
Старый 24.10.2019, 10:58   #8
STest
 
Регистрация: 23.10.2019
Сообщений: 6
По умолчанию

В принципе если покопаться в коде программы и узнать нужные смещения можно получить нужную информацию
Затрону тогда немножко другой вопрос: можно ли получить информацию о процессе другого ПК (по сети)?
STest вне форума Ответить с цитированием
Старый 28.10.2019, 13:27   #9
Heneken87
Форумчанин
 
Регистрация: 27.04.2012
Сообщений: 219
По умолчанию

Цитата:
Сообщение от STest Посмотреть сообщение
В принципе если покопаться в коде программы и узнать нужные смещения можно получить нужную информацию
Затрону тогда немножко другой вопрос: можно ли получить информацию о процессе другого ПК (по сети)?
Инфу можно получить хоть откуда, важным критерием останется доступ к объекту. В случае с локальным ПК, доступ у Вас есть, поскольку утилиту вы запускаете из прав администратора. Что касается удаленного ПК, то прямого доступа к его памяти и к его процессам у Вас нет. Для этого и делают трояны, которые запускаются на чужом ПК и передают всю необходимую информацию.

P:S https://habr.com/ru/sandbox/40688/
Это все в ознакомительных целях.
Пишу много и развернуто

Последний раз редактировалось Heneken87; 28.10.2019 в 13:31.
Heneken87 вне форума Ответить с цитированием
Старый 28.10.2019, 14:44   #10
STest
 
Регистрация: 23.10.2019
Сообщений: 6
По умолчанию

Спасибо за ответ. буду изувать
STest вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Часть кода сделал. Односвязный список без заглавного звена. Динамическая память. Перевернуть список и считать в обратном порядке. Varner Общие вопросы Delphi 5 19.05.2016 17:30
Считать пользователя при запуске программы Евгений_Магистр Общие вопросы Delphi 2 07.01.2013 14:08
Загрузка программы в память CodeNOT Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 10 13.12.2011 23:58
При работе программы чем-то забивается память.. brazhnik Общие вопросы Delphi 2 14.10.2011 09:57
память программы Андрей.12 Свободное общение 7 13.01.2010 23:44