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

Отправка сообщений в чат

-

Общение разработчиков

- Программирование для Perfect World, общение и обсуждене разработок

Ответ
 
Опции темы
Старый 08.06.2017, 13:53   #1
 Разведчик
Аватар для KLAIDY
 
KLAIDY никому не известный тип
Регистрация: 11.10.2010
Сообщений: 13
Популярность: 10
Сказал(а) спасибо: 3
Поблагодарили 5 раз(а) в 5 сообщениях
 
Question Отправка сообщений в чат

Привет всем!
У меня следующая проблема: пытаюсь отправлять сообщения в чат. Для себя нашел два способа (не очень красивых, но все же).

1. Сначала пишет текст в память клиента, потом жмем кнопку "отправить".
Код:
Int32[] address_window_1 = CalcControlAddress(oph, "Win_Chat", "DEFAULT_Txt_Speech", 2);
WriteProcessBytes(oph, "!!Самоцвет найден!", address_window_1[1] + 0x13FC);
address_window_1 = CalcControlAddress(oph, "Win_Chat", "DEFAULT_Txt_Speech", 2);
if (address_window_1[0] != 0 && address_window_1[1] != 0)
    Injects.GUI_Inject(address_window_1[0], address_window_1[1], oph);
Собственно так я пишу данные в память клиента
Код:
public static void WriteProcessBytes(IntPtr oph, String value, Int32 adress)
        {
            Byte[] bytes = Encoding.Default.GetBytes(value);
            Int32 number_of_bytes_written;
            IntPtr text_address = WinApi.VirtualAllocEx(oph, IntPtr.Zero, 2500, WinApi.AllocationType.Commit, WinApi.MemoryProtection.ReadWrite);
            WinApi.WriteProcessMemory(oph, adress, bytes, bytes.Length, out number_of_bytes_written);
            WriteProcessBytes(oph, adress, (Int32)text_address);
            WinApi.VirtualFreeEx(oph, text_address, 2500, WinApi.FreeType.Release);
        }
Тут пока что не получается, текст в чате не меняется.

2. Вместо записи в память клиента нашего сообщения, передаем посимвольно весь текст окну
Код:
public static void SendChatMessage(String text, IntPtr hwnd)
{
    foreach (char c in text)
        WinApi.SendMessage(hwnd, 0x102, c, 0);
}
Для этого способа как я понял, надо делать окно чата активным? Или может даже размораживать? Потому что с этим способом тоже не особо все получается.

3. Ну и конечно способ, о котором я ничего не знаю. Отправка пакета.
Как выглядит этот пакет? На форуме я нашел вот такой пакет, но ведь он только для отправки личных сообщений? Плюс ко всему, если он не ловится как обычный пакет через PacketListener, то, наверное, он и отправляется по другому адресу?
Код:
4F                                 Опкод пакета
22 00 03                           (Назначение неизвестно)
00 01 62 B4                        ID персонажа
00 00 00 78                        (Назначение неизвестно)
16                                 Длина сообщения
48 00 45 00 4C 00 4C 00 4F 00 20   \ 
00 57 00 4F 00 52 00 4C 00 44 00   / Сообщение (HELLO WORLD)
00                                 (Назначение неизвестно)
Больше всего хочется, конечно, разобраться с отправкой сообщения пакетом, но я не особо представляю, в какую сторону копать. Помогите, пожалуйста!
  Ответить с цитированием
Старый 08.06.2017, 18:45   #2
 Разведчик
Аватар для Hilling
 
Hilling определенно авторитетная личностьHilling определенно авторитетная личностьHilling определенно авторитетная личностьHilling определенно авторитетная личностьHilling определенно авторитетная личностьHilling определенно авторитетная личностьHilling определенно авторитетная личностьHilling определенно авторитетная личностьHilling определенно авторитетная личность
Регистрация: 05.09.2010
Сообщений: 32
Популярность: 1182
Сказал(а) спасибо: 38
Поблагодарили 12 раз(а) в 10 сообщениях
 
По умолчанию Re: Отправка сообщений в чат

PacketListener не отловит такой пакет, потому что он не находится в соответствующем контейнере. Думаю возможно отправлять и пакетами, если вы напишите свою функцию отправки для этого.

Курил опыт по данному вопросу и могу сказать, что вам надо ковырять первый вариант.
  Ответить с цитированием
Старый 08.06.2017, 21:06   #3
 Разведчик
Аватар для KLAIDY
 
KLAIDY никому не известный тип
Регистрация: 11.10.2010
Сообщений: 13
Популярность: 10
Сказал(а) спасибо: 3
Поблагодарили 5 раз(а) в 5 сообщениях
 
По умолчанию Re: Отправка сообщений в чат

Цитата:
Сообщение от HillingПосмотреть сообщение
PacketListener не отловит такой пакет, потому что он не находится в соответствующем контейнере. Думаю возможно отправлять и пакетами, если вы напишите свою функцию отправки для этого.

Курил опыт по данному вопросу и могу сказать, что вам надо ковырять первый вариант.

Спасибо за совет, будем пробовать.

