Воскресенье, 12.05.2024, 05:52


Главная
Регистрация
Вход
Сайт Великого Легиона ПЗ Приветствую Вас Незнакомец | RSS  
Меню

Категории раздела
Статьи про ПЗ [10]

Мини-чат
200

Наш опрос
Оцените мой сайт
Всего ответов: 173

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Форма входа

Главная » Статьи » Статьи про ПЗ

Еще одна Теория Читерства
Часть 1. Введение в технику читерства. 



В игре Проклятые Земли существует 3 основные техники читерства. 

1) скриптовый язык 

2) игровые ресурсы (база данных по сетевой игре) 

3) прямой доступ к значениям памяти (Artmoney, Magic Trainer Creator) 

I. Скриптовый язык. 

Данная техника позволяет без специальных знаний создавать предметы с необычными характеристиками, добавлять деньги, опыт и характеристики персу, перемещаться (и перемещать других) по карте, воспроизводить различную анимацию персонажей, управлять монстрами и персонажами других игроков, создавать и использовать заклинания и наносить урон, даже если персонаж заблокирован (парализован). При неплохом знании внутренних имен можно превращаться или вызывать всяких монстров. Также с помощью скриптов можно делать различные спецэффекты. 

Единственный недостаток - это невозможность применять скрипты, если игрок не создал сервер, а подключился к чужому. В модмейкерстве скрипты применяются в .mob файлах для описания событий на карте. 

II. Игровые ресурсы (база). 

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

База - это совокупность текстовых таблиц с параметрами игры. Она позволяет изменять практически любые значения игровых объектов. В умелых руках это гибкий читерский инструмент. 

В основном база используется для изменения значений урона, защиты и цены предметов, эффекта и длительности заклов и создания сильных персов (бестелость, неуязвимость, скорость, левитация, характеристики, телосложение, радиус зрения...) 

III. Artmoney. 

Чаще всего artmoney применяется, как и база, но для использования всех преимуществ artmoney перед базой желательно неплохо знать компьютер (хотя, если идти уже по проложенной дорожке, то это знание вовсе необязательно). 

Но кроме изменения параметров игровых объектов, artmoney позволяет писать длинные имена со спецсимволами и превращаться в монстров. 

Все это подробно описано в руководстве Noone. Часть 2. Особенности и ошибки. 



Про стандартные способы читерства сказано уже довольно много, но тут я буду морочить голову низкоуровневыми аспектами взлома. Затронуть данную тему я решил из-за скорого выхода патча Античитер, который поможет борьбе простых игроков с читерами. Низкоуровневый способ взлома наиболее сложен, но возможности его ограничены только знанием ассемблера и опытом программиста. А ассемблер уже не так популярен как раньше, сейчас даже вирусы пишут на дельфи... 

Для разбора ПЗ нам понадобится IDA Pro, SoftICE и Artmoney. Первые две программки (и инструкцию по установке SoftICE) можно взять с сайта cracklab.ru. Также желательно знать что такое ассемблер и набор команд сопроцессора. Если вас эти слова сильно пугают, то лучше сразу перейти к части 3. 

Поставим задачу по написанию патча против бестелых игроков. Для начала надо решить с какой стороны подходить к раскопкам и куда копать. Проанализируем бестелость: бестелый перс, это такой перс у которого нет тела и по нему нельзя попасть, значит, где-то в коде игры есть проверка на количество (или наличие, например I: Если частей_тела>0 то нанести повреждение; или II: Если часть_тела[i]==существует то нанести повреждение) частей тела и в зависимости от результата нанесение урона. А такое может быть только в процедуре нанесения урона. А при нанесении урона обычному персонажу уменьшается здоровье, поэтому здоровье и будет той ниточкой, которая приведет нас к процедуре урона. Для отладки игру лучше запускать в окне, в стартере в настройках есть соответствующая опция. 

