 |
Поиск Unicode значения в процессе. - Вопросы и ответы, обсуждения - Ваши вопросы по Pascal/Delphi только в данном разделе |
14.01.2012, 16:46
|
#1
|
|
|
|
Разведчик
|
 Регистрация: 13.01.2012
 Сообщений: 7
 Популярность: 164
 Сказал(а) спасибо: 0
Поблагодарили 3 раз(а) в 2 сообщениях
|
Поиск 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, 18:12
|
#2
|
|
|
|
Лейтенант-командор
|
 Регистрация: 12.08.2010
 Сообщений: 727
 Популярность: 30569
 Золото Zhyk.Ru: 1
 Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
|
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;
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Кошельки: 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 в 18:17.
Причина: Добавлено сообщение
|
|
|
14.01.2012, 18:21
|
#3
|
|
|
|
Разведчик
|
 Регистрация: 13.01.2012
 Сообщений: 7
 Популярность: 164
 Сказал(а) спасибо: 0
Поблагодарили 3 раз(а) в 2 сообщениях
|
Re: Поиск Unicode значения в процессе.
Спасибо за код. Но здесь один ньюанс - как быть если знаешь где искать, знаешь что строка - но не знаешь, какого она размера, и уж тем более не догадываешься что в ней написано?
|
|
|
14.01.2012, 18:26
|
#4
|
|
|
|
Лейтенант-командор
|
 Регистрация: 12.08.2010
 Сообщений: 727
 Популярность: 30569
 Золото Zhyk.Ru: 1
 Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
|
Re: Поиск Unicode значения в процессе.
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Кошельки: 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:58
|
#5
|
|
|
|
Разведчик
|
 Регистрация: 13.01.2012
 Сообщений: 7
 Популярность: 164
 Сказал(а) спасибо: 0
Поблагодарили 3 раз(а) в 2 сообщениях
|
Re: Поиск Unicode значения в процессе.
Тупанул-)))) Однако - она оказалась не панацеей. Может быть я ошибся с местоположением адреса строки? Но в $00A786A0 - всегда лежит указатель на адрес, с которого происходит переход по вышеизложенному алгоритму на чтение той самой строки-))) Уже полдня убил на это, а всё не понятно - то ли я дурак, то ли жизнь вперёд укатила
|
|
|
14.01.2012, 19:40
|
#6
|
|
|
|
Лейтенант-командор
|
 Регистрация: 12.08.2010
 Сообщений: 727
 Популярность: 30569
 Золото Zhyk.Ru: 1
 Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
|
Re: Поиск Unicode значения в процессе.
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Кошельки: 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:55
|
#7
|
|
|
|
Разведчик
|
 Регистрация: 13.01.2012
 Сообщений: 7
 Популярность: 164
 Сказал(а) спасибо: 0
Поблагодарили 3 раз(а) в 2 сообщениях
|
Re: Поиск Unicode значения в процессе.
Я так и делаю - в результате получаю кучу знаков $$$
|
|
|
14.01.2012, 20:37
|
#8
|
|
|
|
Лейтенант-командор
|
 Регистрация: 12.08.2010
 Сообщений: 727
 Популярность: 30569
 Золото Zhyk.Ru: 1
 Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
|
Re: Поиск Unicode значения в процессе.
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Кошельки: 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, 20:42
|
#9
|
|
|
|
Разведчик
|
 Регистрация: 13.01.2012
 Сообщений: 7
 Популярность: 164
 Сказал(а) спасибо: 0
Поблагодарили 3 раз(а) в 2 сообщениях
|
Re: Поиск Unicode значения в процессе.
XE. Но тут по идее - какая разница, если мы читаем побайтно?
function ReadUnicode(hProcess,data Word): string;
var
i,rw Word;
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 в 20:54.
|
|
|
14.01.2012, 21:00
|
#10
|
|
|
|
Лейтенант-командор
|
 Регистрация: 12.08.2010
 Сообщений: 727
 Популярность: 30569
 Золото Zhyk.Ru: 1
 Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
|
Re: Поиск Unicode значения в процессе.
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Кошельки: 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, 09:34
|
#11
|
|
|
|
Рыцарь-защитник
|
 Регистрация: 14.06.2010
 Сообщений: 584
 Популярность: 6626
 Сказал(а) спасибо: 86
Поблагодарили 847 раз(а) в 266 сообщениях
|
Re: Поиск Unicode значения в процессе.
 |
Цитата: |
 |
|
|
|
|
|
|
|
|
ХЕ поддерживает Unicode, а Delphi 7, на котором пишу я, - нет.
|
|
 |
|
 |
|
вот я про то же хотел сказать, 2009+ версии все дефолтно юникодовые, в них обычный стринг - WideString тобишь сразу в юникоде, тк я с ноута не могу нормально глянуть исходник, советую проверить адрес и посмотреть нет ли косяков в той ф-ции которая юникод выдает, тк 99% примеров с интернета писалось на анси версиях делфи, вполне возможно если ты получаешь 3 буквы нужного текста, то по моему тут косяк с кодировками.
З.Ы. d7 поддерживает юникод, однако все юникодовые типы надо указывать самому, т.е. надо юникод, пишешь widestring а не string)))
________________
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Похожие темы
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Логин в процессе подключения
|
vladok000 |
Общение и обсуждение, архив Point Blank |
1 |
31.01.2011 11:46 |
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 16:00.
|
 |