1. Гость, мы просим Вас ознакомиться с Правилами Форума и Отказом от ответственности!

Результаты поиска

  1. JonMagon
  2. JonMagon
    [ATTACH] PWDEV.RU Вики по PW разработке. Большая часть посвящена межсервисным взаимодействиям на пакетном уровне. Общий список пакетов Версии с одинаковой структурой объединяются в блоки с указанием первой версии, начиная с которой структура последующих идентична. [ATTACH] Декларация пакетов / объектов Зависимости между запрашивающим и ответным пакетами. Присутствуют ссылки на структуры вложенных объектов. Адекватное отображение векторов/массивов с предшествующими полями размеров типа CUInt. Версии с одинаковой структурой объединяются в одну, с указанием в заголовке самих версий (или диапазона). [ATTACH] Предупреждение Декларация пакетов построена на основе парсинга структур из отладочной информации сервисов. В редких случаях возможно несовпадение алгоритма сериализации пакета и его описанной декларации (в частном случае — поля с указателями). Если несмотря на верно описанную структуру пакета, при отправке сервер ругается, необходимо вручную проверить алгоритм сериализации в сервисе: GNET::<название пакета>::marshal TODO 1. Парсинг функций сериализации. 2. Декларация пакетов остальных сервисов всех версий (пока gdeliveryd). Благодарности JoLan — хост и домен, пикча котика int 3 — бесконечные консультации Принимаются различные предложения и замечания в этой теме.
    Автор темы: JonMagon, 18 июн 2018, ответов - 0, в разделе: Сообщество
  3. JonMagon
  4. JonMagon
    Страшная вещь, но работает прекрасно. Код лучше не смотреть, так как это полнейшее изнасилование и никаким MVC там и близко не пахло. Во избежание инфаркта. Писался в каком-то бреду в начале 2015-го и непонятно зачем. Полностью работоспособно только на 1.5.1 Установка: 1. Распаковать в mysite/cab 2. Зайти на mysite/cab/installer/index.php Проследовать инструкциями. 3. Логиниться по mysite/cab/login.php 4. Если логин пользователя admin, root или test, то работает также переключение на админку. [IMG] [IMG] [IMG] Из няшного: прекрасный XML редактор, который не подыхает на ходу. Везде стоят затычки типа кика персонажа, если его параметры редактируются. На постоянной основе им пользоваться на свой страх и риск. Пользование оставляю бесплатным абсолютно в любых целях. Код разрешено разбирать на потроха и использовать абсолютно в любых целях. Запрещено переделывать копирайты и название без внесения каких-либо изменений ФУНКЦИОНАЛА. UPD: Если инсталлер выдаёт ошибку подключения к API, то перейти по ссылке вручную и, если там кракозябры, изменить кодировку api.php либо в самом installer.php изменить 57 строчку на $api = strpos(file_get_contents($_POST['apiaddr']), "API"); Поливание говном свободное, я в любом случае ничего не буду изменять.
    Автор темы: JonMagon, 24 фев 2018, ответов - 16, в разделе: PW Разработки
  5. JonMagon
  6. JonMagon
  7. JonMagon
    Как это обычно бывает. Один расказал другому, тот расказал ещё кому-то, в итоге на каком-то шаге появился интересный человек, который бегает по всем серверам и устраивает такую, кхм, "атаку". Суть бага: пакет GetSavedMsg (0xD9) из gdeliveryd можно вызывать хоть сотню раз в секунду через OOG, при этом каждый раз он шлёт 0xD8 в gamedbd и пересылает обратно ответ клиенту, при правильном подборе условий (кол-во сохранённых сообщений в тет-а-тет и скорость отправки пакетов) это заставляет сервер генерировать такие объёмы трафика, что он досит сам себя. Решение — заглушить обработчик пакета GetSavedMsg. Побочный эффект — нельзя будет получить историю беседы тет-а-тет (кто-то этим пользуется?). 1. Открываем gdeliveryd в IDA 2. Переходим в функцию GNET::GetSavedMsg::Process [IMG] [IMG] [IMG] 3. Заменяем push ebp на retn [IMG] Меняем первый байт на C3 [IMG] [IMG] 4. Сохраняем изменения [IMG] [IMG] 5. Загружаем на сервер
    Автор темы: JonMagon, 11 июл 2016, ответов - 3, в разделе: PW Фиксы
  8. JonMagon
  9. JonMagon
  10. JonMagon
  11. JonMagon
    DomainDataClientEditor — редактор клиентского файла domain.data [ATTACH] Зачем? Клиентский domain.data нужен для правильного отображения названий территорий, их границ, и времени начала ТВ. Требования dotNet Framework 4.5 Возможности Переименование территорий Изменение уровня и стоимости территории Редактирование время старта ТВ Экспорт из клиентского domain.data в серверный domain.sev Что отсутствует? Редактирование и отображение границ территорий (трата времени на никому ненужную функцию) [ATTACH] byte magic[4]; int count; struct { wchar_t name[16]; int id; int level; int money; struct { int x; int y; }clanicon[1]<optimize=false>; int pointscount; struct { int x; int y; }point[pointscount]<optimize=false>; int trianglescount; struct { int id1; int id2; int id3; }triangle[trianglescount]<optimize=false>; int neighbourscount; struct { int id; }neighbour[neighbourscount]<optimize=false>; }zone[count]<optimize=false>; int twcount; struct { int day; int hour; int minute; }tw[twcount]<optimize=false>; int maxbattles;
    Автор темы: JonMagon, 29 авг 2015, ответов - 22, в разделе: PW Разработки
  12. JonMagon
  13. JonMagon
    Участники: 1) deadraky, Гоша Контакты: [почищено] 2) fаrmach Контакты: [почищено] Суть претензии: Как-то deadraky попросил меня написать простую панель для ГМов, что, естественно, я как обычно сделал бесплатно (facepalm), но договорились, что никому он это давать не будет и все были рады [IMG] До недавнего времени (https://vk.com/extravagantpwru?w=wall-87746429_735) — какой-то фармач купил его (ну, может это и не его вина). [IMG] А вдруг это я придумал, и не было никаких панелей и вообще продал совсем другой тип? Окей, приступим. Благо, гугл смилостивился и сохранил кеш страниц форума (http://webcache.googleusercontent.com/search?q=cache:iDoxYcXq3eEJ:http://forumextravagant-pw.ru/index.php?threads/%D0%A1%D0%BE%D1%81%D1%82%D0%B0%D0%B2-%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D0%B8-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0.148/+deadraky extravagant pw&oe=utf-8&channel=suggest&hl=ru&as_q&spell=1&&ct=clnk). Внезапно, я даже "Системный администратор". [IMG] И, что не удивительно, ссылка на панель осталась прежней — http://extravagant-pw.ru/167a5c15c8bfbf84b7939597cdef16eb/ [IMG] И, благо, никто не потер копирайты. [IMG] Вот такие пироги с котятами. UPD: сейвнул в вебархив https://web.archive.org/web/20150815185126/http://extravagant-pw.ru/167a5c15c8bfbf84b7939597cdef16eb/
    Автор темы: JonMagon, 15 авг 2015, ответов - 6, в разделе: Сообщество
  14. JonMagon
  15. JonMagon
  16. JonMagon
  17. JonMagon
    Раз уж пошла такая тема... В 1.5.2 китайцы изменили опкоды, структуру пакетов и т.д. и т.п. Наша цель - сделать скриншот, где мы посреди 1.5.2 стоим. В glinkd/gamesys.conf везде, где встретится 10501, меняем на 10502 Далее надо починить вывод нпсов в округе, а то никто не поверит. Бредем в IDA в ядро по функции S2C::CMD::Make<S2C::INFO::npc_info>::From<packet_raw_wrapper>(packet_raw_wrapper *const wrapper, gnpc *pObject) Суть: "удвоить" выбранное. Т.к. китайцы слепили в очередной раз фигню: первый раз ID указывает на облик, второй раз на его функции (моб, проститутка и т.д.) [ATTACH] Запоминанием, куда сувать будем — 0x080724E3 Бредем по elementdataman::save_data(elementdataman *const this, const char *pathname), смотрим, что она няш мяш, её и будем затирать, все равно нигде не вызывается. [ATTACH] Записываем адрес, где push ebp — 0x0829B974 Переводим jmp 829B974h с учетом позиции, куда будем сувать в опкод E9 8C 94 22 00 Ой вей, пять байт, как раз весь call затрется. Бредем обратно в S2C::CMD::Make<S2C::INFO::npc_info>::From<packet_raw_wrapper>(packet_raw_wrapper *const wrapper, gnpc *pObject) И лепим прыжок вместо вызова [ATTACH] Терь переводим в опкод, учитывая, что будем сувать по 0x0829B974 call 0806922Eh add esp, 4 push eax call 0806922Eh jmp 080724E8h Получаем E8 B5 D8 DC FF 83 C4 04 50 E8 AC D8 DC FF E9 61 6B DD FF И суем это вместо данных той функции, оставшиеся 3 байта от инструкции затираем 0x90, чтобы красиво было. [ATTACH] Загружаем на сервер и заходим через 1.5.2 клиент и ловим ошибку, т.к. опкоды кривые (ну а что? один пакет пофиксили и все? да хрен там, кому надо правьте хештейбл опкодов в глинкд) [ATTACH] Клацаем Esc, становимся няшнее и делаем скриншот [ATTACH]
    Автор темы: JonMagon, 14 мар 2015, ответов - 21, в разделе: Оффтоп
  18. JonMagon
    При отправке в горн выставляется определенный набор смайлов, что мне вообще не понравилось. После изменений ниже в горн-чат будут отправляться смайлы, которые сейчас напялены на персе, но важно учитывать, что при выборе смайлов для отправки в горн вместо них все равно будут отображаться те, что задуманы китайцами (какие-то рыбы, или что это?). Открываем ядро и бредем до gplayer_imp::SendFarCryChat Там смотрим, что у нас какие-то сравнения и прыжки идут. Кому они нахрен нужны? Стираем их и захватываем со всем этим всовывание 6-го набора смайлов в emote_id [ATTACH] Открываем gs hex редактором, находим 80 7D FF 01 75 0F 8B 45 08 0F BE 80 7F 0C 00 00 89 45 EC EB 07 C7 45 EC 06 00 00 00 И заменяем на 90 90 90 90 90 90 8B 45 08 0F BE 80 7F 0C 00 00 89 45 EC 90 90 90 90 90 90 90 90 90 [ATTACH] Загружаем обратно на сервер, запускаем и прыгаем як не москали до потолка. [ATTACH]
    Автор темы: JonMagon, 10 мар 2015, ответов - 8, в разделе: PW Документация
  19. JonMagon
    Позволяет собирать и читать пакеты на PHP. Слеплен на скорую руку. Приветствуются предложения. Структура: [ATTACH] Пример получения ника перса по его ID (в пакете есть и другая инфа, чтобы было, смотреть структуру GRoleBase), чтобы понять работу класса: struct __cppobj __attribute__((aligned(2))) GRoleBase : Rpc::Data { char version; unsigned int id; Octets name; int race; int cls; unsigned __int8 gender; Octets custom_data; Octets config_data; unsigned int custom_stamp; unsigned __int8 status; int delete_time; int create_time; int lastlogin_time; GRoleForbidVector forbid; Octets help_states; unsigned int spouse; unsigned int userid; Octets cross_data; unsigned __int8 reserved2; unsigned __int8 reserved3; unsigned __int8 reserved4; }; <? include("packet_class.php"); $GetRoleBase = new WritePacket(); $GetRoleBase -> WriteUInt32(-1); // always $GetRoleBase -> WriteUInt32(1024); // userid $GetRoleBase -> Pack(0xBC5); if (!$GetRoleBase -> Send("localhost", 29400)) // send to gamedbd return; $GetRoleBase_Re = new ReadPacket($GetRoleBase); // reading packet from stream $packetinfo = $GetRoleBase_Re -> ReadPacketInfo(); // read opcode and length $GetRoleBase_Re -> ReadUInt32(); // always $GetRoleBase_Re -> ReadUInt32(); // retcode $GetRoleBase_Re -> ReadUByte(); // version $GetRoleBase_Re -> ReadUInt32(); // id echo $GetRoleBase_Re -> ReadUString(); // show rolename ?>
    Автор темы: JonMagon, 6 мар 2015, ответов - 9, в разделе: PW Web
  20. JonMagon