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

> 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Отправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов
Vizit0r
сообщение 15.11.2010, 9:40
Сообщение #2


*

Registred
Сообщений: 2
Регистрация: 15.11.2010
Группа: Пользователи
Наличность: 0
Пользователь №: 13.189



Цитата(Warstone @ 1.11.2010, 11:09) *

UOExt или Ultima Online ® © ™ Protocol Extender
Суть идеи: На клиенте повесить обработчик протокола между клиентом и сервером. То есть технология такая: Клиент читает Login.cfg... Как только он делает CreateFileA, перехватчик создает, в отдельном потоке, слушающий тред и скармливает клиенту Что-то типа LoginServer=127.0.0.1,XXX, где XXX - динамически порт. Клиент коннектится к этому "серверу", тот, в свою очередь, коннектится к настоящему серверу и начинает пропускать протокол через себя.
Естественно что через такую прокси систему так-же можно получать пакеты, которые неизвестны клиенту и обрабатывать их, посылать пакеты клиенту, не получая их с сервера.
Что это дает:
Возможность часть логики переложить на клиента. Я приведу пару примеров, которые просто очень хорошо ложатся в эту идеологию:
1) Есть "хотелка":
Раскрашивать проперти вещи различными цветами. То есть красным если требование не выполнено и зеленым, если оно - выполнено. Это можно сделать на сервере, но зачем? Это будет занимать лишнее время сервера, которое всегда дорого.
Можно это-же сделать на клиенте. Тогда раскрашивать будет сам клиент, а серверу, простите, пофигу.
2) Есть "хотелка":
Хочу ощще ппц спец. эффекты при касте магии. То есть кидается спелл... Дальше начинаются спец. эффекты по всему экрану. Они ни на что не влияют, но они есть...
Такую штуку, опять-таки, хорошо делать на клиенте, а сервер будет просто посылать id анимации, время, прошедшее с запуска анимации.

Вообще, тут возможности безграничны.

Что есть на данный момент:
преАльфа версия. Перехват протокола реализован. Инъекция производится с помощью "Запускатора".

Что будет дальше:
преАльфа, после вылова глюков и, возможно, рефакторинга кода, перейдет в Альфу, с которой удастся поработать некоторым шардам (пока один на RunUO. Возможно нужен будет еще один на Sphere/POL, но все зависит от активности Сферойдов и POLотеров =))

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

Даю намек - исходники инжекта уже лет 10 как лежат на сурс форже. Там как раз и расшифрование+расжатие трафика, подмены пакетов, и отсыл своих пакетов клиенту\серверу, и прочее, прочее.

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




После прочтения постов про возможность встраивания ЛЮБЫХ плагинов-аддонов - стало понятно, что надо будет детектить еще и эту dll'ку в кач-ве вредной.


P.S. Вообще замечательная тема, не мог пройти мимо. даже потратил минуту на регистрацию (IMG:style_emoticons/default/smile.gif)

P.P.S. А название топика- то какое классное "We do what EA can't.". Я бы сказал, что EA это нафиг не надо просто. впрочем автор видимо себя считает более крутым, чем программисты из EA )))
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Warstone
сообщение 15.11.2010, 10:21
Сообщение #3


*********

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



Цитата(Vizit0r @ 15.11.2010, 9:40) *

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

Даю намек - исходники инжекта уже лет 10 как лежат на сурс форже. Там как раз и расшифрование+расжатие трафика, подмены пакетов, и отсыл своих пакетов клиенту\серверу, и прочее, прочее.

Вариантов два - или автор как раз их и использовал (но скромно молчит об этом), либо автору надо вручить медаль героического изобретателя велосипедов.
После прочтения постов про возможность встраивания ЛЮБЫХ плагинов-аддонов - стало понятно, что надо будет детектить еще и эту dll'ку в кач-ве вредной.
P.S. Вообще замечательная тема, не мог пройти мимо. даже потратил минуту на регистрацию (IMG:style_emoticons/default/smile.gif)

P.P.S. А название топика- то какое классное "We do what EA can't.". Я бы сказал, что EA это нафиг не надо просто. впрочем автор видимо себя считает более крутым, чем программисты из EA )))

Ну а теперь мы еще немного подумаем... Желательно - головой...

Реалии жизни таковы: Или мы играем на Инжекте или на Razor'е... Что неудобно.

Медаль можешь вручать. Я не протестую... Только Платиновую или, как минимум, - золотую.

Насчет плагинов и детектинга dll в кач. вредной... Как-бы тебе сказать... Вариантов куча, так как пока рано говорить о возможностях, поэтому ваш сарказм - смешон. Да и как ты будешь детектить dll там, где ее нет?(Это если надо будет начинать войну).

Ну а насчет PPS... В качестве примера вот такой вариант:
Кеширование статики и динамически обновляемая статика во время игры - здесь это можно, у ЕА я как-то этого не нашел. Даже с EditServer в uo.cfg.


--------------------
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
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
Warstone   Да, 10-я ревизия обновила транк (реинтеграция шифр...   12.2.2011, 18:10
Александр 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:42
Designed by Nickostyle