Сейчас на форуме: (+5 невидимых)

 eXeL@B —› Программирование —› Исселодвание VypressChat 2.0
Посл.ответ Сообщение

Ранг: 52.1 (постоянный), 1thx
Активность: 0.020
Статус: Участник

Создано: 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.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 28 июля 2007 12:11
· Личное сообщение · #2

Была такая софтина AntiVypress чат от Scratch, кажется. И вот к ней, вроде бы, были даже сорцы. Там реализовано дофига вещей было.



Ранг: 52.1 (постоянный), 1thx
Активность: 0.020
Статус: Участник

Создано: 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
00469565 |. 85C0 TEST EAX,EAX
00469567 |. 55 PUSH EBP
00469568 |. 8B6C24 0C MOV EBP,DWORD PTR SS:[ESP+C]
0046956C |. 56 PUSH ESI
0046956D |. 57 PUSH EDI
0046956E |. 74 23 JE SHORT VyC3.00469593
00469570 |. 6A 00 PUSH 0
00469572 |. 55 PUSH EBP
00469573 |. 81EC 80000000 SUB ESP,80
00469579 |. 8BFC MOV EDI,ESP
0046957B |. B9 20000000 MOV ECX,20
00469580 |. 8DB424 A000000>LEA ESI,DWORD PTR SS:[ESP+A0]
00469587 |. F3:A5 REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS>
00469589 |. BE 603C4B00 MOV ESI,VyC3.004B3C60
0046958E |. E8 4DA3FEFF CALL VyC3.004538E0
00469593 |> 33C0 XOR EAX,EAX
00469595 |. 66:8B43 38 MOV AX,WORD PTR DS:[EBX+38]
00469599 |. 50 PUSH EAX
0046959A |. FF15 941B4B00 CALL DWORD PTR DS:[4B1B94] ; VyC3.0048D13F
004695A0 |. 8B4C24 10 MOV ECX,DWORD PTR SS:[ESP+10]
004695A4 |. 8B53 18 MOV EDX,DWORD PTR DS:[EBX+18]
004695A7 |. 68 80000000 PUSH 80
004695AC |. 66:894424 1E MOV WORD PTR SS:[ESP+1E],AX
004695B1 |. 8D4424 1C LEA EAX,DWORD PTR SS:[ESP+1C]
004695B5 |. 50 PUSH EAX
004695B6 |. 6A 00 PUSH 0
004695B8 |. 55 PUSH EBP
004695B9 |. 51 PUSH ECX
004695BA |. 52 PUSH EDX
004695BB |. FF15 001C4B00 CALL DWORD PTR DS:[4B1C00] ; VyC3.0048D1F3
004695C1 |. 5F POP EDI
004695C2 |. 5E POP ESI
004695C3 |. 5D POP EBP
004695C4 \. C2 8800 RETN 88


На всякий случай CRC моего файла VyChat.exe - C5D55C72, он в аттаче (это исходный файл, не патченный).

c8c7_28.07.2007_CRACKLAB.rU.tgz - VyChat.rar



Ранг: 49.7 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 29 июля 2007 16:19
· Личное сообщение · #4

Wyfinger, я могу ошибаться, но ведь тут функции шифрования и дешифрования находятся в одной программе, то есть есть оба ключа для RSA.



Ранг: 25.3 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 29 июля 2007 18:53
· Личное сообщение · #5

RSA использовали,чтобы нельзя было читать сообщения через перехват пакетов. А когда ты можешь посмотреть оба ключа,то это уже не проблема. ИМХО



Ранг: 52.1 (постоянный), 1thx
Активность: 0.020
Статус: Участник

Создано: 30 июля 2007 02:53
· Личное сообщение · #6

Еще раз: меня не интересует перехват сообщений, понятно, что перехватив ключ в момент установки соединения (обмен открытыми ключами) можно перехватывать и расшифровывать сообщения, только оно мне совершенно не нужно, хотя я думаю они там тоже не дураки, наверняка что-нибудь придумали.

Меня интересует именно вопрос отправки запроса на получение детальной информации о пользователе. Причем это нужно сделать средствами самой программы, т.е. через открытый программой сокет, т.е. вызвав соответствующую функцию программы (эта функция 00469560). Проблема в том, что эта же функция отправляет и другие пакеты, поэтому мне нужно определиться какие параметры я должен запихнуть в стек и в регистры при ее вызове. Я пробовал и оттрассировать на уровень вверх, откуда вызывается эта процедура при запросе детальной информации, но там обычный jmp переход, а перед ним очень запутанный код. Я уже перепробовал кучу вариантов, но всегда выхожу на access violation, поэтому собственно и прошу помощи.

Я бы хотел выложить то что я уже сделал - это моя dll, правленный основной файл программы (VyChat.exe) и правленный файл ресурсов (VycRes.dll), сейчас при вызове моего пункта меню открывается мое окно и выводится список пользователей, запросы детальной информации не отправляются, но обработчик их приема заменен, поэтому если вызвать пункт "Информация..." вручную, в мой список добавится эта детальная информация напротив соответствующего пользователя. Но суммарный размер этих файлов в архиве больше 500 kB. Если все-таки интересно посмотреть - напишите, выложу.

Люди хорошо знакомые с отладкой - подскажите, условия вызова функции 00469560.

P.S. Как жаль, что нет исходников этого проклятого чата...



Ранг: 25.3 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 30 июля 2007 03:04
· Личное сообщение · #7

Что-то я вначале написал,а потом подумалда,открытые ключи мы можем посмотреть,ведь ими то зашифровываются сообщения.Но секретные мы не получим,т.к. для нас,отправителя,они не нужны и по сети они никак не передаются.



Ранг: 162.4 (ветеран), 11thx
Активность: 0.060
Статус: Участник

Создано: 30 июля 2007 11:44
· Личное сообщение · #8

А сам отослать запрос не можеш?
Если извасна комманда (служебка вроде не шифруется)



Ранг: 52.1 (постоянный), 1thx
Активность: 0.020
Статус: Участник

Создано: 30 июля 2007 12:27
· Личное сообщение · #9

Почему разговор все время уходит в сторону подслушивания?

Можно это обсудить в другой теме?...

Неужели никто из знатаков отладки не подскажет метод вызова. Насколько я понял, внутри программы используется что-то вроде соглашения pascal, т.е. первые вда или три параметра передаются через регистры, а остальные в стеке.

И я тут подумал, возможно процедура, которую я исследую является методом класса, поэтому и код ее вызова довольно запутанный.



Ранг: 162.4 (ветеран), 11thx
Активность: 0.060
Статус: Участник

Создано: 30 июля 2007 14:27
· Личное сообщение · #10

через ECX обычно this передается а остальное через стек
P.S. Хотя все зависит от ключей компиляции и дерректив



Ранг: 25.3 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 30 июля 2007 14:31
· Личное сообщение · #11

Нельзя уже немного по оффтопить? я бы с радость тебе помог,но у меня сейчас даже компа рядом нет-с телефона пишу.А тема действительно интересная.


 eXeL@B —› Программирование —› Исселодвание VypressChat 2.0
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати