Основи роботи Java чатів.

Інформація касатся тільки Java-чату фірми Volano, чати інших виробників можливо працюють по іншому протоколу, хоча принцип обміну даними ймовірно той же. Наведена інформація здобута не з документації а методом відстеження соеденения і TCP пакетів. Застосовувалися такі інструменти як IP-Tools v2.07 і Network Spy v2.0

Фрагмент HTML коду вставляють аплет:

<code>&lt;base href=http://www.zerkalo.com/vcclient/ /&gt;&lt;br&gt;&lt;applet codebase=. archive=COM/volano/VolanoChat.jar code=COM.volano.VolanoChat.class width=150 height=60&gt;&lt;br&gt;&lt;param name=cabbase value=COM/volano/VolanoChat.cab&gt;&lt;br&gt;&lt;param name=color value=#ffffff&gt;&lt;br&gt;&lt;param name=group value="MTR Chat Server"&gt;&lt;br&gt;&lt;param name=text value=english.txt&gt;&lt;br&gt;Извините ваш браузер не поддерживает JAVA или она увас отключена.&lt;br&gt;&lt;/applet&gt;</code>

Як бачимо як параметр передається ім'я групи чатів MTR Chat Server. Крім того, з сервера завантажується файл ресурсів english.txt ( подивитися ). На сервері також є франкомовний аналог french.txt ( подивитися ). Ці файли містять настройки і строкові константи аплету.

Переглянувши файл настройок я знайшов ще кілька файлів (зазначених в english.txt), вміст яких можливо здасться теж цікавим: BannerPlayer.txt (список банерів, які будуть завантажуватися в аплет), LogoPlayer.txt (посилання на емблему, що відображається на передній панелі аплету ), version.html , help.html , inde.htm , unable.html , document.html , host.html (керівництва користувача, версії чату, повідомлення про помилку і ін.).

Ну найцікавіший файл це звичайно password.html. На жаль просто так отримати доступ до нього не можна. Якщо мені вдасться його прочитати, я виставлю тут посилання на нього.

Виходячи з аналізу файлу english.txt можна зробити висновок про те, що в чаті існують користувачі з адмінській правами, і їм доступні такі операції як видалення і блокування користувачів, а також ймовірно видалення повідомлень. Це видно з наступного фрагмента файлу english.txt:

text.menu.people.remove = Remove% 0
text.menu.people.kick = Kick% 0
text.menu.people.ban = Ban% 0

Крім того, видно що в чаті існує реєстрація та Зареєстровані ники захищені паролем.
У зареєстрованих користувачів існує профайл.

Після запуску, аплет чату веде спілкування з хостом на якому розташований сервер чату (для даного чату це 193.124.133.54). Спілкування ведеться по TCP протоколу. Сокет відкривається один раз при запуску аплета і закривається при завершенні його роботи. Таким чином local і remote порти залишаються незмінними протягом сеансу роботи. Аплет открвает сокет на 8000 порту сервера.

