Где-то через час выложу урок по созданию wallhack'а - метода, позволяющего видеть врагов сквозь стены. Очень забавная штука, рекомендую посмотреть!
Видео я записал, руководствуясь одной очень старой статьёй от cppdude, демонстрируемый метод подходит для любой игры, написаной на движке Quake 2\3, возможно, и 4 тоже. Таких игр - много, так что будет на чём попрактиковаться.
Штука тут состоит в том, что есть две большие библиотеки для отрисовки графики, которые между собой конкурируют -
[OpenGL] и
[Direct3D]. Последняя входит в набор DirectX, который суть отвечает за графику, звук и много чего ещё в играх.
Обе технологии служат одной и той же задаче, но по-разному реализованы, так что и способы взлома для них различаются. Мы сначала попрактикуемся на OpenGL, а затем перейдём к Direct3D, потому что она более популярна сейчас.
Суть большинства воллхаков состоит в двух техниках:
1. Делаем стены прозрачными, чтобы сквозь них можно было видеть.
2. Делаем нужные вещи (модельки врагов, например) видимыми сквозь всё остальное.
В обоих случаях мы отталкиваемся от функции рисования мира - это такая специальная функция, которая в буквальном смысле рисует всё, что должно быть в данный момент на экране - стены, травку, патроны, врагов, количество здоровья и так далее. Вызывается она в цикле, поэтому нам кажется, что картинка в мониторе двигается - враги бегают, пули летят и вообще красота.
Вклинившись в эту функцию, мы, по сути, её перехватываем (по-хорошему это называется hook, но очень похоже на обычную инъекцию кода), а затем заставляем работать так, как нам нужно.
В первом случае мы заставляем рисоваться стены без текстур, вызывая специальную OpenGL-функцию, задающую режим отрисовки.
Во втором же случае мы должны найти место, когда рисуются модельки врагов (это я покажу в следующих уроках), и изменить для них
буфер глубины.
Что за буфер такой, да? Всё просто. Есть три оси - верх\низ, право\лево и вперёд (от нас) \ назад (к нам). Последнюю ось можно представить как "глубже в экран - ближе к нам" - вот это вот и есть буфер глубины. Он показывает, должны ли мы видеть некоторый объект в данный момент, или мы до него ещё не добежали. Или он за стеной, например. Говорим -
мы всегда должны видеть этот объект (модель врага) - и он будет рисоваться всегда, не взирая на расстояние и препятствия.
Такая вот хитрая штука. Как увидите всё это на примере - быстро поймёте.