Регистрация Главная Сообщество
Сообщения за день Справка Регистрация
Навигация
Zhyk.org LIVE! Реклама на Zhyk.org Правила Форума Награды и достижения Доска "почета"

Чтение строки из другого процесса средством WinAPI

-

Вопросы и ответы, обсуждения

- Ваши вопросы по Pascal/Delphi только в данном разделе

Ответ
 
Опции темы
Старый 23.03.2015, 15:14   #1
 Разведчик
Аватар для ZigaRex
 
ZigaRex никому не известный тип
Регистрация: 23.03.2015
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Чтение строки из другого процесса средством WinAPI

Требуется прочитать значение строковой переменной другого процесса (в моем случае процесс "SA-MP 0.3").
[Ссылки могут видеть только зарегистрированные пользователи. ]
Нашел адрес этой строки ($00863974) и ее значение (mapname) через Cheat Engine. Далее сам код:

Код:
var
  h: hWnd;
  ProcessId: Cardinal;
  hProcess: THandle;
  Adress: dword;
  readwrite: cardinal;
  Form1: TForm1;

procedure TForm1.Button1Click(Sender: TObject);
begin
  h:= FindWindow(nil, 'SA-MP 0.3');
  GetWindowThreadProcessId(h, @ProcessId);
  hProcess:= OpenProcess(Process_All_Access, False, ProcessId);
  ReadProcessMemory(hProcess, ptr($00863974), @Adress, 4, readwrite);
  ShowMessage(IntToStr(Adress));
end;
В результате чего выводится число: [Ссылки могут видеть только зарегистрированные пользователи. ]
Возник вопрос: как правильно вывести текстовую строку из другого процесса?
  Ответить с цитированием
Старый 24.03.2015, 09:36   #2
 Рыцарь-лейтенант
Аватар для mars2107
 