Наведу дамп основного пакета запиту на вхід в групу чатів (цей пакет відсилається аплетів на 8000 порт сервера):

  0000 20 53 52 43 00 00 44 45 53 54 00 00 08 00 45 00 .SRC..DEST .... E.
 
  0010 00 EB 11 11 40 00 80 06 E9 70 D4 09 E4 CE C1 7C .... @ .... p ..... |
 
  0020 85 36 04 72 1F 40 00 2A 83 F5 AA E8 56 5A 50 18 .6.r. @. * .... VZP.
 
  0030 08 60 81 8C 00 00 00 11 43 4F 4D 2E 76 6F 6C 61 .` .... .. COM.vola
 0040 6E 6F 2E 41 63 63 65 73 73 00 00 00 01 00 0F 4D no.Access .... .. M
 0050 54 52 20 43 68 61 74 20 53 65 72 76 65 72 00 05 TR.Chat.Server .. 0060 32 2E 31 2E 30 00 20 68 74 74 70 3A 2F 2F 77 77 2.1.0 .. http: // ww
 0070 77 2E 7A 65 72 6B 61 6C 6F 2E 63 6F 6D 2F 76 63 w.zerkalo.com/vc
 0080 63 6C 69 65 6E 74 2F 00 20 68 74 74 70 3A 2F 2F client / .. http: //
 0090 77 77 77 2E 7A 65 72 6B 61 6C 6F 2E 63 6F 6D 2F www.zerkalo.com/
 00A0 76 63 63 6C 69 65 6E 74 2F 00 0F 4D 69 63 72 6F vcclient / .. Micro
 00B0 73 6F 66 74 20 43 6F 72 70 2E 00 19 68 74 74 70 soft.Corp.  .. http
 00C0 3A 2F 2F 77 77 77 2E 6D 69 63 72 6F 73 6F 66 74: //www.microsoft
 00D0 2E 63 6F 6D 2F 00 05 31 2E 31 2E 34 00 04 34 35 .com / .. 1.1.4 .. 45
 00E0 2E 33 00 0A 57 69 6E 64 6F 77 73 20 39 38 00 04 .3 .. Windows.98 .. 00F0 34 2E 31 30 00 03 78 38 36 4.10 .. x86

Сірим кольором відзначений заголовок пакета. Далі йде тіло пакета. Тіло складається з текстових рядків в незашифрованому вигляді. Кожен рядок починається з покажчика довжини рядка (відзначено рожевим кольором). Білим кольором відзначені байти, призначення яких я не зрозумів.

Як ми бачимо при ініціалізації з'єднання, аплет відсилає наступну інформацію:

1. COM.volano.Access - ймовірно це запит на доступ користувача до чату. Всі запити аплету починаються на COM.volano. , А після точки слід команда яку викликає аплет (в даному випадку Access).

2. MTR.Chat.Server - Ім'я групи чатів до яких ми приєднуємося (цей рядок вказувалася в параметрах аплету, при виклику його з HTML сторінки - див. Вище)

У відповідь на цей запит сервер надсилає у відповідь пакет, основний зміст якого - перелік активних кімнат чату:

  0000 44 45 53 54 00 00 20 53 52 43 00 00 08 00 45 00 DEST ... SRC .... E.
 
  0010 02 28 72 82 40 00 2E 06 D8 C2 C1 7C 85 36 D4 09. (R. @ ...... | .6 ..
 
  0020 E4 CE 1F 40 04 72 AA E8 56 5A 00 2A 84 B8 50 18 ... @. R..VZ. * .. P.
 
  0030 40 E8 94 95 00 00 00 11 43 4F 4D 2E 76 6F 6C 61 @ ..... .. COM.vola
 0040 6E 6F 2E 41 63 63 65 73 73 00 00 00 04 00 00 00 no.Access .... ...
 0050 01 00 00 00 32 00 10 4D 41 49 4E 20 4D 54 52 20.  ... 2 .. MAIN.MTR.
 0060 43 48 41 54 C3 90 5F 00 0F 45 4E 47 4C 49 53 48 CHAT .._ .. ENGLISH
 0070 20 43 48 41 54 C3 90 5F 00 1E 42 55 53 49 4E 45 .CHAT .._ .. BUSINE
 0080 53 53 2C 46 49 4E 41 4E 43 45 2C 53 54 4F 43 4B SS, FINANCE, STOCK
 0090 20 43 48 41 54 C3 90 5F 00 10 50 4F 4C 49 54 49 .CHAT .._ .. POLITI
 00A0 43 53 20 43 48 41 54 C3 90 5F 00 10 52 4F 4D 41 CS.CHAT .._ .. ROMA
 00B0 4E 54 49 43 20 43 48 41 54 C3 90 5F 00 0D 49 4E NTIC.CHAT .._ .. IN
 00C0 54 49 4D 20 43 48 41 54 C3 90 5F 00 15 45 52 4F TIM.CHAT .._ .. ERO
 00D0 54 49 43 20 44 52 45 41 4D 53 20 43 48 41 54 C3 TIC.DREAMS.CHAT.
 00E0 90 5F 00 10 49 53 50 4F 56 45 44 41 4C 60 4E 49 ._ .. ISPOVEDAL`NI
 00F0 41 C3 90 5F 00 10 4B 4F 4D 4E 41 54 41 20 50 49 A .._ .. KOMNATA.PI
 0100 54 4F 4B C3 90 5F 00 0D 48 55 4D 4F 52 20 43 48 TOK .._ .. HUMOR.CH
 0110 41 54 C3 90 5F 00 0D 4A 55 4C 49 41 20 43 48 41 AT .._ .. JULIA.CHA
 0120 54 C3 90 5F 00 16 4E 45 55 50 52 41 56 4C 49 41 T .._ .. NEUPRAVLIA
 0130 45 4D 49 49 20 43 48 41 54 C3 90 5F 00 1A 41 52 EMII.CHAT .._ .. AR
 0140 54 20 41 4E 44 20 50 48 49 4C 4F 53 4F 50 48 59 T.AND.PHILOSOPHY
 0150 20 43 48 41 54 C3 90 5F 00 0D 53 50 4F 52 54 20 .CHAT .._ .. SPORT.
 0160 43 48 41 54 C3 90 5F 00 0D 4D 55 53 49 43 20 43 CHAT .._ .. MUSIC.C
 0170 48 41 54 C3 90 5F 00 13 48 41 52 44 20 26 20 53 HAT .._ .. HARD. &. S
 0180 4F 46 54 20 43 48 41 54 C3 90 5F OFT.CHAT .._

