Здравствуйте, гость ( Вход | Регистрация )

> Uoext. Расширяя Возможности Клиента, We do what EA can't.
Warstone
сообщение 1.11.2010, 12:09
Сообщение #1


*********

Группа: Модераторы
Наличность: 0
Пользователь №: 10.905
Возраст: 25



UOExt - Ultima Online protocol Extender

Текущая версия: 0.1.0-RC1

Данная программа позволяет вам добавить еще один уровень абстракции в связке клиент - сервер для более эффективного управления как ресурсами так и самим клиентом.

Данная программа выполнена в виде dll, которая подключается к клиенту во время запуска (клиента). Она запускает в адресном пространстве клиента еще один "прокси-сервер" и перенаправляет весь протокол через себя. В отличие от других программ того-же класса, которые перехватывают recv/send, прокси сервер работает в отдельном потоке, что положительно сказывается на плавности картинки клиента, однако налагает дополнительные требования к программисту. В частности: Если прокси-сервер, по приходу какого-то пакета должен сделать серьезную обработку этого пакета, то клиент все-еще может сделать несколько шагов, до того, как переполнится локальный буфер действий клиента и он встанет (эффект потери соединения с сервером). Для игрока - это не большое время, но для программы - это миллиарды тактов.
Побочный эффект данного подхода состоит в том, что вам больше не надо следить за тем, является-ли ваш клиент шифрованным, так как программа автоматически расшифрует протокол, если сервер не принимает зашифрованный протокол.

Так как данная программа выполняется в адресном пространстве клиента, ей так-же доступны любые данные клиента. Более того, перехват API распространяется и на клиент. Поэтому вы имеете все данные клиента и можете производить относительно долгие вычисления без "фризов" клиента.

Сам исходный код данной программы доступен по адресу: http://code.google.com/p/uo-ext/ и имеет лицензию GPL. Однако плагины, написанные вами, являются самостоятельным продуктом (так-же dll) и, насколько я понимаю, могут не попадать под лицензию GPL. Если это не так, и тут есть кто-нибудь, кто разбирается в лицензиях - свяжитесь со мной, пожалуйста, для консультаций по лицензиям.

Исходный код программы написан на Object Pascal, однако плагины могут быть написаны на любом языке (соглашение о вызовах stdcall или, в терминах Си это должно быть, WINAPI соглашение).

История версий (с r53)
r60
- UOExt.GUI: Убрано мерцание при частом обновлении картинки.
- UOExt.GUI: Добавлен проект-тест для UOExt.gui.dll
r57
- Добавлен проект UOExt.GUI. Это шкурка "по умолчанию". Нет поддержки UOExt. Сама картинка сделана командой сервера "Квинтэссенция". Все скопировано правильно!

r56
- UOExt выгружается на старте клиента, если она не поддерживается сервером.

r55
- Убран проект UOLoader из репозитория. Фактически, он не использовался в работе с тех пор, как заработало заражение ехе
- Добавлена проверка на поддержку сервером UOExt в купе с передачей настроек. Аналог Razor'овского Negotiate features with server.
- Поправлен баг с падением клиента при разрыве соединения во время игры.
- В репозиторий добавился код для RunUO для поддержки UOExt

r53
Первый релиз, относительно которого будет вестись история.


Мини FAQ по работе с UOExt

Начальная установка
UOExt поставляется в 2-х основных форматах: debug и release. Отличие их в том, что debug "выкидывает" консоль и пишет туда отладочные сообщения. release, же работает без дополнительного окна.
На данный момент предпочтительный метод работы с UOExt состоит в заражении выполняемого файла клиента игры UO вызовом UOExt при запуске.
Процесс заражения происходит так: Скопировать UOExt.dll в папку с клиентом, открыть командную строку (Пуск - Выполнить cmd.exe), перейти в папку с клиентом и выполнить следующую команду:
Код
%windir%\system32\rundll32.exe UOExt.dll,Infect32 client.exe

Где client.exe - название выполняемого файла клиента УО. Так-же рекомендуется сохранить резервную копию, так как UOExt пропишет себя в текущем exe и будет запускаться каждый раз при старте модифицированного клиента.
После этой операции вы можете работать с клиентом, как раньше. Просто он будет загружать UOExt.

Поддерживаемые программы
На данный момент UOExt умеет работать с клиентом с которого снято или не снято шифрование (авто определение факта снятия шифрования).
Так-же UOExt запускается с Razor.
Тесты совместимости с другими сопутствующими программами не проводились.

Механизм проверки сервера на работу с UOExt
UOExt проверяет сервер на поддержку UOExt путем отсылки серверу пакета 0xEF с пустыми значениями. Если в ответ в течении 5 секунд не прилетит пакет 0x00, то считается что сервер не поддерживает UOExt. Содержание пакета можно почитать в комментариях в коде.

Механизм расширения функционала путем написания плагинов
Будет позже.


Roadmap

r53 (29.04.2012) - UOExt: Решение косяков с шифрованием.
- UOExt: Очередь загрузки плагинов
- UOExt: Взаимодействие между плагинами
r53 (29.04.2012) - UOExt: PE_PROXYEND - добавить в параметры наличие коннекта до клиента и сервера, а так-же причину завершение прокси.
- UOExt (фича): Поддержка старого шифрования (Которое основано на Pi... Это 2-е клиенты что-ли)
Устарело - UOExt (фича): Если UOExt словило какой-то неизвестный пакет, то его надо записать в отдельный файл на диске.
- UOExt (фича): Автоматическое чтение протокола зи запущенного ехе (только для 2д версий).
- UOExt (фича): Если пришел неизвестный пакет с сервера (с клиента он придти не может ибо выше), то просто не пропускать его дальше. Заодно и сдампить.
- UOExt (фича): В дебаг режиме пользуясь VEH уметь ловить ошибки и откатываться до вызова плагина. (с возможным продолжением работы, хотя этого скорее всего не будет)
r54 (01.05.2012) - UOExt (фича): Ловить первый пакет с сервера и проверять его на "каноничность". Если он "каноничен", то UOExt не поддерживается этим сервером, если он специальный, то из него прочитать настройки для UOExt.
r56 (01.05.2012) - UOExt (фича): Если сервер не поддерживает UOExt, то она выгружается из АП клиента, позволяя ему продолжать работать в штатном режиме.
r57 (15.05.2012) - UOExt (фича): Добавить специальную dll'ку, которая будет заниматься визуализацией процесса клиенту.
- UOExt (правка): Сделать проверку что на этапе инициализации IP/порт те-же что и на этапе коннекта самого клиента.
- UOExt (правка): При заражении ставить метку о заражении. Это нужно для того, чтобы убрать возможность повторного заражения и/или перезаражать, если механизм заражения изменился.


--------------------
Do. Or do not. There is no Try!
© Master Joda, Dagobah, Star Wars: Episode V.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов
Warstone
сообщение 12.2.2011, 18:10
Сообщение #2


*********

Группа: Модераторы
Наличность: 0
Пользователь №: 10.905
Возраст: 25



Да, 10-я ревизия обновила транк (реинтеграция шифрования).

Поправим прежние планы:

1) Переделать инициализацию на вызов не по "одной процедуре", а все сразу скопом.
2) Дать возможность указывать протокол в плагине (поддержка любого протокола любой версии, если вы напишите "протокольный плагин")
Можно указывать протокол, который не следует стандарту "Если длинна пакета не известна, то она пишется во 2-м и 3-м байте пакета"
3) Криптование со стороны клиента и сервера (Шифрованный клиент к нешифрованному серверу и наоборот).
4) Распаковка/Запаковка zlib'ом пакета с Гампами (и других пакетов, если такие будут)
5) Доработка утилитарных классов. В частности для чтения/записи пакетов.
6) Механизм отслеживания "оригинальных" и "измененных" Серийников для того, чтобы можно было удобно и безопасно спавнить айтемы и мобайлы в мире через прокси, а не через сервер
Частично сделан. Всего будет 3 механизма:
1) Статический (Администратор сервера выделяет большой пул серийников, пул задается в конфиге перехватчика)
2) Серверный (Сервер, по запросу, предоставляет маленькие пулы серийников, пулы получаются через расширение протокола)
3) Проксируемый (Перехватчик выдает незанятые серийники, если сервер их занимает, начинается трансляция серийников из серверный в клиентские и обратно)
Пока сделан механизм 1.

