Теория читерства в ПЗ: часть - 2

  • Текст: A-- R A++
  • Добавить в избранное
  • Оценить статью
  • 0

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

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

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

CAHEK7

25.01.2004

04:22


Опубликовал:  Eyr  /   13.04.2013  /   Суббота

Прочитали 561 раз(а).
Понравилось? Поделись новостью с друзьями!

Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
Регистрация | Вход

Наш опрос

Оцените мой сайт

Календарь

«  Апрель 2013  »
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
2930

Мини чат

Статистика


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

Архив записей

Пустой блок


Что-то будет...

Пустой блок


Что-то будет...

Пустой блок


Что-то будет...