Назви кімнат перераховуються в тому ж форматі що і було описано вище: двухбайтовая довжина рядка і сама рядок. Однак в кінці кожного назви кімнати йдуть три байта C3 90 5F призначення яких незрозуміло.

Після того як користувач "тицьнув" в одну з кімнат чату (але ще не увійшов в неї), аплет висилає на сервер наступний пакет:

  0000 20 53 52 43 00 00 44 45 53 54 00 00 08 00 45 00 .SRC..DEST .... E.
 
  0010 00 4C 21 11 40 00 80 06 DA 0F D4 09 E4 CE C1 7C .L .. @ .......... |
 
  0020 85 36 04 72 1F 40 00 2A 84 B8 AA E8 5B 2D 50 18 .6.r. @. * .... [- P.
 
  0030 07 A5 36 DB 00 00 00 0D 43 4F 4D 2E 76 6F 6C 61 ..6 ... .. COM.vola
 0040 6E 6F 2E 62 67 00 00 00 01 00 0F 45 4E 47 4C 49 no.bg .... .. ENGLI
 0050 53 48 20 43 48 41 54 C3 90 5F SH.CHAT .._

Де COM.volano.bg - ймовірно команда дати список користувачів з кімнати ENGLISH.CHAT, або натяк сервера на те що юзер збирається увійти в кімнату.

У відповідь на цей запит, сервер висилає аплету список користувачів, що знаходяться в цій кімнаті:

  0000 44 45 53 54 00 00 20 53 52 43 00 00 08 00 45 00 DEST ... SRC .... E.
 
  0010 00 BE 77 56 40 00 2E 06 D5 58 C1 7C 85 36 D4 09 ..wV @ .... X. | .6 ..
 
  0020 E4 CE 1F 40 04 72 AA E8 5B 2D 00 2A 84 DC 50 18 ... @. R .. [-. * .. P.
 
  0030 40 E8 1D 74 00 00 00 0D 43 4F 4D 2E 76 6F 6C 61 @ .. t .. .. COM.vola
 0040 6E 6F 2E 62 67 00 00 00 04 00 0F 45 4E 47 4C 49 no.bg .... .. ENGLI
 0050 53 48 20 43 48 41 54 C3 90 5F 00 00 00 01 00 00 SH.CHAT .._ .. .... 0060 00 01 00 00 00 00 00 02 00 06 45 64 77 61 72 64 .... .... .. Edward
 0070 00 16 43 6F 6F 6B 69 6E 67 20 6D 6F 72 65 20 61 .. Cooking.more.a
 0080 70 70 6C 65 20 70 69 65 00 0D 36 34 2E 32 30 39 pple.pie .. 64.209
 0090 2E 39 39 2E 31 33 39 00 05 66 61 6C 73 65 00 05 .99.139 .. false .. 00A0 66 61 6C 73 65 00 05 47 6C 6F 63 6B 00 00 00 0E false .. Glock .... 00B0 31 34 31 2E 31 35 35 2E 31 38 37 2E 32 31 00 05 141.155.187.21 .. 00C0 66 61 6C 73 65 00 05 66 61 6C 73 65 false .. false

Як бачимо список містить в собі масу цікавої інформації, в тому числі IP адреси чатлан. Розберемо все по порядку:

1. COM.volano.bg - ім'я команди яку відправляв аплет. Ймовірно сервер просто дублює ту команду яка викликалася для того щоб клієнт знав у відповідь на який саме запит прийшов даний пакет.

2. 00 00 00 04 - знову не зрозуміло що таке. Швидше за все це пересилається якийсь лічильник (ціле 4-байтовое число). Звернемо увагу на те, що у всіх пакетах присутні ці 4 байта, але значення останнього пропорційно кількості інформації, що надсилається користувачеві. Коли аплет висилав назва кімнати куди хоче увійти користувач, цей лічильник дорівнював 1, коли сервер надсилає список двох чатлан, що знаходяться в кімнаті - лічильник дорівнює 4, а коли сервер висилав список кімнат (їх близько 40-ка) - лічильник дорівнював аж 32h .

3. ENGLISH.CHAT - назва кімнати список користувачів якої ми отримуємо плюс незрозумілі байти C3 90 5F.

4. 00 01 00 00 00 01 00 00 00 00 00 02 - знову незрозуміло що, хоча последее число можливо означає кількість користувачів в кімнаті.

5. Edward - нік користувача, Cooking more apple pie - так званий профайл користувача (вводиться при вході користувача в чат), 64.209.99.139 - IP адреса користувача (поки незрозуміло навіщо він потрібен аплету, адже інформація все одно вся йде через сервер), далі йде два значення false призначення яких незрозуміло, може бути це якісь настройки користувача або його статус.

6. Glock і т.д. - Нік користувача і все таке ж як і у першого, за винятком того що рядок профайла порожня (профайл вводити необов'язково).

Далі буде ...