7) Получение плагинов с сервера и инкапсуляция своего протокола внутрь УО'шного для управления системой с сервера. (Собственно это была основная цель данного проекта. Дать возможность держателям серверов "дописывать" поведение клиента в зависимости от своих пожеланий)
8) Механизм временных событий (стандартные средства тут не работают).
9) Механизм синхронизации с другими потоками клиента (необходимо для реализации перехвата API в плагинах)
Синхронизация сделана через 2-х ступенчатую систему изменения Interlocked переменных.

999) Оптимизация протокола УО для большей эффективности передачи данных и снижению нагрузки на канал.

Ну и вытащим следующие маилстоуны:

1) Распаковка/Запаковка zlib'ом пакета с Гампами (и других пакетов, если такие будут)
Сама поддержка zlib уже есть, надо только продумать - что делать с гампами
2) Доработка утилитарных классов. В частности для чтения/записи пакетов.
3) Получение плагинов с сервера и инкапсуляция своего протокола внутрь УО'шного для управления системой с сервера. (Собственно это была основная цель данного проекта. Дать возможность держателям серверов "дописывать" поведение клиента в зависимости от своих пожеланий)
4) Механизм временных событий (стандартные средства тут не работают).
999) Оптимизация протокола УО для большей эффективности передачи данных и снижению нагрузки на канал.


Да, пожелания, предложения, плюшки?

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


