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

        
Группа: Модераторы Наличность: 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. Тесты совместимости с другими сопутствующими программами не проводились. Механизм проверки сервера на работу с UOExtUOExt проверяет сервер на поддержку 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.
|
|
|
|
|
  |
Ответов
StaticZ |
15.4.2011, 20:47
|

        
Разработчик проекта "Квинтэссенция"
Сообщений: 2.155
Регистрация: 15.6.2009 Группа: Пользователи Наличность: 0 Из: РФ, Москва
Пользователь №: 11.948

|
Еще один шажок на пути к революции остался позади... Спасибо за упорство и труды, главное не бросай начатое! (IMG: style_emoticons/default/wink.gif) За державу правда обидно, такая нелюбовь к русскому, что даже готов с словариком мучится переводить на буржуйский? Чето я уже немного отстал от этой темы, летом буду наверствовать... попробую чтонибудь путное через UOExt намутить и опробовать в полевых условиях... Кстати уже есть подвиги с рануошным модулем и енкриптом и вообще кто-то этим занимается? а то могу помочь как время появиться )
--------------------
RP сервер UO: Quintessence, а также ПО: EssenceUCS, EssenceUDK, CentrEd+, Fiddler+ и др.Game isn't a dream, it is the reality, reality which is coming while we dream...
|
|
|
|
Warstone |
15.4.2011, 23:31
|

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

|
Цитата(StaticZ @ 15.4.2011, 21:47)  Еще один шажок на пути к революции остался позади... Спасибо за упорство и труды, главное не бросай начатое! (IMG: style_emoticons/default/wink.gif) За державу правда обидно, такая нелюбовь к русскому, что даже готов с словариком мучится переводить на буржуйский? Чето я уже немного отстал от этой темы, летом буду наверствовать... попробую чтонибудь путное через UOExt намутить и опробовать в полевых условиях... Кстати уже есть подвиги с рануошным модулем и енкриптом и вообще кто-то этим занимается? а то могу помочь как время появиться ) Ну... С Английским у меня проблем нету (или я о них не знаю), а модуль GPL, значить может быть и RunUO'шники с RunUO.com подтянуццо. РанУОшный модуль в зачаточном состоянии и пока на холде, так как не до него. Энкрипт работает. Автодетект клиента (шифрованный или не шифрованный) и хардкодед конфиг сервера (может быть как шифрованный так и не шифрованный). То есть можно не шифрованным клиентом подключаться к шифрованному серверу и после прохождения прокси протокол будет шифроваться. Всем этим занимаюсь я. Больше нету никого. Цитата(wap @ 15.4.2011, 23:07)  Я вообще по-русски в программно-технических постах Warstone с трудом что-то понимаю, а тут еще на английском. (IMG: style_emoticons/default/smile.gif) Спецом для тебя код с камментами одного куска из UOLoader'а: Код Function InjectDll(Process: dword; ModulePath, InitProcedureName: PAnsiChar): Boolean; const InjectThreadSize = 568; var Memory:pointer; Code, ICode: dword; BytesWritten: dword; ThreadId: dword; hThread: dword; hKernel32: dword; pInject: Pointer; begin // Here is codegenerate for CreateRemoteThread procedure // Main idea is: // hLibrary := LoadLibraryA('<ProtocolExtender.dll>'); // @pProcedure := GetProcAddress(hLibrary, 'CoreInitialize'); // pProcedure(); // stdcall, no params. // ExitThread(0); // Asm code: // PUSH <PointerToDllName> ; 68 GG GG GG GG // CALL <PointerToLoadLibraryA> ; 15 FF HH HH HH HH; EAX = hLibrary // PUSH <PointerToCoreInitialize>; 68 II II II II // PUSH EAX ; 50 // CALL <PointerToGetProcAddress>; 15 FF JJ JJ JJ JJ; EAX = @pProcedure // CALL EAX ; D0 FF // PUSH 0 ; 00 6A // CALL <PointerToExitThread> ; 15 FF KK KK KK KK // // Addr 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F // 0000: 68 GG GG GG GG 15 FF HH HH HH HH 68 II II II II // 0010: 50 15 FF JJ JJ JJ JJ FF D0 6A 00 15 FF KK KK KK // 0020: KK // Code ends here. Data begins here. // 0020: hh hh hh hh jj jj jj jj kk kk kk kk // 002D - 0132 : DllName: Array [0..MAX_PATH] of Byte; Addr of GG GG GG GG // 0133 - 0237 : DllInitProc: Array [0..MAX_PATH] of Byte; Addr of II II II II // // Needed memory: 568 bytes.
Result := False; Memory := VirtualAllocEx(Process, nil, InjectThreadSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE); if Memory = nil then Exit;
Code := dword(Memory);
pInject := GetMemory(InjectThreadSize); ICode := DWord(pInject); hKernel32 := GetModuleHandle('kernel32.dll');
PByte(pInject)^ := $68; // PUSH OpCode PDWord(ICode + $01)^ := Code + $2D; // PUSH Argument PWord(ICode + $05)^ := $15FF; // Call OpCode (LoadLibraryA) PDWord(ICode + $07)^ := Code + $21; // Call Argument PByte(ICode + $0B)^ := $68; // PUSH OpCode PDWord(ICode + $0C)^ := Code + $0133; // PUSH Argument PByte(ICode + $10)^ := $50; // PUSH EAX OpCode PWord(ICode + $11)^ := $15FF; // Call OpCode (GetProcAddr) PDWord(ICode + $13)^ := Code + $25; // Call Argument PWord(ICode + $17)^ := $D0FF; // CALL EAX OpCode PWord(ICode + $19)^ := $006A; // PUSH 0 OpCode PWord(ICode + $1B)^ := $15FF; // Call OpCode (ExitThread) PDWord(ICode + $1D)^ := Code + $29; // Call Argument // Code generation ends. Procedure pointers begin. PDWord(ICode + $21)^ := DWord(GetProcAddress(hKernel32, 'LoadLibraryA')); PDWord(ICode + $25)^ := DWord(GetProcAddress(hKernel32, 'GetProcAddress')); PDWord(ICode + $29)^ := DWord(GetProcAddress(hKernel32, 'ExitThread')); // Procedure pointers end. String constants begin. lstrcpyA(PAnsiChar(ICode + $2D), ModulePath); lstrcpyA(PAnsiChar(ICode + $0133), InitProcedureName);
//записать машинный код по зарезервированному адресу WriteProcessMemory(Process, Memory, pInject, InjectThreadSize, BytesWritten); FreeMemory(pInject); //выполнить машинный код hThread := CreateRemoteThread(Process, nil, 0, Memory, nil, 0, ThreadId);
if hThread = 0 then Exit; WaitForSingleObject(hThread, INFINITE); CloseHandle(hThread); Result := True; end; Если коротко, то тут идет кодогенерация и патчинг оффсетов для машинных кодов на лету. Идея честно потырена с wasm. Сделаны фиксы так как тот код в некоторых случаях может вызывать дедлоки и вообще себя нехорошо вести.
--------------------
Do. Or do not. There is no Try! © Master Joda, Dagobah, Star Wars: Episode V.
|
|
|
|
Сообщений в этой теме
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 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 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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|