Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

Поиск Unicode значения в процессе.

-

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

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

Ответ
 
Опции темы
Старый 14.01.2012, 15:46   #1
 Разведчик
Аватар для vonCynic
 
vonCynic на правильном путиvonCynic на правильном пути
Регистрация: 13.01.2012
Сообщений: 7
Популярность: 164
Сказал(а) спасибо: 0
Поблагодарили 3 раз(а) в 2 сообщениях
 
Exclamation Поиск Unicode значения в процессе.

Доброго времени суток господа, возникла небольшая проблемка. Есть некое приложение, допустим игра. В ней имеется строковое значение, которое необходимо считать. Известно, что оно является UNICODE строкой. Статический адрес, от которого можно добраться до строки выяснен - $00A786A0. Там лежит указатель на адрес со строкой - 10F907E0(динамический). При исследовании - было выяснено, что для того чтобы добраться до строки - необходимо повторить:
Код:
724650EC - 89 44 8F EC  - mov [edi+ecx*4-14],eax
724650F0 - 8B 44 8E F0  - mov eax,[esi+ecx*4-10]
724650F4 - 89 44 8F F0  - mov [edi+ecx*4-10],eax <<
724650F8 - 8B 44 8E F4  - mov eax,[esi+ecx*4-0C]
724650FC - 89 44 8F F4  - mov [edi+ecx*4-0C],eax
EAX=006F0076
EBX=00000000
ECX=00000004
EDX=00000000
ESI=0ABD4454
EDI=10F907E0
ESP=0018FCEC
EBP=0018FCF4
EIP=724650F8
724650F4 - 89 44 8F F0  - mov [edi+ecx*4-10],eax
724650F8 - 8B 44 8E F4  - mov eax,[esi+ecx*4-0C]
724650FC - 89 44 8F F4  - mov [edi+ecx*4-0C],eax <<
72465100 - 8B 44 8E F8  - mov eax,[esi+ecx*4-08]
72465104 - 89 44 8F F8  - mov [edi+ecx*4-08],eax
EAX=0043006E
EBX=00000000
ECX=00000004
EDX=00000000
ESI=0ABD4454
EDI=10F907E0
ESP=0018FCEC
EBP=0018FCF4
EIP=72465100
724650FC - 89 44 8F F4  - mov [edi+ecx*4-0C],eax
72465100 - 8B 44 8E F8  - mov eax,[esi+ecx*4-08]
72465104 - 89 44 8F F8  - mov [edi+ecx*4-08],eax <<
72465108 - 8B 44 8E FC  - mov eax,[esi+ecx*4-04]
7246510C - 89 44 8F FC  - mov [edi+ecx*4-04],eax
EAX=006E0079
EBX=00000000
ECX=00000004
EDX=00000000
ESI=0ABD4454
EDI=10F907E0
ESP=0018FCEC
EBP=0018FCF4
EIP=72465108
72465104 - 89 44 8F F8  - mov [edi+ecx*4-08],eax
72465108 - 8B 44 8E FC  - mov eax,[esi+ecx*4-04]
7246510C - 89 44 8F FC  - mov [edi+ecx*4-04],eax <<
72465110 - 8D 04 8D 00000000  - lea eax,[ecx*4+00000000]
72465117 - 03 F0  - add esi,eax
EAX=0069006E
EBX=00000000
ECX=00000002
EDX=00000002
ESI=0ABD43A0
EDI=10F907E0
ESP=0018FCEC
EBP=0018FCF4
EIP=72465110
При попытке - получить значение этой строки - я получаю либо несколько букв, либо безумный набор цифр. Вопрос: как из памяти считать юникод-строку, при том что длинна её заранее неизвестна, но изестно что она не может быть более 16 символов?

PS:
Динамический адресс нахожу следующим способом:
Код:
var
WindowName : integer; 
 ProcessId : integer; 
 ThreadId : integer; 
 HandleWindow : Integer; 
 b:dword; 
 readwrite:cardinal;
 Const WindowTitle = 'Game'; // Заголовок окна с игрой
....
Function GetNameDynamicAdress(): integer;
begin
     WindowName := FindWindow(nil,WindowTitle);
 If WindowName = 0 then 
 begin
 MessageDlg('Игра должна быть запущена до ассистента. Запустите ее, потом ассистент', mtwarning,[mbOK],0);
 end;
 ThreadId := GetWindowThreadProcessId(WindowName,@ProcessId); 
 HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId); 
 ReadProcessMemory(HandleWindow,ptr($00A786A0),@b,4,readwrite); // Прочитали в b значение из адреса поинтера.
 Result:= b;
