PDA

Просмотр полной версии : [DEV]Java sniffer


Evgeniy
29.05.2013, 09:38
https://github.com/MinimaJack/JSniffer
для билда 16992,17055

Собирать
мавеном и gcc ( в зависимости от разрядности нужной версией mingw )

git clone https://github.com/MinimaJack/JSniffer.git
cd JSniffer (либо в каталог JSniffer/org.jmangos.sniffer/ для 64 битной версии библиотека уже собрана)
mvn package
забирать:
JSniffer/org.jmangos.sniffer/target/org.jmangos.sniffer-0.0.1-SNAPSHOT.jar
JSniffer/org.jmangos.sniffer/target/lib/*
JSniffer/org.jmangos.sniffer/dist/*all*
в JSniffer/org.jmangos.sniffer/dist/ лежат 64 битные библиотеки http://jnetpcap.com/download (jnetpcap) версии 1.4.r1390

в sniffer.properties настройки.
sniffer.networkDeviceIndex = 1 По умолчанию используется второй (отсчет от нуля ) интерфейс
для изменения настроек скопировать sniffer.properties из исходников и положить рядом с джарником. Ну и изменить настройки.
sniffer.log.enablePkt = 1 - сохранять лог в пкт формат(версия 3.1), по умолчанию включен
sniffer.log.enableTxt = 0 - сохранять лог в тестовой формат, по умолчанию выключен

Архив со всем добром: 1217

Запускать: run.bat
Для запуска:

Необходима jre1.7
Необходимо иметь установленую http://www.winpcap.org/ pcap библиотеку.
Необходимо запускать wow.exe, либо в лаунчере указать на запуск 32 битной версии вова
необходимо запускать снифер с админскими правами


Измененная версия WoWPacketViewer-а от TOM_RUS для поддержки пкт 3.1 1214. Парсеры ес-но надо обновлять вручную.
Теперь можно просмотреть тринити парсером https://github.com/TrinityCore/WowPacketParser

ззы проверил на 64 битной Windows 7601 в режиме запуска как 32, так 64 битной версии программы.

Build
17055 sniffer.properties
sniffer.build = 17055
sniffer.networkDeviceIndex = 0
sniffer.connection = 14928660
sniffer.key = 1288
sniffer.serverSeed = 08F1959F47E5D2DBA13D778F3F3EE700
sniffer.clientSeed = 40AAD392267143473A3108A6E7DC982A
sniffer.log.enablePkt = 1
sniffer.log.enableTxt = 0
sniffer.scriptDir = ./script/scripts.xml
Огромное спасибо
YuruY (http://ru-mangos.ru/member.php?u=2) за тестирование.
RomanRom2 (http://ru-mangos.ru/member.php?u=949) за помощь в разработке.

Evgeniy
06.06.2013, 08:57
..пусто пока.(
после закрытия вова, да и переодически после каждого закрытого соединения
в логе будет что то типо такого:
08:54:59.012 [main] INFO o.j.sniffer.handler.RawPacketHandler - Close Connection: 195.12.246.241 3724-192.168.1.101 57383
08:55:09.218 [main] INFO o.j.sniffer.handler.RawPacketHandler - Close Connection: 195.12.246.239 3724-192.168.1.101 57384
1209 пример
Запускать с административными правами.
Что бы что то появилось, минимум необходимо зайти до выбора персонажа.

Evgeniy
10.06.2013, 16:15
Имеет ли смысл встраивать скриптование для обработки пакетов?
То есть либо, обработка пакета, либо запись дополнительных данных в лог файл, да и в общем то любых действий.

RomanRom2
10.06.2013, 16:46
нет, не имеет. пусть снифер занимается своим делом. обработку нужно делать в оффлайне.

единственный тип обработки мне приходит на ум - это то, что делал вад в свое время: радар детектор. приложение показывало видимые объекты вокруг в окошке.

Evgeniy
10.06.2013, 16:52
нет, не имеет. пусть снифер занимается своим делом. обработку нужно делать в оффлайне.

единственный тип обработки мне приходит на ум - это то, что делал вад в свое время: радар детектор. приложение показывало видимые объекты вокруг в окошке.
я и намекал, что любых действий...радар также возможен =)))
Конкретно о заполнении опциональных данных в снифах.

Konctantin
10.06.2013, 17:35
Кстати, от куда можно причитать ConnectionId (никак не могу найти)
Сейчас вот тестю свой инжектор, все пишется, а вот ConnectionId незнаю от куда вытащить.

ЗЫ. И еще один вопрос к знающим людям.
Для записи в файл я использую WinApi функции и вызываю их по оффсету в клиенте.
Может есть другой способ определить адрес импортированной функции?

Evgeniy
10.06.2013, 17:41
Кстати, от куда можно причитать ConnectionId (никак не могу найти)
Сейчас вот тестю свой инжектор, все пишется, а вот ConnectionId незнаю от куда вытащить.
без понятия как там в клиенте...у меня хеши джава объектов( грубо говоря хеш с портов и йп). Роман говорил, что подойдет и обычная нумерация. По идее, что бы отделить пакеты от разных серверов, подойдет что угодно.

RomanRom2
11.06.2013, 10:44
По идее, что бы отделить пакеты от разных серверов, подойдет что угодно.
из разных коннектов. да, важно что бы эта нумерация не пересекалась в рамках одного снифа. а какие именно значения там будут - это не важно. важно, что бы они были уникальными.

Evgeniy
11.06.2013, 16:17
Обновил снифер для запуска пользовательских скриптов.
Скрипты на джава.
Папка со скриптами script/ (Обновился конфиг, добавился путь к хмл описанию скриптов)
scripts.xml - описание скриптов....йд скрипта, класс и путь к файлу скрипта.
Для примера написаны 2 скрипта:
TestScript.java - имплеминирует два интерфейса ScriptHandler и Runnable, означает что у него будет вызван(и должен существовать) метод initScript, Runnable - что скрипт будет запущен в другом потоке(будет выполнен метод run). В самом методе ничего интересного нет: в цикле отображается системное время 5 раз с промежутком в одну секунду.
UiLogger.java - имплемениерует PacketLogHandler - что означает, что данный класс будет добавлен в цепочку логеров на получение всех пакетов путем вызова метода:
public void onDecodePacket(NetworkChannel channel, Direction direction, Integer size,
Integer opcode, byte[] data, int frame);
Конкретно данный класс создает гуи окно, показывает счетчик пакетов и по нажатию на закрытие(крестик) окна - отключает снифер.

Скрипты загружаются из хмл, но компилируются все вместе. Из-за чего ошибка в одном скрипте может не дать работать остальным.
Для работы со скриптами, а именно компиляции в рантайме, необходимо наличие установленой JDK. Для тех у кого нет JDK - скрипты работать не будут и в логе будет предупреждение.

RomanRom2
11.06.2013, 16:29
компиляцию в рантайме, по моему, может только дотнет делать. Nomad в свое время делал это в своем RunServer и мне показывал как это круто :)

Evgeniy
11.06.2013, 16:30
компиляцию в рантайме, по моему, может только дотнет делать. Nomad в свое время делал это в своем RunServer и мне показывал как это круто :)
Ну джава и с# близки, компиляция в рантайме работает. Значит джава тоже может.:thank_you:

RomanRom2
11.06.2013, 16:35
да, мне мои джава-гуру-пацаны рассказали, джава тоже может, причем lдаже нативно. javax.script.*

Evgeniy
13.06.2013, 11:53
кто то пользуется? Или так ....есть и ладно?

Evgeniy
13.06.2013, 20:48
В шапке обновил конфигурацию для билда 17055

RomanRom2
14.06.2013, 23:27
пока нет. чото как то не улыбает выключение ASLR... надо что то думать.

Evgeniy
16.06.2013, 10:50
Теперь можно не отключать ASLR. В первом посте обновленный конфиг и release build.
Для включения ASLR удалить ключ HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Contro l\Session Manager\Memory Management\MoveImages
либо импортировать reg файл из 1218 (запустить и импортировать)

Evgeniy
20.06.2013, 09:06
Вопросы, предложения, пожелания...
Пока из насущных проблем - написание С библиотеки для получения ключа под вайном. Pcap и Java работают замечательно, но вот с кодом на С у меня проблемы. Если кто желает помочь проекту в этом нелегком труде, буду только рад.
Имеет ли смысл создавать гуи?
Автоматическая загрузка снифов на сервера по фтп( либо другому протоколу)?

RomanRom2
20.06.2013, 11:07
предложения:
1. автоматический скан и получение ключа
2. полный инсталлер

гуи не надо, аплоад не надо.

Evgeniy
20.06.2013, 11:33
предложения:
1. автоматический скан и получение ключа
2. полный инсталлер

гуи не надо, аплоад не надо.

Поконкретней...что значит автоматический скан?

RomanRom2
20.06.2013, 12:00
я вроде рассказывал в скайпе:
запускается снифер, выясняет билд клиента (например 17055).
читает свой конфиг и ищет запись типа
17055=F823AADC
ну типа адрес, где ключ читать.

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

таким образом в инишнике по сути копятся записи
17000=AABBCCDD
17020=BBCCDDEE
17055=CCDDEEFF

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

YuruY
22.09.2013, 05:44
Под текущую реву 5.4.0 есть у кого сниффер?