20120229

Wallhack - теория.

Где-то через час выложу урок по созданию wallhack'а - метода, позволяющего видеть врагов сквозь стены. Очень забавная штука, рекомендую посмотреть!

Видео я записал, руководствуясь одной очень старой статьёй от cppdude, демонстрируемый метод подходит для любой игры, написаной на движке Quake 2\3, возможно, и 4 тоже. Таких игр - много, так что будет на чём попрактиковаться.

Штука тут состоит в том, что есть две большие библиотеки для отрисовки графики, которые между собой конкурируют - [OpenGL] и [Direct3D]. Последняя входит в набор DirectX, который суть отвечает за графику, звук и много чего ещё в играх.

Обе технологии служат одной и той же задаче, но по-разному реализованы, так что и способы взлома для них различаются. Мы сначала попрактикуемся на OpenGL, а затем перейдём к Direct3D, потому что она более популярна сейчас.

Суть большинства воллхаков состоит в двух техниках:

1. Делаем стены прозрачными, чтобы сквозь них можно было видеть.
2. Делаем нужные вещи (модельки врагов, например) видимыми сквозь всё остальное.

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

Вклинившись в эту функцию, мы, по сути, её перехватываем (по-хорошему это называется hook, но очень похоже на обычную инъекцию кода), а затем заставляем работать так, как нам нужно.

В первом случае мы заставляем рисоваться стены без текстур, вызывая специальную OpenGL-функцию, задающую режим отрисовки.

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

Что за буфер такой, да? Всё просто. Есть три оси - верх\низ, право\лево и вперёд (от нас) \ назад (к нам). Последнюю ось можно представить как "глубже в экран - ближе к нам" - вот это вот и есть буфер глубины. Он показывает, должны ли мы видеть некоторый объект в данный момент, или мы до него ещё не добежали. Или он за стеной, например. Говорим - мы всегда должны видеть этот объект (модель врага) - и он будет рисоваться всегда, не взирая на расстояние и препятствия.

Такая вот хитрая штука. Как увидите всё это на примере - быстро поймёте.

Комментариев нет:

Отправить комментарий

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