end;
Затем пробовал прочитать по значениям согласно иccледования при помощи:
Код:
Function ReadMemoryToHex(address: integer): string;
var
name: PWideChar;
numberRead : DWORD;
begin
 ThreadId := GetWindowThreadProcessId(WindowName,@ProcessId); 
 HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId); 
 ReadProcessMemory(HandleWindow,ptr(address),name,4,numberRead); 
 //result:= inttostr(b);
 //name:= IntToHex(b,8);
 result:= WideCharToString(name);
end;
*****
ReadMemoryToHex(GetNameDynamicAdress + ($4*4)-$10);
ReadMemoryToHex(GetNameDynamicAdress + ($4*4)-$0c);
ReadMemoryToHex(GetNameDynamicAdress + ($4*4)-$8);
ReadMemoryToHex(GetNameDynamicAdress + ($2*4)-$4);
В результате - а ничего хорошего в результате. Если читать как Pwidechar - вываливается с ошибкой, если как integer - то в результате - либо 3 символа, либо какая-то ерунда. Если как hex - то он не соответствует искомой строке.

Заранее благодарен за помощь.
  Ответить с цитированием
Старый 14.01.2012, 17:12   #2
Бандеровец
 Лейтенант-командор
Аватар для VeTaL_UA
 
VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(
Регистрация: 12.08.2010
Сообщений: 727
Популярность: 30569
Золото Zhyk.Ru: 1
Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
Отправить сообщение для VeTaL_UA с помощью ICQ Отправить сообщение для VeTaL_UA с помощью Skype™
 
По умолчанию Re: Поиск Unicode значения в процессе.

Код:
function ReadUnicode(hProcess,data:DWord): string;
var
i,rw:DWord;
ch:WideChar;
wch:array[0..255] of WideChar;
str:string;
begin
i:=0;
 repeat
 ReadProcessMemory(hProcess,ptr(data),@ch,2,rw);
 data:=data+2;
 wch[i]:=ch;
 inc(i);
 until
 (ord(ch)=0) or (i>=255);
i:=0;
str:='';
 repeat
 str:=str+wch[i];
 inc(i);
 until
 wch[i]='';
result:=str;
end;
Эта функция читает текст из памяти, по заданному адресу, и переводит полученный результат из Unicode в String.

Добавлено через 4 минуты
Пример использования:
Код:
procedure blabla;
begin
Label1.Caption:=ReadUnicode(FindWindow(nil,'blabla'),$ABCDEF);
end;
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.

Perfect World: PWDatabaseScanner, Client, PWNickRenamer, PWClientRenamer, База логинов PW, Гайд по варУ, Зарабатываем репутацию.
Delphi: Авторизация на сайте с помощью Indy, Загрузка изображений с интернета в TImage с помощью Indy, Автоматическая смена стандартной версии Indy в Delphi на Indy 10.0.76 / 10.1.5, Основы парсинга с помощью Indy, Делаем Updater до программы с помощью Indy.
Other: ShowIP, FFUUU смайлы в QIP, Как играть в Minecraft (видеокурс), Как мы захватили человечество :D, Энергия в Лицемер/TopFace, PasGen.



Последний раз редактировалось VeTaL_UA; 14.01.2012 в 17:17. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 14.01.2012, 17:21   #3
 Разведчик
Аватар для vonCynic
 
vonCynic на правильном путиvonCynic на правильном пути
Регистрация: 13.01.2012
Сообщений: 7
Популярность: 164
Сказал(а) спасибо: 0
Поблагодарили 3 раз(а) в 2 сообщениях
 
По умолчанию Re: Поиск Unicode значения в процессе.

Спасибо за код. Но здесь один ньюанс - как быть если знаешь где искать, знаешь что строка - но не знаешь, какого она размера, и уж тем более не догадываешься что в ней написано?
  Ответить с цитированием
Старый 14.01.2012, 17:26   #4
Бандеровец
 Лейтенант-командор
Аватар для VeTaL_UA
 
VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(
Регистрация: 12.08.2010
Сообщений: 727
Популярность: 30569
Золото Zhyk.Ru: 1
Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
Отправить сообщение для VeTaL_UA с помощью ICQ Отправить сообщение для VeTaL_UA с помощью Skype™
 
По умолчанию Re: Поиск Unicode значения в процессе.

Цитата:
Сообщение от vonCynicПосмотреть сообщение
как быть если знаешь где искать, знаешь что строка - но не знаешь, какого она размера, и уж тем более не догадываешься что в ней написано?

А ты видел, что в функции нужно указывать длинну? Эта функция сама всё определяет и читает
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.

Perfect World: PWDatabaseScanner, Client, PWNickRenamer, PWClientRenamer, База логинов PW, Гайд по варУ, Зарабатываем репутацию.
Delphi: Авторизация на сайте с помощью Indy, Загрузка изображений с интернета в TImage с помощью Indy, Автоматическая смена стандартной версии Indy в Delphi на Indy 10.0.76 / 10.1.5, Основы парсинга с помощью Indy, Делаем Updater до программы с помощью Indy.
Other: ShowIP, FFUUU смайлы в QIP, Как играть в Minecraft (видеокурс), Как мы захватили человечество :D, Энергия в Лицемер/TopFace, PasGen.


  Ответить с цитированием
Старый 14.01.2012, 17:58   #5
 Разведчик
Аватар для vonCynic
 
vonCynic на правильном путиvonCynic на правильном пути
Регистрация: 13.01.2012
Сообщений: 7
Популярность: 164
Сказал(а) спасибо: 0
Поблагодарили 3 раз(а) в 2 сообщениях
 
По умолчанию Re: Поиск Unicode значения в процессе.

Тупанул-)))) Однако - она оказалась не панацеей. Может быть я ошибся с местоположением адреса строки? Но в $00A786A0 - всегда лежит указатель на адрес, с которого происходит переход по вышеизложенному алгоритму на чтение той самой строки-))) Уже полдня убил на это, а всё не понятно - то ли я дурак, то ли жизнь вперёд укатила
  Ответить с цитированием