Пробую заполнить текстбокс чатика через подмену указателя на текст, но почему-то вылетает клиент. Хотя пару раз текст вставлялся и без вылета, а это значит, что код, вероятно, рабочий!
Что я делаю не так?(
Код:
public static void WriteProcessBytes(IntPtr oph, String value, Int32 adress)
        {
            
            Int32 number_of_bytes_written;
            //формируем массив данных
            Byte[] bytes_2 = Encoding.Unicode.GetBytes("123");
            //выделяем место в памяти клиента
            Int32 text_address = (Int32)WinApi.VirtualAllocEx(oph, IntPtr.Zero, 20, WinApi.AllocationType.Commit, WinApi.MemoryProtection.ReadWrite);
            //записываем массив данных в выделенной место
            WinApi.WriteProcessMemory(oph, (Int32)text_address, bytes_2, bytes_2.Length, out number_of_bytes_written);
            //конвертируем указатель на массив данных в массив байт
            Byte[] new_value = BitConverter.GetBytes(text_address);
            Int32 number_of_bytes_written_2;
            //записываем массив байт указателя по оффсету "адрес контрола + 0x13FC"
            WinApi.WriteProcessMemory(oph, adress + 0x13FC, new_value, new_value.Length, out number_of_bytes_written_2);//тут вылетает клиент, если его взять в фокус
            //считываем адрес окна чата и адрес команды текстбокса
            Int32[] address_window = CalcMethods.CalcControlAddress(oph, "Win_Chat", "DEFAULT_Txt_Speech", 2);//также вылетает клиентдаже в фокус не надо брать
            //отправляем сообщение
            Injects.GUI_Inject(address_window[0], address_window[1], oph);
            //подчищаем за собой
            WinApi.VirtualFreeEx(oph, (IntPtr)text_address, 4, WinApi.FreeType.Release);
        }
Добавлено через 17 часов 23 минуты
В общем после длительного гуглосерфинга и курения форумов нашелся инжект для редактирования текста в чатике:
https://zhyk.ru/forum/showpost.php?p...&postcount=314

Последний раз редактировалось KLAIDY; 09.06.2017 в 14:29. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 17.06.2017, 22:34   #4
 Разведчик
Аватар для bestbeer
 
bestbeer никому не известный тип
Регистрация: 06.10.2013
Сообщений: 27
Популярность: 10
Сказал(а) спасибо: 24
Поблагодарили 12 раз(а) в 8 сообщениях
 
По умолчанию Re: Отправка сообщений в чат

Вот так работало исправно.
Код:
    Private Alloc_text As Dictionary(Of Int32, UInt32) = New Dictionary(Of Int32, UInt32)

    Public Sub Write_text_chat(ByVal packet() As Byte)
 
        If Alloc_text.ContainsKey(packet.Length) = False Then

            Dim text_alloc_adress As UInt32

            text_alloc_adress = VirtualAllocEx(hProcess, 0, packet.Length, &H1000, &H4) 'выделяем память

            Alloc_text.Add(packet.Length, text_alloc_adress)

        End If

        WriteProcessMemory(hProcess, Alloc_text(packet.Length), packet, packet.Length, Nothing)

        Me.Mov_EDI(Alloc_text(packet.Length))
        Me.Push_EDI()

    End Sub

    Public Sub add_chat(ByVal text As String) 'белый чат

        Me.Clear()

        Me.Pushad()

        Me.Mov_ECX(&HFFFFFFFF)

        Me.Push_ECX()

        Me.Mov_EAX_DWORD_Ptr(&HD2EBE8)
        Me.Mov_ECX_EAX() 'хз че но важно

        Me.Mov_EDX(&HFFFFFFFF)

        Me.Push_EDX()

        Dim packet() As Byte = System.Text.Encoding.Unicode.GetBytes(text)
        Me.Write_text_chat(packet) 'записываем текст

        Me.Mov_EAX(0)

        Me.Push_EAX()

        Me.Mov_EAX(&H789D00) 'speak func
        Me.Call_EAX()

        Me.Popad()
        Me.Ret()

        Me.RunAsm(OtherAllocMemory)

    End Sub
Сейчас адреса скорее всего другие, функция легко ищется.

Добавлено через 15 минут
А чтобы не забанили за флудерство, подменяй буквы с схожим смыслом на английские, вот тогда будет тебе щастье .

Последний раз редактировалось bestbeer; 17.06.2017 в 22:49. Причина: Добавлено сообщение
  Ответить с цитированием
Ответ


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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отправка сообщений в чат W2u4F6v81 Общение разработчиков 8 13.06.2015 13:52
Отправка сообщений в мир bsbalex Общение разработчиков 9 07.01.2015 03:53
[Помогите!] Отправка сообщений на почту (C++) Annedroid Вопросы и ответы, обсуждения 12 24.07.2013 20:01
отправка сообщений Piarpage Вопросы и ответы, обсуждения 4 23.01.2013 01:01
Отправка сообщений V1rt1L3R Вопросы и ответы, обсуждения 1 25.01.2012 19:48

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

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

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