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

> 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   Uoext. Расширяя Возможности Клиента   1.11.2010, 12:09
Ozzy Osbourne   Есть возможность эмулировать внутри клиента работу...   17.8.2012, 11:49
wap   А да, совсем забыл одно из самых неприятных ограни...   17.8.2012, 19:35
StaticZ   Это ограничения области рендинга, сомневаюсь что э...   17.8.2012, 20:23
wap   Это ограничения области рендинга, сомневаюсь что ...   17.8.2012, 20:33
Warstone   СтатикЗ, там проблемы будут только с тем, что буфе...   17.8.2012, 20:57
StaticZ   Поправь... все уошники тебе скажут большущие СПАСИ...   17.8.2012, 21:38
StaticZ   Как там дела обстоят с загрузкой плагинов с харда?   17.8.2012, 22:40
Warstone   В RC3   18.8.2012, 0:22
StaticZ   За одно уж и сервак сделай отключаемым тогда, хотя...   18.8.2012, 0:56
Warstone   Почитай что-ли багтрек... Ну что-бы такое не писат...   18.8.2012, 1:12
StaticZ   Да мне просто дистрибутив надо новый делать, а его...   18.8.2012, 2:22
Warstone   Ну что-ж ты сделал-то? )) Вчерне собрал вариант ...   18.8.2012, 13:56
Warstone   Докинул на RC3 пару новых тасков на хуки входящего...   25.8.2012, 19:32
Warstone   Где найти исходники шифрования 2.0.3 клиента? Inje...   26.8.2012, 20:54
StaticZ   Где найти исходники шифрования 2.0.3 клиента? Inj...   1.9.2012, 14:41
Warstone   Кросспостинг с Треккера: Issue 27: MULApi API ...   30.8.2012, 1:02
Warstone   Играюсь с ДД...type TDirectDrawCreate = function...   4.9.2012, 21:29
StaticZ   самое интересное для тебя наверное будет дальше - ...   5.9.2012, 0:33
Warstone   Статикз... type TDDHook = class(IDirectDraw...   5.9.2012, 12:03
Warstone   Ох ты... Какой мне классный хук только что сделали...   5.9.2012, 23:09
StaticZ   Ох ты... Какой мне классный хук только что сделал...   6.9.2012, 0:12
Warstone   мм откуда такая инфа??? Очень сомнительно если че...   6.9.2012, 11:49
StaticZ   Оттуда, что CreateDirectDraw вызывается только пр...   6.9.2012, 16:48
Pelican   Что эти хуки дают? Переписывают УО функции на свои...   5.9.2012, 23:40
Warstone   Что эти хуки дают? Переписывают УО функции на сво...   5.9.2012, 23:59
Ozzy Osbourne   А все равно без толку. В фул-экран люди не бегают ...   6.9.2012, 11:09
Pelican   Если вы до такого уже дошли, то наверно уже скоро ...   6.9.2012, 21:37
Warstone   Если вы до такого уже дошли, то наверно уже скоро...   7.9.2012, 0:04
wap   Не факт. Мне лениво копаться в дизасме. Так ты же...   7.9.2012, 1:36
Warstone   Блоки 8*8. Квадрат со стороной 33 (18+1+18). Собст...   7.9.2012, 11:16
Ozzy Osbourne   Надо просто скинуться и купить сорцы клиента у EA ...   7.9.2012, 13:09
StaticZ   боюсь денег не хватит, даже на слова Ultima Online...   8.9.2012, 0:08
Pelican   Может у программеров остались сорцы.   8.9.2012, 0:23
Ozzy Osbourne   Я думаю они на будущих лет так 100 связаны каким т...   8.9.2012, 4:39
StaticZ   как и любой программер... Да и толку? клиент морал...   8.9.2012, 21:37
Warstone   Появилась мысль - научить УОЕкст мерджить плагины ...   14.9.2012, 7:19
StaticZ   а если плагин импортит функции другого плагина????...   14.9.2012, 22:59
Warstone   а если плагин импортит функции другого плагина???...   15.9.2012, 14:09
StaticZ   Ну а тестирование - тестировать как сейчас... Пото...   16.9.2012, 11:50
Nickname   Пробую запустить UO Ext сервер, но выдаёт ошибку. ...   4.10.2012, 22:20
Warstone   Пробую запустить UO Ext сервер, но выдаёт ошибку....   5.10.2012, 0:03
StaticZ   А читать уже разучились? там ясно и четко написано...   4.10.2012, 23:49
StaticZ   Понятно тогда полит коретнее писать "not 32bi...   5.10.2012, 1:00
Nickname   А читать уже разучились? там ясно и четко написан...   5.10.2012, 1:24
StaticZ   читайте внимательно ) клиент там ни причем, сервак...   5.10.2012, 1:41
Warstone   2 Warstone а не проще ли компелить сервак как х32 ...   5.10.2012, 13:36
Nickname   читайте внимательно ) клиент там ни причем, серва...   5.10.2012, 11:46
Warstone   r113 Issue 17: Allow plugins register another li...   20.10.2012, 0:54
Nickname   Warstone, опиши пожалуйста, как работать с UoExt н...   20.10.2012, 1:02
Warstone   Сейчас просмотрел ветку... Действительно нету... Т...   20.10.2012, 1:38
Warstone   Сделал вызов плагинов потокобезопастным и возможны...   20.10.2012, 15:34
Warstone   r114 [Core] Issue 21: Thread safe ca...   27.10.2012, 17:27
Warstone   r115 Трамплины все-таки работают. Это связанно с...   28.10.2012, 20:51
Warstone   r117[Core] Switch to WinSock 2.2. This b...   30.10.2012, 0:20
Warstone   А собственно почему только СтаткиЗ? В аттаче r118...   30.10.2012, 1:33
Warstone   Вот "радует" меня Дельфи... Из-за его то...   30.10.2012, 23:51
Warstone   r119 Поправил APISearch. Он, оказывается, не работ...   31.10.2012, 0:59
Warstone   Господа, есть желающие записаться в тестеры плагин...   3.11.2012, 18:10
Warstone   Так... Вроде-бы только что удалось добиться нормал...   4.11.2012, 3:23
Warstone   Ура... Это ... на палочке ... удалось запустить......   11.11.2012, 0:35
Warstone   r123[Core] zLib code fixed. (Never t...   12.11.2012, 0:07
Warstone   r124[Core] APIHooker's Restore proce...   13.11.2012, 1:37
4 страниц V « < 2 3 4


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

 

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