Сейчас на форуме: (+5 невидимых) |
![]() |
eXeL@B —› Программирование —› Исселодвание VypressChat 2.0 |
Посл.ответ | Сообщение |
|
Создано: 28 июля 2007 11:32 · Личное сообщение · #1 Добрый день. Многие наверное знакомы с программой VypressChat - это чат для небольших локальных сетей, работает по UDP через широковещательную рассылку пакетов. Есть компонент TVyChat для делфи - http://www.cobans.net/ http://www.cobans.net/ , который реализует часть протокола (правда устарел). Так вот, моя цель - написать небольшое дополнение к программе, конкретно чтобы в отдельное окно выводился список пользователей и информация по ним (народ постоянно меняет ники). Естественно программа никакие плагины не поддерживает, поэтому пришлось засесть за OllyDbg. Немного о протоколе: все сообщения отсылаются всем, вначале идет символ 'X' (икс), затем временная метка в тесктовом виде (в TVyChat от Coban2k это место заполняется случайными символами, это неверное, но вообще это поле может быть любым - сообщение все-равно будет обработано) - несколько байт, потом один байт - код операции, потом имя отсылающего, а далелее через #0 остальные параметры. Всего поддерживается около 30 команд, но меня интересуют команды отсылки сообщения на обновление списка пользователей (что-то типа пинга) и получения ответа, это команды '0' - пинг и '1' - ответы. Как Вы понимаете первое сообщение я должен отправить, а второе принять 'своим' кодом. Аналогично и команды отсыки запроса на получение детальной информации ('F') и получение ответа ('G'). Что я уже сделал: почти все, я добавил свой пункт меню в ресурсы и в коде обработки сообщений добавил обработку моего пункта; здесь происходит скачек на мой код, вставленный в пустое место. Этот код загружает мою dll библиотеку, ищет в ней адреса трех функций: f1, f2 и f3, последняя тут же вызывается. В ней производиться патчинг обработчиков 'приходящих' команд, т.е. '1' и 'G' и вызывается процедура обновления списка пользователей '0', затем показывается окно из dll. Патчинг обработчиков делает при приходе сообщений '1' вызов функции f1, при приходе 'G' - f2, эти функции добавляют полученную информацию в список. Все эти адреса я нашел с помощью OllyDbg, но вот при получении нового имени пользователя в функции f1 я должен вызывать функцию, отсылающую команду 'F', т.е. запрос детальной информации. Проблема в том, что я никак не могу найти эту процедуру, вернее я нашел адрес 00469560, откуда отсылается этот запрос, но я никак не могу понять какие параметры передаются в эту процедуру и как, перепробовал кучу вариантов, просматривал что и куда помещается при вызове этой процедуры из разных мест, но так и не нашел. Был бы благодарен за помощь. Если тема кого-то интересует - могу дать код, хотя там особенно смотреть нечего, dll пишу на delphi. ![]() |
|
Создано: 28 июля 2007 12:11 · Личное сообщение · #2 |
|
Создано: 29 июля 2007 04:18 · Личное сообщение · #3 ПОсмотрел, есть такая программа, правда пользы от нее 0, т.к. в VyChat 2.0 используется RSA для личных сообщений, так что ничего подсмотреть не удастся, а флуд - это вообще недостойное занятие. Я призываю всех, кого интересует именно моя тема засесть за отладчик и помочь мне выяснить что и как нужно передать в функцию 00469560, чтобы она отправила запрос детальной информации от моего имени у конкретного пользователя. Вот код этой функции (чтобы внести больше деталей): 00469560 /$ A1 042A4B00 MOV EAX,DWORD PTR DS:[4B2A04] ; Send cmd to get user info
На всякий случай CRC моего файла VyChat.exe - C5D55C72, он в аттаче (это исходный файл, не патченный). ![]() ![]() |
|
Создано: 29 июля 2007 16:19 · Личное сообщение · #4 |
|
Создано: 29 июля 2007 18:53 · Личное сообщение · #5 |
|
Создано: 30 июля 2007 02:53 · Личное сообщение · #6 Еще раз: меня не интересует перехват сообщений, понятно, что перехватив ключ в момент установки соединения (обмен открытыми ключами) можно перехватывать и расшифровывать сообщения, только оно мне совершенно не нужно, хотя я думаю они там тоже не дураки, наверняка что-нибудь придумали. Меня интересует именно вопрос отправки запроса на получение детальной информации о пользователе. Причем это нужно сделать средствами самой программы, т.е. через открытый программой сокет, т.е. вызвав соответствующую функцию программы (эта функция 00469560). Проблема в том, что эта же функция отправляет и другие пакеты, поэтому мне нужно определиться какие параметры я должен запихнуть в стек и в регистры при ее вызове. Я пробовал и оттрассировать на уровень вверх, откуда вызывается эта процедура при запросе детальной информации, но там обычный jmp переход, а перед ним очень запутанный код. Я уже перепробовал кучу вариантов, но всегда выхожу на access violation, поэтому собственно и прошу помощи. Я бы хотел выложить то что я уже сделал - это моя dll, правленный основной файл программы (VyChat.exe) и правленный файл ресурсов (VycRes.dll), сейчас при вызове моего пункта меню открывается мое окно и выводится список пользователей, запросы детальной информации не отправляются, но обработчик их приема заменен, поэтому если вызвать пункт "Информация..." вручную, в мой список добавится эта детальная информация напротив соответствующего пользователя. Но суммарный размер этих файлов в архиве больше 500 kB. Если все-таки интересно посмотреть - напишите, выложу. Люди хорошо знакомые с отладкой - подскажите, условия вызова функции 00469560. P.S. Как жаль, что нет исходников этого проклятого чата... ![]() |
|
Создано: 30 июля 2007 03:04 · Личное сообщение · #7 |
|
Создано: 30 июля 2007 11:44 · Личное сообщение · #8 |
|
Создано: 30 июля 2007 12:27 · Личное сообщение · #9 Почему разговор все время уходит в сторону подслушивания? Можно это обсудить в другой теме?... Неужели никто из знатаков отладки не подскажет метод вызова. Насколько я понял, внутри программы используется что-то вроде соглашения pascal, т.е. первые вда или три параметра передаются через регистры, а остальные в стеке. И я тут подумал, возможно процедура, которую я исследую является методом класса, поэтому и код ее вызова довольно запутанный. ![]() |
|
Создано: 30 июля 2007 14:27 · Личное сообщение · #10 |
|
Создано: 30 июля 2007 14:31 · Личное сообщение · #11 |
![]() |
eXeL@B —› Программирование —› Исселодвание VypressChat 2.0 |