Для поиска здоровья воспользуемся Artmoney и скриптами. Сначала создаем нового перса и выходим на карту. В консоли пишем thingamabob и #hp(getleader()). Появится значение здоровья перса. Т.к. это значение с плавающей точкой, то определить точное значение невозможно, поэтому, свернув игру и запустив Artmoney, надо искать диапазон значений (например, здоровье перса 47.833, искать надо диапазон 47.83 - 47.84). Найдется несколько значений, возвращаемся в игру, бьем себя кабаном, жмем паузу и опять узнаем здоровье в консоли, отсеиваем. Когда найдено одно значение, мы записываем его на бумажку (при запущенном отладчике останавливается даже винда) и закрываем Artmoney. Вызываем SoftICE (Ctrl+D) и пишем “addr game” и потом “bpm Наш_Адрес_Здоровья w”, естественно без кавычек, и жмем F5. Потом разворачиваем игру (и пытаемся атаковать кабана, пытаемся, потому что отладчик сильно достает) и записываем на бумажке все адреса, на которых SoftICE останавливался. Обязательно во время игры должны быть нанесены повреждения. После этого опять вызываем SoftICE и пишем “bc *” и “bpm Адрес_Останова1 x”, жмем F5 и смотрим частоту появления отладчика. Если он появляется всегда, даже когда вы ходите или стоите, то значит это не та функция. Надо вызывать отладчик заново и повторять “bc *” “bpm Адрес_ОстановаN” где N это очередной записанный на бумажке адрес. Нужным нам адрес будет вызывать отладчик только во время нанесения удара. Основная функция по расчету урона: 525070 (отладчик будет появляться на адресе 5253B2). Трассировка функции при различных характеристиках персонажа показала, что если тело отсутствует, то происходит прыжок почти на выход из функции. Для обычного урона происходит простое сравнение, но при нанесении магического урона происходит еще и исключение сопроцессора, и тоже выход из функции. Если изменить все эти переходы, то бестелому персонажу будет наноситься урон. Это способ на проверку количества частей тела. Есть еще один способ. В конце главной функции есть еще одна, в которой происходит расчет урона в зависимости от показателя брони для каждой части тела. В этой функции в антибаксе стоит обнуление брони. Это как раз способ на наличие частей тела. Для исправления похожих ошибок (например, с непробиваемой антимагией) действовать надо так: устанавливать точку останова на функцию нанесения урона и трассировать. Если останова вообще не происходит, то надо проверять вызывающие функции. Проще всего это делать не в отладчике, а в дизассемблере (IDA Pro) 

Для написания патча Античит я переделаю патч антибакс, дополнив его фильтрацией обнуления, чтоб не обнулять простую броню. Еще попробую ограничить наносимый урон. Ну и соответственно включу пробивание бестелости. 

А теперь про особенности. При анализе ассемблерного кода и трассировки игры я пришел к выводу, что ПЗ очень не любит "нечисла", специальные битовые значения, которые не могут быть представлены числом. Если броня или защитный закл имеют в показателе защиты "нечисло", то они приобретают удивительные свойства. А если эффект заклинаний усиления или ослабления установит "нечислом", то их можно будет накладывать поверх уже наложенных обычных заклов. 

Практические занятия. 

"~" - это не пимпа, а тильда :) 

После редактирования в Excel''e необходимо сохранять формат файла, а то ексель умеет лихо преобразовывать txt в xls. 

Ну, это общее, а теперь конкретно: 

Про бакс в artmoney. 

Вообще-то знак "-" это не дополнительная фишечка, а принципиально другое значение. Оригинальный бакс выставляется в редакторе памяти значением 7F800000. Для сопроцессора это означает бесконечность. А -1.$ получается, если выставить "нечисло" (FFFFFF00 в примере Noone), специальное значение в сопроцессоре. Для бакса это не имеет принципиального значения, но для заклов и оружия имеет! Например, закл Антимагия со значением "бесконечность" ведет себя вполне нормально (абсолютно защищает от магии), но если выставить значение "нечисло", то будут происходить некоторые странности (закл станет защищать от ЛЮБОГО урона и при этом не отображаться). Атакующие заклы и оружие не могут иметь специальных значений (бесконечность, нечисло). 

Бестелость. 

Параметр Type менять не нужно, а параметр Vitality в этом случае бесполезен. Он служит для другого типа бессмертия и выставляется везде в 0%,1% или -1%. При этом тело существует, но на жизнь не влияет. Патч от бестелости существует для свободного скачивания :) 

Имя в artmoney. 

Т.к. в ПЗ используются Си строки с двоичным нулем на конце, то соответственно имя можно делать любой длины, но не забывать ставить в редакторе памяти завершающий 0.

Категория: Статьи про ПЗ | Добавил: Демон (31.10.2007)
Просмотров: 1476 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск

Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz

  • Copyright MyCorp © 2024Используются технологии uCoz