Читер не тот, кто использует читы, а тот, кто их создает. 

Chupacabr

 

Специально для честных игроков.

Теория читерства в ПЗ.

И немного извращенной практики...

 

Введение.

 

Cheater - в переводе с английского - жулик, обманщик. Читер это игрок, который преступил законы игры. Чит - лазейка, используемая читером для изменения игрового процесса. Если вас пугает данное определение читера, можете дальше не читать, а то вдруг тоже что-нибудь преступите...

Читеры бывают 2х типов: те, которые используют чужие читы и те, которые сами их создают. К первому типу относятся ленивые игроки, не желающие напрягаться при прохождении игры. Они бегут на ближайший сайт и скачивают оттуда тренер или список чит-кодов (в основном godmode и giveallweapon). Немного поиздевавшись над игрой, такие читеры быстро теряют интерес, но зато они "прошли" очередную игру.

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

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

Читеров второго типа очень мало. Это наиболее трудный путь читерства, но меньше всего вредит игре. Таким читерам интересен сам процесс модификации игры. В этом случае игра не утратит своей привлекательности, а возможно даже станет еще заманчивей. По этому пути обычно идут игроки со стажем, досконально изучившие обычную игру. Часто встречаются и читеры 1-го типа, которые смогли перерасти простое стремление выделиться среди игроков.

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

Впоследствии возможно перерождение читеров 2-го типа в модмейкеров.

Вообще любые читеры - это санитары игры. Они отбирают только самых преданных игре людей. А если таких было мало, значит, игра не имеет своей изюминки, сливается с серой массой однотипных игр...

Читеров можно ненавидеть, бояться или проклинать, но без них нельзя обойтись.

 

 

 

 

 

 

 

Часть 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)

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

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

 

Часть 3.

Комментарии к практическим занятиям от Noone.

 

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

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

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

 

Про бакс в artmoney.

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

 

Бестелость.

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

 

Имя в artmoney.

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

 

CAHEK7

25.01.2004

04:22

Используются технологии uCoz