--------------------
Do. Or do not. There is no Try!
© Master Joda, Dagobah, Star Wars: Episode V.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Сообщений в этой теме
Warstone   Uoext. Расширяя Возможности Клиента   1.11.2010, 12:09
Ozzy Osbourne   Надо надо :) Сейчас анимации на весь экран приходи...   1.11.2010, 12:31
StaticZ   Конечно надо, только вот поддержка Razor всеже нуж...   1.11.2010, 13:37
d`ArcZeal   Надо надо :) Сейчас анимации на весь экран приход...   15.11.2010, 17:59
Ozzy Osbourne   ну разоры шмазоры это можно и потом прикрутить. по...   1.11.2010, 15:15
Warstone   Итак... Пройден этап первичного тестирования и выл...   13.11.2010, 2:22
wap   Потенциально штука для сферы неплоха в плане хотя ...   13.11.2010, 2:57
Warstone   На вопрос общаственности... Как делать систему пла...   13.11.2010, 14:33
StaticZ   Серверные плагины скачиваются непосредственно с с...   13.11.2010, 15:58
Warstone   Нужна система защиты иначе могут просто подменить...   14.11.2010, 0:50
Soteric   Оно вообще-то надо? Нам надо хоть один завершенный...   13.11.2010, 20:41
Vizit0r   UOExt или Ultima Online ® © (tm) Protocol Extende...   15.11.2010, 9:40
Warstone   я обожаю изобретателей велосипедов. они натыкаютс...   15.11.2010, 10:21
StaticZ   P.P.S. А название топика- то какое классное ...   15.11.2010, 17:44
Vizit0r   про P.P.S. - а EA оно просто не надо. вот и все. ...   15.11.2010, 10:43
Warstone   про P.P.S. - а EA оно просто не надо. вот и все. ...   15.11.2010, 12:46
Ozzy Osbourne   Работают отлично, с этим проблем нет. Но когда в м...   16.11.2010, 0:34
Warstone   А все просто... Так ты напрягаешь сервер рассчитыв...   16.11.2010, 0:35
GblPower   Полезная штука. Особенно для ПОЛа. И вопрос, как о...   17.11.2010, 11:55
StaticZ   Полезная штука. Особенно для ПОЛа. И вопрос, как ...   17.11.2010, 13:02
Warstone   На самом деле - надо проверять... Надо знать как р...   17.11.2010, 13:04
Destruction   На самом деле - надо проверять... Надо знать как ...   17.11.2010, 13:09
Warstone   Как сделать - я и так понимаю. Вопрос куда я попад...   17.11.2010, 18:47
Warstone   Итак... первая встраиваемая версия готова. Запуска...   12.12.2010, 0:17
Warstone   Некоторые люди сильно ругали меня за то, что не ви...   12.12.2010, 3:50
Warstone   Итак... Хотелось-бы немного рассказать об API и по...   12.12.2010, 23:49
Warstone   Да, ну и дальнейшие планы: 1) Переделать инициали...   13.12.2010, 0:01
wap   Потестил "демонстрационную" версию. Запу...   22.12.2010, 17:39
Warstone   Потестил "демонстрационную" версию. Зап...   24.12.2010, 13:05
Ozzy Osbourne   А что поддержки более ранних версий клиента можно ...   23.12.2010, 1:50
Warstone   Только что получилось в ран-тайме объяснить что в ...   26.12.2010, 2:42
Warstone   Текущий код залит в транк. Код доступен тут: http:...   7.1.2011, 16:34
StaticZ   наконец-то!!, уже солидный проект с сайтом...   7.1.2011, 16:50
Warstone   Ну плагины действительно на чем угодно можно писат...   7.1.2011, 16:55
StaticZ   Ну плагины действительно на чем угодно можно писа...   7.1.2011, 16:59
Warstone   Тут не понял.Пока не надо, но если очень интересно...   7.1.2011, 17:30
Warstone   Почистил код. 5-я ревизия должна автоматом собират...   10.1.2011, 3:04
Warstone   Волонтеров нету (внезапно). Вопрос сообществу: Не...   15.1.2011, 4:29
StaticZ   Волонтеров нету (внезапно). Вопрос сообществу: Н...   15.1.2011, 5:13
Warstone   Когда я это говорил? Да, но если у тебя версия до ...   15.1.2011, 15:23
StaticZ   Когда я это говорил?"Волонтеров нету (внезап...   15.1.2011, 16:42
Warstone   А до этого фразу 5 дней назад про необходимость во...   15.1.2011, 17:49
wap   Что касается меня, я вроде уже отписывался(касаетс...   16.1.2011, 23:28
Warstone   Да.... насколько я понял тут 3 калеки (включая мен...   17.1.2011, 10:23
Warstone   Собственно новости: В готовящейся версии: - Фикс б...   30.1.2011, 5:36
wap   Да, похоже что Шифрование это началось с 3-х клие...   1.2.2011, 20:56
StaticZ   Что такое Blowfish и Twofish я лично не в курсе, ...   2.2.2011, 11:13
Warstone   Следующая ревизия. Детект шифрования клиента. Полн...   1.2.2011, 16:38
Warstone   http://code.google.com/p/uo-ext/source/bro...der/T...   1.2.2011, 23:21
Warstone   Поддержка шифрованного клиента есть. Надо потестит...   12.2.2011, 17:43
Александр Needle™   Прикрепил тему , давно пора было это сделать.   13.2.2011, 18:45
Warstone   Решил пока отвлечься от разработки ядра и сделать ...   13.2.2011, 23:08
Warstone   Если вдруг кто-то что-то пишет (нет, ну а вдруг), ...   16.2.2011, 16:35
Warstone   Столкнулся с интересной проблемой. Если в основном...   29.3.2011, 17:15
StaticZ   Столкнулся с интересной проблемой. Если в основно...   29.3.2011, 17:52
Warstone   Может чето перенамудрил и падение происходит из-з...   29.3.2011, 21:55
Warstone   Удивительное рядом... LoadLibrary в инъектируемой ...   29.3.2011, 23:21
Warstone   Сделал перехват Entry Point для клиента и теперь и...   31.3.2011, 1:32
Warstone   Переделал проект под XE, ошибка осталась. Почитал ...   10.4.2011, 3:15
Warstone   Ошибка найдена. Сам и д и о т. Если коротко, то по...   10.4.2011, 5:35
Warstone   Залил 11-ю ревизию. Список изменений: All: ...   15.4.2011, 17:50
StaticZ   Еще один шажок на пути к революции остался позади....   15.4.2011, 20:47
Warstone   Еще один шажок на пути к революции остался позади...   15.4.2011, 23:31
wap   Я вообще по-русски в программно-технических постах...   15.4.2011, 22:07
Warstone   Собрал черновой вариант динамической статики (снач...   16.4.2011, 2:01
Александр Needle™   Кашерно , как бы мне в этом покавырятся?   16.4.2011, 7:42
Warstone   http://code.google.com/p/uo-ext/ Там есть сорс и,...   16.4.2011, 11:02
Warstone   Нашел ошибку в ядре... [props не работает. Скорее ...   18.4.2011, 0:59
Александр Needle™   А я все никак выкачать не могу с сайта сорсы))   18.4.2011, 7:20
Warstone   Если не можешь - это хорошо... Но вообще надо пост...   18.4.2011, 10:21
Warstone   12-я ревизия. Баг починен. Core: [ADD...   18.4.2011, 19:19
Александр Needle™   Скачал , вроде как скомпилил , пока не могу судить...   19.4.2011, 14:14
Warstone   Ну ессно не можешь... Это ядро. В идеале, когда за...   19.4.2011, 23:36
Warstone   Плагин динамической статики умеет отслеживать пози...   21.4.2011, 23:57
StaticZ   Плагин динамической статики умеет отслеживать поз...   22.4.2011, 0:47
Warstone   http://ruosi.org/packetguide/index.xml#bothC8 Мож...   22.4.2011, 1:19
Warstone   Еще один маленький шажок... Технически - плагин за...   24.4.2011, 0:44
Warstone   Гм... Меня тут просили выложить скрины... Выкладыв...   1.5.2011, 14:04
d`ArcZeal   А чего это скрин, не пойму.   1.5.2011, 21:34
Warstone   Это скрин обычного шарда, практически любого, прос...   1.5.2011, 22:10
Warstone   Переделал заголовочный текст. Как вам такой вариан...   3.5.2011, 9:50
Александр Needle™   Шикарно , но видимо многие пока просто не знают ка...   3.5.2011, 14:41
Warstone   В следующем коммите будет новая фишка: Добавлена н...   10.5.2011, 22:50
Warstone   Следующие маилстоуны: Ядро: - Сделать загрузку пл...   12.5.2011, 14:32
Warstone   Слушайте, а кто-нибудь вообще думал использовать U...   14.5.2011, 21:10
StaticZ   Слушайте, а кто-нибудь вообще думал использовать ...   15.5.2011, 1:22
Warstone   Я думал... * Ориентировался правда на работу со ...   15.5.2011, 1:37
StaticZ   1) Почему... Все срастается. Просто это отдельные...   15.5.2011, 2:09
Destruction   А че там фантазировать??? проверяем процесы запус...   15.5.2011, 6:45
StaticZ   Конечно все можно всегда взломать, ни одно криптов...   15.5.2011, 9:09
Warstone   1-2) Я про мулы - ты вначале толкал тему о том чт...   15.5.2011, 8:49
Doberman   Я думаю желающих много. Лично меня интересует возм...   14.5.2011, 21:59
Warstone   Простейший метод - поиск по названию/размеру/сигна...   15.5.2011, 0:47
Doberman   Эээ :blink: Не хочу обидеть или показаться не ве...   15.5.2011, 1:23
Warstone   Проект опенсорсный, сам он GPL'ный, однако пла...   15.5.2011, 13:22
StaticZ   Да проблемы нет, как и везде есть своим + и -.. Пл...   15.5.2011, 13:34
Warstone   Да проблемы нет, как и везде есть своим + и -.. П...   15.5.2011, 15:07
Destruction   Warstone, я отвечал на пост StaticZ. Не вижу там н...   15.5.2011, 13:44
wap   Слушайте, а кто-нибудь вообще думал использовать ...   15.5.2011, 14:08
4 страниц V  1 2 3 > » 


Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 3.8.2025, 5:50
Designed by Nickostyle