Jump to content

V3ct0r

Administrators
  • Content Count

    2,887
  • Joined

  • Last visited

  • Days Won

    519

Everything posted by V3ct0r

  1. Какая версия сервера?
  2. @Dimitrov, @zzzritdzzz friends there is no password. Check .htpasswd file. w154rd:aaQw4fqBmD3FI w154rd is login and aaQw4fqBmD3FI is password @Dimitrov it is not necessary to quote the entire post, thank you
  3. Sure. You can check if character have GM access at the beginning of the function
  4. Как добавить к крыльям эффект полета Привет! В данной статье я расскажу как сделать, чтобы персонаж летал на обычных крыльях. Вам понадобится: Отладчик OllyDBG; Базовые знания ассемблера; Умение переводить числа из десятичной системы счисления в шестнадцатиричную и обратно; Терпение и внимательность. Для примера, заставим нашего персонажа летать на Ангельских крыльях (ID: 937) 0. Все модификации производятся на стороне клиента. Я буду работать с Game.exe из английского клиента TOP версии 1.38, поэтому, скорее всего, у Вас будут отличаться адреса инструкций; 1. Запустите клиент, откройте OllyDBG и присоединитесь к процессу Game.exe (команда File -> Attach -> В списке процессов выбрать Game.exe -> Attach); 2. Далее перейдите в модуль Game.exe (команда View -> Executable Modules или ALT + E -> В списке модулей выбрать Game.exe); 3. Выполните анализ кода (контекстное меню -> Analysis -> Analyse code или CTRL + A); 4. Найдите функцию, которая отвечает за обновление позы персонажа при перемещении крыльев в 1-ю ячейку инвентаря. Например, с помощью команды контекстное меню -> Search for -> Command или CTRL + F. Затем в окошко поиска вводим: CMP EAX, 80 В моем Game.exe она выглядит следующим образом: 004A34B0 /$ 8B81 0C0D0000 MOV EAX,DWORD PTR DS:[ECX+D0C] 004A34B6 |. 3D 80000000 CMP EAX,80 004A34BB |. 7C 11 JL SHORT 004A34CE 004A34BD |. 3D 8C000000 CMP EAX,8C 004A34C2 |. 7F 0A JG SHORT 004A34CE 004A34C4 |. 3D 87000000 CMP EAX,87 004A34C9 |. 74 03 JE SHORT 004A34CE 004A34CB |. B0 01 MOV AL,1 004A34CD |. C3 RETN 004A34CE |> 32C0 XOR AL,AL 004A34D0 \. C3 RETN Если перевести эту функцию в C-код, то она будет выглядеть примерно так: // Проверка на крылья int CheckWings(int id) { if (id >= 128 && id <= 140 && id != 135) { return 1; // В 1-й ячейке инвентаря крылья перерожденя } return 0; // 1-я ячейка пуста или в ней лежит какой-то другой предмет } Наша с Вами задача заключается в изменении этой функции, а именно условия, где сравнивается ID предмета из 1-ой ячейки инвентаря с ID крыльев. Давайте добавим в него нашли крылья: if (id >= 128 && id <= 140 && id != 135 || id == 937) Тогда наша функция на ассемблере будет выглядеть вот так: ; RET_0 - адрес инструкции XOR AL, AL ; RET_1 - адрес инструкции MOV AL, 1 MOV EAX,DWORD PTR DS:[ECX+D0C] CMP EAX, 0x03A9 ; 0x03A9 = 937 - ID Ангельских крыльев JE SHORT RET_1 ; Прыжок на return 1, если ID == 937 CMP EAX,80 JL SHORT RET_0 ; Прыжок на return 0 CMP EAX,8C JG SHORT RET_0 ; Прыжок на return 0 CMP EAX,87 JE SHORT RET_0 ; Прыжок на return 0 MOV AL,1 ; return 1 RETN XOR AL,AL ; return 0 RETN Здесь мы сталкиваемся с проблемой: новая функция занимает больше байт, чем оригинальная! Что делать? В конце модуля есть так называемый Code Cave - область, заполненная нулевыми байтами. Именно туда мы и поместим нашу новую функцию. Найти эту область очень просто: крутите ползунок в окне кода до тех пор, пока не увидите инструкции вида: DB 00 DB 00 DB 00 DB 00 Итак, помещаем нашу функцию в Code Cave, я поместил ее по адресу 0x005FF850: Обратите внимание, что адреса инструкций RET_0 и RET_1 у меня получились 0x005FF875 и 0x005FF872 соответственно. Не забудьте их исправить в функции. Теперь нужно сделать так, чтобы вместо оригинальной функции вызывалась наша, модифицированная. Есть 2 способа: первый заключается в том, что мы изменяем адрес функции во всех других функциях, которые ее вызывают. Суть второго способа состоит в том, что в начале оригинальной функции мы пишем код, который будет перенаправлять вызов на новую модифицированную функцию. Давайте воспользуемся вторым способом. Идем на начало оригинальной функции (в данном гайде это 0x004A34B0) и пишем следующий код, заменяя оригинальный: jmp <адрес модифицированной функции> retn У меня получилось вот так: Протестируем наши изменения. Зайдите в игру и поместите Ангельские крылья в 1-й слот инвентаря. Персонаж должен взлететь: 5. Как видно из скриншота, значок GM провалился в персонажа, давайте это исправим. Найдите следующий код, например, продолжая искать инструкцию CMP EAX, 80: 004A3F7F . 8B86 0C0D0000 MOV EAX,DWORD PTR DS:[ESI+D0C] 004A3F85 . 3D 80000000 CMP EAX,80 004A3F8A . 7C 16 JL SHORT 004A3FA2 004A3F8C . 3D 8C000000 CMP EAX,8C 004A3F91 . 7F 0F JG SHORT 004A3FA2 004A3F93 . 3D 87000000 CMP EAX,87 004A3F98 . 74 08 JE SHORT 004A3FA2 004A3F9A . D905 30936000 FLD DWORD PTR DS:[609330] 004A3FA0 . EB 06 JMP SHORT 004A3FA8 004A3FA2 > D905 70136000 FLD DWORD PTR DS:[601370] На скриншоте ниже в оранжевой рамке я выделил "ориентиры" - вызовы функций SetYaw() и UpdatePitchYawRoll() из библиотеки MindPower: Как видите, здесь точно такое же условие, как и в прошлой функции, и нам надо его изменить. Обратите внимание на адреса 0x004A3FA2 и 0x004A3F9A: 0x004A3F9A - код, который выполнится при соблюдении условия (в 1-й ячейке инвентаря находятся крылья); 0x004A3FA2 - код, который выполнится, если условие не соблюдается (в 1-й ячейке инвентаря нет крыльев). Так как новое условие будет занимать больше места, чем оригинальное, идем в Code Cave и записываем его. Я запишу по адресу 0x005FF87A: Далее необходимо задействовать новый код. Идем по адресу 0x004A3F85 и выполняем прыжок на новое условие: jmp <адрес нового условия> ; в данном гайде - 0x005FF87A Идем в игру и убеждаемся, что значок GM встал на свое место: 6. Если вы прикажете персонажу перемещаться, то увидите, что он будет бегать, а не летать. Исправим и это. Найдите код, примерно похожий на этот: 004A44FE |. 0F944424 1C SETE BYTE PTR SS:[ESP+1C] 004A4503 |. 3D 80000000 CMP EAX,80 004A4508 |. 7C 46 JL SHORT 004A4550 004A450A |. 3D 8C000000 CMP EAX,8C 004A450F |. 7F 3F JG SHORT 004A4550 004A4511 |. 3D 87000000 CMP EAX,87 004A4516 |. 74 38 JE SHORT 004A4550 004A4518 |. 83FF 01 CMP EDI,1 004A451B |. 74 05 JE SHORT 004A4522 004A451D |. 83FF 04 CMP EDI,4 004A4520 |. 75 07 JNZ SHORT 004A4529 004A4522 |> BF 2A000000 MOV EDI,2A 004A4527 |. EB 27 JMP SHORT 004A4550 004A4529 |> 83FF 05 CMP EDI,5 004A452C |. 74 05 JE SHORT 004A4533 004A452E |. 83FF 06 CMP EDI,6 004A4531 |. 75 07 JNZ SHORT 004A453A 004A4533 |> BF 2B000000 MOV EDI,2B 004A4538 |. EB 16 JMP SHORT 004A4550 004A453A |> 83FF 02 CMP EDI,2 004A453D |. 75 07 JNZ SHORT 004A4546 004A453F |. BF 2C000000 MOV EDI,2C 004A4544 |. EB 0A JMP SHORT 004A4550 004A4546 |> 83FF 10 CMP EDI,10 004A4549 |. 75 05 JNZ SHORT 004A4550 004A454B |. BF 2D000000 MOV EDI,2D 004A4550 |> 83F9 06 CMP ECX,6 На скриншоте я опять оставил "ориентиры": И опять то же самое условие, которое нужно изменить. В принципе, процесс редактирования условия схож с предыдущим пунктом, только у нас другие адреса для положительного и отрицательного исхода: 0x004A4518 - код, который выполнится при соблюдении условия (в 1-й ячейке инвентаря находятся крылья); 0x004A4550 - код, который выполнится, если условие не соблюдается (в 1-й ячейке инвентаря нет крыльев). Точно так же идем в Code Cave и пишем новое условие. Я напишу по адресу 0x005FF8AD: Заставляем программу использовать новый код, вместо старого. Идем по адресу 0x004A4503 и делаем прыжок: jmp <адрес нового условия> ; в данном гайде - 0x005FF8AD Идем в игру и тестируем: Ура! Теперь персонаж летает на Ангельских крыльях! 7. Сохраните проделанные изменения. В контекстном меню выберите команду Copy to executable -> All modifications. На вопрос "Copy selection to executable file?" отвечайте "Copy all". Появится окошко, просто закрывайте его крестиком. Тут программа задаст новый вопрос типа: "Файл Game.exe был изменен! Сохранить изменения?", отвечаете "Да" и в диалоге выбора файла, вводите название для измененного Game.exe. 8. На этом редактирование Game.exe завершено! Зайдите в игру и убедитесь что все работает как задумано. В результате мы с Вами заставили персонажей летать на Ангельских крыльях с ID 937!
  5. @NMS3RR в итоге она установилась? Работает?
  6. @NMS3RR Обрати внимание на картинку в начале поста
  7. GameServer.exe version 1.36 (2040 KB) ItemInfo - 0x0009105C SkillEff - 0x0009137B
  8. Converter .LGO <-> .OBJ Author: @insider With these PHP scripts you can convert .lgo models to .obj and back. Download: lgo.rar objlgo.rar
  9. Конвертер .LGO <-> .OBJ Автор: @insider Данные скрипты предназначены для преобразования формата моделей .lgo в формат .obj и обратно. Скачать: lgo.rar objlgo.rar
  10. @Sultan is a good guy, I think you misunderstood him
  11. Официальные клиенты Особая благодарность пользователю alex1999! В данной теме собираются официальные клиенты пиратии. Если у Вас имеются таковые, то присылайте нам ссылку на них и мы опубликуем её здесь! Русский официальный сервер (Пиратия) Piratia_Setup.exe - установщик клиента Пиратии версии 1.35, тот самый с знаменитого диска игромании. Piratia_Setup.exe - установщик клиента Пиратии версии 1.38.1 (спасибо ϟAlсаtrаzϟ). Piratia_Setup.exe - установщик клиента Пиратии версии 1.39 (спасибо Ginetik). Piratia2_Setup.exe - установщик клиента Пиратии версии 2.0+. Последний ехешник от майлов. Пиратия II Online.zip - архив c клиентом Пиратии версии 2.0+ из предыдущего пункта, но еще и с всеми последующими скачиваемыми патчами. Tales of Pirates top2_setup_1.0.70.exe - установщик клиента Tales of Pirates II. Последний ехешник от IGG. Pirate King Online PKOII.zip - архив с клиентом PKO версии 2.0+. Какой-то страшный архив с пко-клиентом, взят откуда-то из инета. Однако полностью совместим с гулящими в паблике файлами 2.5, работает фишка с просмотром экипировки другого игрока и т.д., чем и ценен. XHDW XHDW_3.0.1_Setup.exe - установщик клиента XHDW версии 3.0+. Сам установщик какой-то битый и не устанавливается до конца привычным способом, однако вскрывается простым 7-зипом, после чего совершенно безвозмездно отдает все свои ресурсы.
  12. Microsoft SQL Server 2014 Express Microsoft SQL Server 2014 Express is a powerful and reliable free data management system that delivers a rich and reliable data store for lightweight Web Sites and desktop applications. Download from official Microsoft website
  13. Microsoft SQL Server 2014 Express Microsoft SQL Server 2014 Express — это бесплатная многофункциональная и надежная система управления данными, которая предоставляет удобное и надежное хранилище данных для упрощенных веб-сайтов и классических приложений. Скачать с официального сайта Microsoft
  14. Монит (база данных) Автор: OnlyMe aka Miracl Арбах, мордо, всё это конечно же хорошо. Но у скольких из вас информация совпадает с оффом? Нет, нет, это не очередная база пиратии. Это ВАША персональная база Скачать Порядок установки: Заливаем на хост; Настраиваем config.php; Заливаем ваши ItemInfo.txt и CharacterInfo.txt в папку: install; Запускаем install/install.php (*пока идёт установка, можно заварить чай); Сносим ItemInfo.txt, CharacterInfo.txt и install.php (либо всю папку install разом); Ругаемся на стиль; Тестируем. Структура файлов: skill.css - стили базы и все font color, там main.js - пара скриптов index.php - основа сайта (там ни чего интересного) function.php - функции (2 основной файл) config.php - конфиг базы _left_menu.php - меню навигации слева _central_menu.php - основа скриптов базы тут (1 основной файл) search/ index.php - форма поиска по предметам indexM.php - форма поиска по мобам(нпсам) install/ install.php - запускает установку базы (после установки - удалите его) img/ (отображение img настраивается в конфиге) itm/ - иконки для предметов *для предметов формат: icon.расширение1 mob/ - иконки(фотки) для монстров *для мобов формат: айдиМоба.расширение2 lang/ (тут хранится весь текст из базы) lang1.php - русский lang2.php - гугло-английский ВНИМАНИЕ! В версии 1.2 из-за мелких различий, в случае если в базе не верно отображается "тип" предмета (type) в файле install/install.php/ все $tol[10] замените на $tol[11]
  15. База данных Автор: @Duduf Требования и инструкция Apache, PHP, PDO, SQLite - как правило, все это доступно на обычном хостинге Содержимое архива распаковать в нужную директорию На папку application/Data поставить права 777 На файл application/Data/piratia.db поставить права 666 В папку application/Data/ загрузить свои iteminfo.txt, CharacterInfo.txt, itemtype.txt, skillinfo.txt Измените application/config.php passkey - пароль для обновления данных debug - поставьте false после того, как убедитесь, что все работает правильно Все работает "из коробки", в архиве файл TGZ, при распаковке на UNIX-машине все права выставляются сразу. Лицензия MIT, бэкдоры отсутствуют Скачать
  16. Работа с .res файлами (2.x версия) Автор: Monsiure aka Ingry Итак, можно думаю приступить, а начнем мы со скачивания ICU. Скачать Благодарности: Спасибо @lyon и @insider за направление на верный путь. Особая благодарность @kLabMouse за исправление неисправностей в декомпилировании, путем редактирования исходников, версия была взята родная 1.3.8.1. Внутри файлов лежит исходник + скомпилированные .exe .Полное сообщение неисправностей, которые он исправил: Теперь можно приступить к объяснению: Компиляция: Создаем папку icu в корне диска C; В папку ICU выгружаем содержимое из папки bin (В нашем скаченном архиве); Далее создаем в папке icu, файл compile.bat; Нажимаем правой кнопкой > изменить; И добавляем туда это: genrb -e UTF-8 -s | ПУТЬ ДО ПАПКИ С ICU | файл который будем компилировать | Пример: genrb -e UTF-8 -s C:/icu en_US.txt При этом нужно файл, который будем компилировать поместить в папку ICU; Сохраняем, запускаем. Декомпиляция: Создаем в нашей папке ICU еще один .bat файл; Называем его decompile; Добавляем туда такие строчки; derb -e UTF-8 -s | ПУТЬ ДО ПАПКИ С ICU | файл который будем декомпилировать | Пример: derb -e UTF-8 -s C:/icu en_US.res При этом нужно файл, который будем декомпилировать поместить в папку ICU; Сохраняем, запускаем. Вопрос: Найдите тут место, где я посмеялся
  17. Обеспечение безопасности игрового сервера Автор: @Duduf В данном гайде мы рассмотрим основные проблемы, связанные с обеспечением безопасности нашего игрового сервера. Основными проблемами в работе игровых серверов являются: Несанкционированный доступ к учетной записи администратора ОС сервера SQL-инъекции через клиент игры SQL-инъекции через веб-обвязки игрового сервера Гайд состоит из следующих разделов: Выбор операционной системы для игрового сервера и базовые настройки его безопасности Обеспечение базовой безопасности SQL-сервера Защита баз данных SQL-сервера от SQL-инъекций Установка и базовые настройки веб-сервера Защита веб-обвязок от SQL-инъекций 1. Выбор операционной системы для игрового сервера и базовые настройки его безопасности В первую очередь, следует понимать, что игровой сервер должен являться отдельной машиной, предназначенной только для обеспечения работы этого самого игрового сервера. В качестве операционной системы необходимо использовать только серверные - Windows Server 2003, Windows Server 2008, никаких XP, Вист и семерок - эти системы априори не предназначены для функционирования в качестве серверов. Высшим пилотажем, в плане обеспечения безопасности, было бы разнесение служб игрового сервера по разным серверам - ПО игры, SQL-сервер, Веб-сервер, но в данном случае мы рассмотрим установку и настройку всего этого добра на одной машине. Почему именно серверная ОС В первую очередь, это повышенная отказоустойчивость, отсутствие ресурсоемких и небезопасных приложений, загружаемых "по умолчанию", полноценное логирование действий пользователей, полноценный трейс ошибок при крахе приложений, более полная, по сравнению с домашними ОС, защита системных файлов и директорий, а также более высокая производительность приложений. К базовым настройкам безопасности ОС относятся: Отключение учетной записи Администратор Установка антивируса с автоматическим обновлением Автоматическое обновление ОС Настройка удаленного доступа по протоколу RDP Установка межсетевого экрана (Брандмауэр, Файрволл) Автоматическое обновление ОС Настраивайте автоматическое обновление таким образом, чтобы обновления скачивались, но не устанавливались. Заведите привычку раз в неделю устанавливать эти самые обновления и после их установки перезагружать машину. Remote Desktop Сколь бы не велико было желание подключить монитор и клавиатуру к серверу, делайте это только в случае сбоя в работе RDP, т.е. если вы не можете подключиться к серверу удаленно. Для включения Remote Desktop откройте Панель управления > Система, выберите вкладку Удаленные сеансы и установите флажок Разрешить удаленное подключение к этому компьютеру. По умолчанию удаленное соединение разрешено только локальным администраторам. Учетную запись Администратор мы отключили, т.о. у нас остается только один локальный администратор. Теперь настроим сам сервер RDP Откройте Панель управления > Администрирование > Настройка служб терминалов. В дереве консоли выберите пункт Подключения. В области сведений щелкните правой кнопкой мыши подключение, которое нужно изменить, и выберите команду Свойства. На вкладке Общие, в разделе Уровень безопасности, выберите метод обеспечения безопасности Высокий. Рекомендую также ознакомиться со следующими ссылками по обеспечению безопасности RDP: http://technet.microsoft.com/ru-ru/library/cc781085(WS.10).aspx http://www.winblog.ru/win2003/1147766806-15021001.html Межсетевой экран Самый простой маршрутизатор, установленный между интернетом и вашим сервером во сто крат эффективнее и производительней любых программных файрволлов. Настройте маршрутизацию портов в своем роутере - 80 (для веб-сервера), 1973 (Gate Server), 3389 (RDP) и 1433 (SQL-сервер). Все пакеты от клиента приходят на порт GateServe'ra, поэтому нет необходимости открывать порты других служб игрового сервера. Ограничьте доступ по IP-адресам для порта 3389 (RDP) и 1433 (SQL-сервер). Желательно, чтобы доступ к этим портам был только из локальной сети. Если вы планируете администрировать сервер удаленно из Интернета и имеете статичный IP-адрес, то можете открыть порты 3389 и 1433 и для него. Добавьте перечисленные порты (80, 1973, 3389, 1433) в исключения в Брандмауэре Windows. В исключениях должны быть именно порты, а не приложения. Ничего другого в исключениях быть не должно. Если в вашем роутере есть возможность автоматической защиты от ARP и других атак, включите их. Если у вас нет роутера или аппаратного Файрволла, то ограничения на порты и службы необходимо установить в Брандмауэре Windows. Итогом наших мероприятий стало то, что даже если злоумышленник получит информацию о логине/пароле к SQL-серверу, воспользоваться им он не сможет, поскольку мы закрыли возможность удаленного подключения к игровому серверу с "неизвестных" машин. Работа игровых подсерверов Не запускайте игровые сервера из-под пользователя, обладающего административными правами. Создайте отдельного пользователя в группе Users (Пользователи), прав этой группы достаточно для работы игрового сервера. В противном случае, если злоумышленник получит доступ в игре к команде &lua, то он автоматически получит доступ к пользователю-администратору сервера, со всеми вытекающими. 2. Настройка SQL-сервера Итак, вы установили SQL-сервер, используя соответствующие гайды и присоединили базы данных игры. Запускаем SQL Server Management Studio. При авторизации выбираем проверку подлинности Windows. В обозревателе объектов открываем вкладку Безопасность > Имена входа, заходим в свойства пользователя sa и отключаем эту учетную запись. Для чего мы его отключаем? Пользователь sa по умолчанию имеет права суперпользователя на вашем SQL-сервере. Также права суперпользователя вы можете получить авторизовавшись на Windows-сервере под учетной записью администратора и авторизовавшись в SQL-сервере используя проверку подлинности Windows. Отключением пользователя sa мы оставляем единственную возможность авторизации в качестве суперпользователя - через Windows-аутентификацию. Теперь у вас не будет соблазна настраивать работу приложений из под пользователя sa (особенно с пустым паролем) Для работы игрового сервера и веб-сервера мы создадим отдельных пользователей, которые будут иметь ограниченные права. Вычищаем из БД дефолтные данные Многие сборки серверов поставляются с базами, в которых уже существуют всякие разные нехорошие записи. К таковым относятся пользователи и схемы самой БД, а также список аккаунтов с ГМ-правами. В данной ситуации лучше использовать базы, поставляемые со сборкой Base Server 2.0, там присутствует только один аккаунт с логином admin и паролем admin. Не забываем поменять хотя бы пароль... Добавляем отдельных пользователей для игрового сервера Нам необходимо создать трех пользователей для баз AccountServer и GameDB с ограниченным набором прав - одного для работы GameServer, второго для работы AccountServer, третьего для веб-обвязки. Откройте папку Безопасность > Имена входа и выберите в контекстном меню Создать имя входа. Создайте пользователя для работы игрового сервера (в моем случае это Gamemaster) Перейдите на страницу Роли сервера и выберите только public Перейдите на страницу Сопоставление пользователей и определите базы данных GameDB с правами db_datawriter, public. Схема по умолчанию - dbo. Данные права определяют, что пользователь может осуществлять выборку (SELECT), изменение (UPDATE), вставку (INSERT) и удаление (DELETE) записей в таблицах базы GameDB. Создайте пользователя под которым будет работать AccountServer (в моем случае это Accountmaster) по аналогии с пользователем Gamemaster. Задайте права на базу AccountServer как db_datawriter, public, на базу GameDB прав давать не надо. Создайте пользователя под которым будет работать веб-обвязка (в моем случае это Webmaster) по аналогии с пользователем Gamemaster. Задайте права на базу AccountServer как db_datawriter, public, а на базу GameDB как db_datareader, public. Не ставьте ни в коем случае прав db_owner или db_securityadmin, а также любую другую роль кроме public, эти права дадут доступ пользователю к системным функциям Базы данных, в т.ч. к ее остановке и уничтожению. 3. Защита объектов базы данных от несанкционированных изменений В первую очередь, следует понимать, что SQL-инъекции возможны в том случае если приложения, работающие с SQL-сервером в должной мере не обрабатывают приходящие от пользователей переменные. В случае если в качестве приложения выступает php-скрипт с открытым кодом, мы можем самостоятельно добавить обработку пользовательских переменных. В случае если в качестве приложения выступает скомпилированное приложение (в нашем случае GateServer, GameServer, GroupServer и AccountServer), возможности по модификации кода у нас отсутствуют. При таком раскладе нам остается контролировать данные другими средствами. Первое - это различные фильтры (FilterServer и др.) и модификации GateServer, второе - защита объектов базы средствами SQL-сервера. Ставим необходимые фильтры. Объекты базы защищаем следующим образом: Заходим в свойства пользователя Gamemaster в базе GameDB Переходим на страницу Защищаемые объекты и жмем кнопку Найти. Выбираем Определенные объекты и жмем ОК Нажимаем Типы объектов, выбираем Таблицы, жмем ОК. Затем Обзор и выбираем таблицу account и жмем ОК и еще раз ОК. Загрузится таблица прав. Напротив Изменение и Удаление отмечаем Запретить. Выберите разрешение Обновление, чтобы активировать кнопку Разрешения на доступ к столбцу. Жмем ее. В открывшемся окне отмечаем Запретить напротив столбца gm Ту же самую процедуру проделываем и для пользователя Webmaster Все, теперь гм-права можно выставить только из под учетной записи администратора, пользователи, из под которых работает веб-обвязка и игровой сервер этих прав не имеют. По аналогии вы можете запрещать доступ на изменение к столбцам и в других таблицах. Например, в character было бы неплохо запретить изменение столбца act_id. Теперь со спокойной душой можно защищать менее значимые объекты базы посредством триггеров и мониторинга базы игроков. Сами триггеры я писать не буду, опишу, что можно защищать: Стат-пойнты. Триггер должен при вставке/изменении записи проверять не выходит ли сумма статов за допустимые значения. Количество HP/SP Наличие невведенных/редких предметов в инвентарях игроков Наличие у игроков фей и экипировки со статами, выходящими за допустимыми значениями 4. Веб-сервер На форуме, как я заметил, существует любовь к различного рода NoName-сборкам Apache + PHP + MySQL + еще хрен знает чего (это я про всякие ксампы и денверы). Наличие доверия к ним крайне сомнительно ввиду, хотябы отсутствия документации к ним, особенно, это касается выставленных параметров "по умолчанию". Грамотным решением была бы установка всех компонент отдельно, скачанных и обновляемых с сайтов ПРОИЗВОДИТЕЛЕЙ (apache.org, php.net, mysql.com) либо использование промышленных сборок типа Zend.Server. Если вы устанавливаете MySQL, не забудьте задать пароль для root-пользователя (по умолчанию он пустой) и создать второго администратора. Не следует запускать приложения из-под пользователя root. Прежде чем устанавливать FTP-сервер, сто раз подумайте, нужен ли он вам, возможно, достаточно открыть доступ к нужным папкам в локальной сети. FTP - сам по себе крайне небезопасный протокол. Если установка FTP-сервера необходима, используйте лучше реализацию SFTP под Windows http://www.coreftp.com/server/ (в качестве клиента используйте WinSCP). 5. Веб-обвязки Ну, что тут говорить, большинство представленных на форуме веб-обвязок представляют собой "жалкое зрелище, душераздирающее зрелище": Принудительное подавление вывода ошибок без должной их обработки (error_reporting(0), ini_set('display_errors',0), волшебный символ @ и пр.) Использование "псевдоконструкторов" классов, которые с версии php 5.3.3 уже не поддерживаются Использование библиотеки ereg, которая не модернизировалась с 4-й версии PHP и в 6-й версии будет вырезана Использование морально устаревшей библиотеки mssql Но это еще цветочки по сравнению с отсутствием типизации данных и недолжной обработкой входящих переменных (что может привести к SQL-инъекциям и XSS-атакам). Я не буду вдаваться в экскурс, как писать безопасные приложения, рекомендую использовать только проверенные скрипты, не пихать на рабочий сайт "новинки" пока не появятся отзывы об их использовании и аудите, каким бы шикарным не был их функционал. При появлении новых версий, обязательно обновляйте их. Примеры инъекций в существующих обвязках Рассмотрю один пример уязвимостей в веб-обвязке (регистрации), но, увы, некоторые другие регистрации и обвязки, представленные на этом сайте, имеют уязвимости. Итак, рега Уязвимый код Строка 21 if ((eregi("[^a-z0-9_-]", $login)) || (eregi("[^a-z0-9_-]", $pass)) ) { eregi - устаревшее расширение, имеющее нульбайтовую уязвимость Строки 36-37 $email = $_POST['email']; do_query("INSERT INTO account_login (name,password,originalPassword,email) VALUES ('$login','$encr_pass','$pass', '$email')","AccountServer"); Переменная email не обрабатывается никак вообще
  18. Сообщение "Map service timeout,will close in %d seconds." находится в GameServer.exe Для 1.38 GameServer.exe эта строка находится в .res-файле под названием GM_MAPRES_CPP_00008.
  19. AreaSet = 0x000989E1 SkillInfo = 0x000985CC SkillEff = 0x00098841 ItemInfo = 0x00098523
  20. @ProTecTion Are you sure? On screenshot we see 'Cindys City'
  21. What errors? I think you should read documentation for Zend. Topic is moved to Questions & Help section, because in Web section we make releases only.
  22. V3ct0r

    LuaSQL (DLL)

    @Xeon, @Wrexor Hello! Do you can write a small guide how to compile it and what functions we can use in server LUA? With examples
  23. Nobody know password. @Dimitrov wants crack it using brute force method
×
×
  • Create New...