Чат 1.4.5 - Общение разработчиков - Программирование для Perfect World, общение и обсуждене разработок
04.07.2013, 23:22
#1
Рыцарь-капитан
Регистрация: 14.06.2012
Сообщений: 511
Популярность: 7566
Сказал(а) спасибо: 4
Поблагодарили 181 раз(а) в 88 сообщениях
Чат 1.4.5
Доброго времени суток. Возникла такая ситуация, в которой нужно сделать перехват сообщений с клиента ну или просто считывание если подругому. Так вот я никак не могу получить список сообщений в мире,в gv. да и вообще где либо. Пишу на delphi. Адреса для версии "Земли духов". Беру начальный адрес "ChatStart=00A5CAB8". Так как кроме него ничего не дано, то я взял смещения с версии клиента 1.4.4 а именно
Message = [[ChatStart]+((0 to ChatNumber)*0x1C+0x08)]+0]
в результате получился код
Код:
ReadProcessMemory(hp,Pointer($A5CAB8),@buf,4,bc);
ReadProcessMemory(hp,Pointer(buf+i*$1C+$8),@buf,4,bc);
ReadProcessMemory(hp,Pointer(buf+$0),@str,4,bc);
Но сообщения выводятся в виде таково вот символа " ^ ".
Пробовал через CE результат тот же. что делать не знаю. я в тупике.
Этот код ничего не меняет
Код:
ReadProcessMemory(hp,Pointer($A5CAB8),@buf,4,bc);
ReadProcessMemory(hp,Pointer(buf+i*$1C),@buf,4,bc);
ReadProcessMemory(hp,Pointer(buf+$8),@buf,4,bc);
ReadProcessMemory(hp,Pointer(buf+$0),@str,4,bc);
Написал дабы лишних сообщений не было. Мало ли что.
Кто знает как быть - прошу помочь
________________
Хотите как то отблагодарить за помощь?
Не стесняйтесь нажимайте "Спасибо"
Делаю программы на заказ, по всем вопросам в скайп: Ginrey2
04.07.2013, 23:50
#2
Главнокомандующий
Регистрация: 27.03.2009
Сообщений: 1,666
Популярность: 67466
Сказал(а) спасибо: 246
Поблагодарили 1,560 раз(а) в 691 сообщениях
Re: Чат 1.4.5
Может быть эта тема тебе поможет?
[Ссылки могут видеть только зарегистрированные пользователи. ]
Пользователь сказал cпасибо:
05.07.2013, 16:54
#3
Рыцарь-капитан
Регистрация: 14.06.2012
Сообщений: 511
Популярность: 7566
Сказал(а) спасибо: 4
Поблагодарили 181 раз(а) в 88 сообщениях
Re: Чат 1.4.5
Цитата:
вот попробовал вручную найти
[
Ссылки могут видеть только зарегистрированные пользователи. ]
результат тот же. смещения вроде бы верные. ну или я совсем кривой
________________
Хотите как то отблагодарить за помощь?
Не стесняйтесь нажимайте "Спасибо"
Делаю программы на заказ, по всем вопросам в скайп: Ginrey2
05.07.2013, 19:26
#4
Лейтенант-командор
Регистрация: 12.08.2010
Сообщений: 727
Популярность: 30569
Золото Zhyk.Ru: 1
Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
Re: Чат 1.4.5
сообщения есть текст? тогда смотри
сюдЫ
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: 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 .
06.07.2013, 01:17
#5
Рыцарь-капитан
Регистрация: 14.06.2012
Сообщений: 511
Популярность: 7566
Сказал(а) спасибо: 4
Поблагодарили 181 раз(а) в 88 сообщениях
Re: Чат 1.4.5
не увенчалось успехом. при такой кодировке выдает постоянно постоянно это
琀橊贀刜䒍⠤橐嘂ﯨ⚣茀ᓄၨ沧樀樂贬儬蓇逤
если юзать AnsiChar , то просто пустое поле.
Добавлено через 16 минут
В этой теме нашел полезный совет, считать все за раз. вывод оказался благополучным. Все решил, сспасибо
Добавлено через 37 минут
вот может кому понадобиться, переделал под готовую функцию.
Код:
function ReadChat(Handle: THandle; ChatStartAddr,ChatNumberAddr: DWORD): string;
var s: string;
buf,Hprocess,start_addr,ChatLen,addr,PID: DWORD;
BytesCountOfRead: SIZE_T;//У кого то это тип DWORD
strNo,i: Integer;
str: array[0..255] of WideChar;
ch: char;
text: string;
st: TStringList;
begin
st:=TStringList.Create;
GetWindowThreadProcessId(handle,@pid);
hprocess:=OpenProcess(PROCESS_ALL_ACCESS,false,pid);
ReadProcessMemory(hprocess, ptr(ChatStartAddr), @start_addr, sizeof(start_addr), BytesCountOfRead);
ReadProcessMemory(hprocess, ptr(ChatNumberAddr), @ChatLen, sizeof(ChatLen), BytesCountOfRead);
for strNo := 0 to ChatLen-1 do
begin
str[0] := #0;
i := 0;
try
ReadProcessMemory(hprocess, ptr(start_addr + ((StrNo * $1C) + $8)), @addr, sizeof(addr), BytesCountOfRead);
if addr <> 0 then
repeat
ReadProcessMemory(hprocess, ptr(addr), @ch, 2, BytesCountOfRead);
str[i] := ch;
addr := addr + 2;
inc(i);
until (ord(ch) = 0) or (i >=255);
except
end;
if i >= 1 then
str[i] := #0;
text:=str;
st.Add(text);
result:=st.Text;
end;
end;
Пользоваться так. Только адреса свои.
Код:
wnd:=FindWindow('ElementClient Window',nil);
memo1.Lines.Text:=ReadChat(wnd,$00A5CAB8,$00A5CAC4);
________________
Хотите как то отблагодарить за помощь?
Не стесняйтесь нажимайте "Спасибо"
Делаю программы на заказ, по всем вопросам в скайп: Ginrey2
Последний раз редактировалось Ginrey; 06.07.2013 в 20:16 .
Причина: Добавлено сообщение
Пользователь сказал cпасибо:
Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 00:24 .