Старый 14.01.2012, 18:40   #6
Бандеровец
 Лейтенант-командор
Аватар для VeTaL_UA
 
VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(
Регистрация: 12.08.2010
Сообщений: 727
Популярность: 30569
Золото Zhyk.Ru: 1
Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
Отправить сообщение для VeTaL_UA с помощью ICQ Отправить сообщение для VeTaL_UA с помощью Skype™
 
По умолчанию Re: Поиск Unicode значения в процессе.

Цитата:
Сообщение от vonCynicПосмотреть сообщение
Может быть я ошибся с местоположением адреса строки?

Ты укажи в функцие адрес, по которому лежит первая буква текста, который ты хочешь вытащить из процесса.
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.

Perfect World: PWDatabaseScanner, Client, PWNickRenamer, PWClientRenamer, База логинов PW, Гайд по варУ, Зарабатываем репутацию.
Delphi: Авторизация на сайте с помощью Indy, Загрузка изображений с интернета в TImage с помощью Indy, Автоматическая смена стандартной версии Indy в Delphi на Indy 10.0.76 / 10.1.5, Основы парсинга с помощью Indy, Делаем Updater до программы с помощью Indy.
Other: ShowIP, FFUUU смайлы в QIP, Как играть в Minecraft (видеокурс), Как мы захватили человечество :D, Энергия в Лицемер/TopFace, PasGen.


  Ответить с цитированием
Старый 14.01.2012, 18:55   #7
 Разведчик
Аватар для vonCynic
 
vonCynic на правильном путиvonCynic на правильном пути
Регистрация: 13.01.2012
Сообщений: 7
Популярность: 164
Сказал(а) спасибо: 0
Поблагодарили 3 раз(а) в 2 сообщениях
 
По умолчанию Re: Поиск Unicode значения в процессе.

Я так и делаю - в результате получаю кучу знаков $$$
  Ответить с цитированием
Старый 14.01.2012, 19:37   #8
Бандеровец
 Лейтенант-командор
Аватар для VeTaL_UA
 
VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(
Регистрация: 12.08.2010
Сообщений: 727
Популярность: 30569
Золото Zhyk.Ru: 1
Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
Отправить сообщение для VeTaL_UA с помощью ICQ Отправить сообщение для VeTaL_UA с помощью Skype™
 
По умолчанию Re: Поиск Unicode значения в процессе.

Цитата:
Сообщение от vonCynicПосмотреть сообщение
Я так и делаю - в результате получаю кучу знаков $$$

Значит адрес неправильный...

В порядке бреда, у тебя какая версия делфи?
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.

Perfect World: PWDatabaseScanner, Client, PWNickRenamer, PWClientRenamer, База логинов PW, Гайд по варУ, Зарабатываем репутацию.
Delphi: Авторизация на сайте с помощью Indy, Загрузка изображений с интернета в TImage с помощью Indy, Автоматическая смена стандартной версии Indy в Delphi на Indy 10.0.76 / 10.1.5, Основы парсинга с помощью Indy, Делаем Updater до программы с помощью Indy.
Other: ShowIP, FFUUU смайлы в QIP, Как играть в Minecraft (видеокурс), Как мы захватили человечество :D, Энергия в Лицемер/TopFace, PasGen.


  Ответить с цитированием
Старый 14.01.2012, 19:42   #9
 Разведчик
Аватар для vonCynic
 
vonCynic на правильном путиvonCynic на правильном пути
Регистрация: 13.01.2012
Сообщений: 7
Популярность: 164
Сказал(а) спасибо: 0
Поблагодарили 3 раз(а) в 2 сообщениях
 
По умолчанию Re: Поиск Unicode значения в процессе.

XE. Но тут по идее - какая разница, если мы читаем побайтно?

function ReadUnicode(hProcess,dataWord): string;
var
i,rwWord;
ch:WideChar;
wch:array[0..255] of WideChar;
str:string;
begin
i:=0;
repeat
ReadProcessMemory(hProcess,ptr(data),@ch,2,rw);
data:=data+2;
wch[i]:=ch;
inc(i);
until
(ord(ch)=0) or (i>=255);
i:=0;
str:='';
repeat
str:=str+wch[i];
inc(i);
until
wch[i]='';
result:=str;
end;
Function GetCharacterName(): string;
var
S: string;
//i: integer;
begin
S:='';
S:=ReadUnicode(FindWindow(nil,WindowTitle),GetName DynamicAdress + ($4*4)-$10);
S:= S +ReadUnicode(FindWindow(nil,WindowTitle),GetNameDy namicAdress + ($4*4)-$0c);
S:= S +ReadUnicode(FindWindow(nil,WindowTitle),GetNameDy namicAdress + ($4*4)-$8);
S:= S +ReadUnicode(FindWindow(nil,WindowTitle),GetNameDy namicAdress + ($4*4)-$4);
result:=S;
end;
- последния версия с болтом. Код конечно монструозен, но допиливание потом. Сначала надо добиться механизма - чтоб работало.

S:=ReadUnicode(FindWindow(nil,WindowTitle),GetName DynamicAdress + ($4*4)-$10);

Сделать так - тот же болт\

Последний раз редактировалось vonCynic; 14.01.2012 в 19:54.
  Ответить с цитированием
Старый 14.01.2012, 20:00   #10
Бандеровец
 Лейтенант-командор
Аватар для VeTaL_UA
 
VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(
Регистрация: 12.08.2010
Сообщений: 727
Популярность: 30569
Золото Zhyk.Ru: 1
Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
Отправить сообщение для VeTaL_UA с помощью ICQ Отправить сообщение для VeTaL_UA с помощью Skype™
 
По умолчанию Re: Поиск Unicode значения в процессе.

Цитата:
Сообщение от vonCynicПосмотреть сообщение
XE. Но тут по идее - какая разница, если мы читаем побайтно?

ХЕ поддерживает Unicode, а Delphi 7, на котором пишу я, - нет.
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.

Perfect World: PWDatabaseScanner, Client, PWNickRenamer, PWClientRenamer, База логинов PW, Гайд по варУ, Зарабатываем репутацию.
Delphi: Авторизация на сайте с помощью Indy, Загрузка изображений с интернета в TImage с помощью Indy, Автоматическая смена стандартной версии Indy в Delphi на Indy 10.0.76 / 10.1.5, Основы парсинга с помощью Indy, Делаем Updater до программы с помощью Indy.
Other: ShowIP, FFUUU смайлы в QIP, Как играть в Minecraft (видеокурс), Как мы захватили человечество :D, Энергия в Лицемер/TopFace, PasGen.


  Ответить с цитированием
Старый 15.01.2012, 08:34   #11
Знаток Dark Orbit
 Рыцарь-защитник
Аватар для Mebius
 
Mebius трижды герой Советского СоюзаMebius трижды герой Советского СоюзаMebius трижды герой Советского СоюзаMebius трижды герой Советского СоюзаMebius трижды герой Советского СоюзаMebius трижды герой Советского СоюзаMebius трижды герой Советского СоюзаMebius трижды герой Советского СоюзаMebius трижды герой Советского СоюзаMebius трижды герой Советского СоюзаMebius трижды герой Советского Союза
Регистрация: 14.06.2010
Сообщений: 584
Популярность: 6626
Сказал(а) спасибо: 86
Поблагодарили 847 раз(а) в 266 сообщениях
Отправить сообщение для Mebius с помощью ICQ Отправить сообщение для Mebius с помощью Skype™
 
По умолчанию Re: Поиск Unicode значения в процессе.

Цитата:
Сообщение от VeTaL_UAПосмотреть сообщение
ХЕ поддерживает Unicode, а Delphi 7, на котором пишу я, - нет.

вот я про то же хотел сказать, 2009+ версии все дефолтно юникодовые, в них обычный стринг - WideString тобишь сразу в юникоде, тк я с ноута не могу нормально глянуть исходник, советую проверить адрес и посмотреть нет ли косяков в той ф-ции которая юникод выдает, тк 99% примеров с интернета писалось на анси версиях делфи, вполне возможно если ты получаешь 3 буквы нужного текста, то по моему тут косяк с кодировками.

З.Ы. d7 поддерживает юникод, однако все юникодовые типы надо указывать самому, т.е. надо юникод, пишешь widestring а не string)))
  Ответить с цитированием
Ответ


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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Логин в процессе подключения vladok000 Общение и обсуждение, архив Point Blank 1 31.01.2011 10:46

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

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

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