mars2107 сломал счётчик популярности :(mars2107 сломал счётчик популярности :(mars2107 сломал счётчик популярности :(mars2107 сломал счётчик популярности :(mars2107 сломал счётчик популярности :(mars2107 сломал счётчик популярности :(mars2107 сломал счётчик популярности :(mars2107 сломал счётчик популярности :(mars2107 сломал счётчик популярности :(mars2107 сломал счётчик популярности :(mars2107 сломал счётчик популярности :(
Регистрация: 10.06.2011
Сообщений: 467
Популярность: 31147
Сказал(а) спасибо: 231
Поблагодарили 488 раз(а) в 226 сообщениях
Отправить сообщение для mars2107 с помощью ICQ Отправить сообщение для mars2107 с помощью Skype™
 
По умолчанию Re: Чтение строки из другого процесса средством WinAPI

Я так делал.

Код:
procedure TForm1.FormCreate(Sender: TObject);
var
  name : array[0..20] of WideChar;
begin
// Ник
  ZeroMemory(@name[0], sizeof(name));
  address := $10A490C;
  HandleWindow := FindWindow(nil, WindowTitle);
  GetWindowThreadProcessId(HandleWindow,@ProcessId);
  HandleProc := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId);
  BaseAddress := GetModuleAddress(ProcessId, 'Game.dll');
  ReadProcessMemory(HandleProc, Ptr(BaseAddress + Address), @name[0], sizeof(name), readwrite);
  label1.caption := (WideCharToString(@name[0]));
end;
Ты возможно ищешь эту строку

Код:
label1.caption := (WideCharToString(@name[0]));
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]
[Ссылки могут видеть только зарегистрированные пользователи. ]

[Ссылки могут видеть только зарегистрированные пользователи. ]
  Ответить с цитированием
Старый 24.03.2015, 12:06   #3
 Разведчик
Аватар для ZigaRex
 
ZigaRex никому не известный тип
Регистрация: 23.03.2015
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Чтение строки из другого процесса средством WinAPI

теперь вместо чисел выводит "????????" или "??": [Ссылки могут видеть только зарегистрированные пользователи. ]
  Ответить с цитированием
Старый 24.03.2015, 12:11   #4
Почетный Пользователь
 Сержант
Аватар для MembRupt
 
MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(
Регистрация: 18.07.2013
Сообщений: 148
Популярность: 83981
Сказал(а) спасибо: 564
Поблагодарили 258 раз(а) в 195 сообщениях
 
По умолчанию Re: Чтение строки из другого процесса средством WinAPI

Цитата:
Сообщение от ZigaRexПосмотреть сообщение
теперь вместо чисел выводит "????????" или "??": [Ссылки могут видеть только зарегистрированные пользователи. ]

Может адрес неверный или не unicode строка?
  Ответить с цитированием
Пользователь сказал cпасибо:
NebesaBag (25.03.2015)
Старый 24.03.2015, 18:21   #5
 Разведчик
Аватар для ZigaRex
 
ZigaRex никому не известный тип
Регистрация: 23.03.2015
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Чтение строки из другого процесса средством WinAPI

Цитата:
Сообщение от MembRuptПосмотреть сообщение
Может адрес неверный или не unicode строка?

Насчет первого, я прикрепил отдельно скрин (см. самый первый пост, самую первую ссылку). Адрес верный. Насчет unicod/не unicod - каким способом определить?
  Ответить с цитированием
Старый 25.03.2015, 10:58   #6
Подпольщик RF Online
 Пехотинец
Аватар для артём612
 
артём612 лучик света в грозовом небеартём612 лучик света в грозовом небеартём612 лучик света в грозовом небеартём612 лучик света в грозовом небеартём612 лучик света в грозовом небеартём612 лучик света в грозовом небеартём612 лучик света в грозовом небе
Регистрация: 10.10.2011
Сообщений: 65
Популярность: 772
Сказал(а) спасибо: 58
Поблагодарили 57 раз(а) в 32 сообщениях
Отправить сообщение для артём612 с помощью Skype™
 
По умолчанию Re: Чтение строки из другого процесса средством WinAPI

Цитата:
Сообщение от ZigaRexПосмотреть сообщение
Код:
var
  h: hWnd;
  ProcessId: Cardinal;
  hProcess: THandle;
  Adress: dword;
  readwrite: cardinal;
  Form1: TForm1;

procedure TForm1.Button1Click(Sender: TObject);
begin
  h:= FindWindow(nil, 'SA-MP 0.3');
  GetWindowThreadProcessId(h, @ProcessId);
  hProcess:= OpenProcess(Process_All_Access, False, ProcessId);
  ReadProcessMemory(hProcess, ptr($00863974), @Adress, 4, readwrite);
  ShowMessage(IntToStr(Adress));
end;

Ваша проблема в том что вы прочитали 4 символа строки и переводите их в значение типа integer.
Вам надо было сначало создать массив н символов типа char ,где н = количество символов строки +1
Далее прочитать из процесса по адресу в этот массив строку,после просто её вывести функцией ShowMessage
  Ответить с цитированием
Старый 25.03.2015, 12:16   #7
 Разведчик
Аватар для ZigaRex
 
ZigaRex никому не известный тип
Регистрация: 23.03.2015
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Чтение строки из другого процесса средством WinAPI

Цитата:
Сообщение от артём612Посмотреть сообщение
Ваша проблема в том что вы прочитали 4 символа строки и переводите их в значение типа integer.
Вам надо было сначало создать массив н символов типа char ,где н = количество символов строки +1
Далее прочитать из процесса по адресу в этот массив строку,после просто её вывести функцией ShowMessage

Принцип ясен, а вот как это сделать — не знаю.
  Ответить с цитированием
Старый 25.03.2015, 19:29   #8
Подпольщик RF Online
 Пехотинец
Аватар для артём612
 
артём612 лучик света в грозовом небеартём612 лучик света в грозовом небеартём612 лучик света в грозовом небеартём612 лучик света в грозовом небеартём612 лучик света в грозовом небеартём612 лучик света в грозовом небеартём612 лучик света в грозовом небе
Регистрация: 10.10.2011
Сообщений: 65
Популярность: 772
Сказал(а) спасибо: 58
Поблагодарили 57 раз(а) в 32 сообщениях
Отправить сообщение для артём612 с помощью Skype™
 
По умолчанию Re: Чтение строки из другого процесса средством WinAPI

Цитата:
Принцип ясен, а вот как это сделать — не знаю.

Пример был вам представлен.

Если его переделать под ваш код ,то должно получится примерно следующее...
Код:
var
  HandleWindow: hWnd;
  ProcessId: Cardinal;
  hProcess: THandle;
  Adress: dword;
  readwrite: cardinal;

procedure TForm1.FormCreate(Sender: TObject);
var
                          //длина строки 21 символ
  strfromprocess : array[0..20] of Char; //Char - для Ascii символов и WideChar для юникода
begin
  ZeroMemory(@strfromprocess[0], sizeof(strfromprocess));//Обнуляем массив на случай если он будет содержать мусор

  HandleWindow := FindWindow(nil, 'SA-MP 0.3');//Ищем окно игры
  GetWindowThreadProcessId(HandleWindow,@ProcessId);//Получаем id процесса игры
  hProcess := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId); //Открываем хандл процесса на доступ для функций чтения\записи в процесс
  ReadProcessMemory(hProcess, $00863974, @strfromprocess[0], sizeof(strfromprocess), readwrite); //Читаем память процесса 
 
  //hProcess - дискриптор процесса 
  //$00863974 - Адрес где читаем память 
  //@strfromprocess[0] - Указатель на буфер куда читаем 
  //sizeof(strfromprocess) - Количество байт для чтения (Для Ascii 1 символ =  1 байт ,для Юникода 1 символ = 2 байта)

  ShowMessage(strfromprocess); //Выводим прочитанную строку
end;
  Ответить с цитированием
Старый 25.03.2015, 20:13   #9
 Разведчик
Аватар для ZigaRex
 
ZigaRex никому не известный тип
Регистрация: 23.03.2015
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Чтение строки из другого процесса средством WinAPI

Цитата:
Сообщение от артём612Посмотреть сообщение
Пример был вам представлен.

Если его переделать под ваш код ,то должно получится примерно следующее...
Код:
var
  HandleWindow: hWnd;
  ProcessId: Cardinal;
  hProcess: THandle;
  Adress: dword;
  readwrite: cardinal;

procedure TForm1.FormCreate(Sender: TObject);
var
                          //длина строки 21 символ
  strfromprocess : array[0..20] of Char; //Char - для Ascii символов и WideChar для юникода
begin
  ZeroMemory(@strfromprocess[0], sizeof(strfromprocess));//Обнуляем массив на случай если он будет содержать мусор

  HandleWindow := FindWindow(nil, 'SA-MP 0.3');//Ищем окно игры
  GetWindowThreadProcessId(HandleWindow,@ProcessId);//Получаем id процесса игры
  hProcess := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId); //Открываем хандл процесса на доступ для функций чтения\записи в процесс
  ReadProcessMemory(hProcess, $00863974, @strfromprocess[0], sizeof(strfromprocess), readwrite); //Читаем память процесса 
 
  //hProcess - дискриптор процесса 
  //$00863974 - Адрес где читаем память 
  //@strfromprocess[0] - Указатель на буфер куда читаем 
  //sizeof(strfromprocess) - Количество байт для чтения (Для Ascii 1 символ =  1 байт ,для Юникода 1 символ = 2 байта)

  ShowMessage(strfromprocess); //Выводим прочитанную строку
end;

Теперь вылезает пуская строчка xD:[Ссылки могут видеть только зарегистрированные пользователи. ]
P.S. код скопировал точно, перепроверил, ошибок быть не должно)
  Ответить с цитированием
Старый 27.03.2015, 02:42   #10
Reaper
 Фельдмаршал
Аватар для Dinmaite
 
Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(
Регистрация: 13.08.2009
Сообщений: 1,004
Популярность: 25098
Золото Zhyk.Ru: 350
Сказал(а) спасибо: 110
Поблагодарили 830 раз(а) в 395 сообщениях
Отправить сообщение для Dinmaite с помощью ICQ
 
По умолчанию Re: Чтение строки из другого процесса средством WinAPI

А проблема всего лишь в том, что нужно быть внимательнеё.


Цитата:
ReadProcessMemory(hProcess, $00863974, @strfromprocess[0], sizeof(strfromprocess), readwrite); //Читаем память процесса

ptr($00863974)
  Ответить с цитированием
Старый 27.03.2015, 11:59   #11
 Разведчик
Аватар для ZigaRex
 
ZigaRex никому не известный тип
Регистрация: 23.03.2015
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Чтение строки из другого процесса средством WinAPI

Цитата:
Сообщение от DinmaiteПосмотреть сообщение
А проблема всего лишь в том, что нужно быть внимательнеё.



ptr($00863974)

Нет, это я учитывал. Код копировал с учетом ptr(), без него не компилируется.
  Ответить с цитированием
Старый 27.03.2015, 20:02   #12
Reaper
 Фельдмаршал
Аватар для Dinmaite
 
Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(
Регистрация: 13.08.2009
Сообщений: 1,004
Популярность: 25098
Золото Zhyk.Ru: 350
Сказал(а) спасибо: 110
Поблагодарили 830 раз(а) в 395 сообщениях
Отправить сообщение для Dinmaite с помощью ICQ
 
По умолчанию Re: Чтение строки из другого процесса средством WinAPI

В таком случае мне бы хотелось видеть область памяти, в которой записан текст. Но вероятно он попросту записан в юникоде. Соответственно массив должен быть типа wChar
  Ответить с цитированием
Старый 28.03.2015, 11:55   #13
 Разведчик
Аватар для ZigaRex
 
ZigaRex никому не известный тип
Регистрация: 23.03.2015
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Чтение строки из другого процесса средством WinAPI

Цитата:
Сообщение от DinmaiteПосмотреть сообщение
В таком случае мне бы хотелось видеть область памяти, в которой записан текст. Но вероятно он попросту записан в юникоде. Соответственно массив должен быть типа wChar

[Ссылки могут видеть только зарегистрированные пользователи. ]
  Ответить с цитированием
Старый 28.03.2015, 12:17   #14
Reaper
 Фельдмаршал
Аватар для Dinmaite
 
Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(
Регистрация: 13.08.2009
Сообщений: 1,004
Популярность: 25098
Золото Zhyk.Ru: 350
Сказал(а) спасибо: 110
Поблагодарили 830 раз(а) в 395 сообщениях
Отправить сообщение для Dinmaite с помощью ICQ
 
По умолчанию Re: Чтение строки из другого процесса средством WinAPI

А теперь покажи код своей процедуры, читающей из этого адреса.
И результат его выполнения.
  Ответить с цитированием
Старый 28.03.2015, 15:47   #15
Super Moderator
 Маршал
Аватар для Тигрь
 
Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(
Регистрация: 05.05.2009
Сообщений: 875
Популярность: 48955
Золото Zhyk.Ru: 850
Сказал(а) спасибо: 155
Поблагодарили 739 раз(а) в 274 сообщениях
 
По умолчанию Re: Чтение строки из другого процесса средством WinAPI

Цитата:
Сообщение от артём612Посмотреть сообщение
strfromprocess : array[0..20] of Char; //Char - для Ascii символов и WideChar для юникода

Это если вы до сих пор сидите на морально усторевшей делфи 7.

Для более новых как раз таки Char = WideChar юникод строки
а вот AnsiChar это анси строка.
________________
Продаю приват читы для AION Absolute, desteny 3.5, Legend, Cataclysm, Ru, EU, NA
Продаю многооконку на R2 Пишу читы на заказ под любые игры. Предложения в ЛС.
Все мои читы/программы/статьи тут: http://zhyk.ru/forum/showpost.php?p=38501&postcount=21
  Ответить с цитированием
Ответ

Метки
delphi, string, winapi


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
WinApi Книжечка Licoze Вопросы и ответы, обсуждения 4 29.01.2015 16:29
[Помогите!] C++ WinApi Virtual Key zukirk Вопросы и ответы, обсуждения 0 07.08.2012 04:29
С++ и WinAPI alegr Вопросы и ответы, обсуждения 0 19.04.2012 14:58
[Помогите!] C# и ошибки WinApi Dmitriusan Вопросы и ответы, обсуждения 0 16.12.2011 13:15

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 21:04.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net