А мне TSearch всегда очень нравился, хотя сам я начинал с Cheat-o-Matic и MTC.
Автор, ты подумай как следует над поставленной задачей. ESP - это довольно обширное понятие. Попробуй начать с того, что тебе вдруг понадобилось над каждым персонажем в игре нарисовать, допустим, точку. Что для этого нужно? Нужно две вещи - научиться рисовать в окне игры и понять, где именно рисовать. Для первого можно использовать графийческий API самой Windows (GDI), рисуя прям поверх окна. Или Direct3D/OpenGL, которые используются 99% всех современных игр для вывода графики, потому что тут можно видеокарту задействовать и это чуток производительнее. Для второго тебе нужно хотя бы в общих чертах представлять, как игра работает. Вся суть триде графики заключается в том, чтобы реалистично отрисовывать трехмерную сцену в двумерном пространстве, то есть на мониторе. Тут перед глазами начинает мелькать 7-й класс средней школы и в мозгу яркой лампочкой вспыхивает слово "геометрия", а затем - "проекция". Игра умеет проецировать 3D объекты на 2D экран монитора. Очевидно, что там есть какая-то система координат, причем не одна. Одна - у монитора (0.0 - 1920.1080, например), вторая - в 3D-пространстве игры. Чтобы нарисовать точку, нужно найти координаты нужного объекта в игре в 3D, а затем спроецировать их на 2D монитор и уже по этим координатам нарисовать точку. С этим разобрались.
Осталось последнее - найти координаты в 3D-пространстве. Тут логично будет предположить, что координаты являются "частью" игрового объекта так же, как и все остальные его характеристики, и хранятся они где-то рядом в одной кучке, чтобы игре не нужно было сильно напрягаться и далеко ходить. Типа вот так:
Персонаж
{
Здоровье
Патроны
Координаты
}
Можно попробовать найти, где в памяти лежит какая-то из быстронаходимых характеристик (здоровье или патроны, т.к. их банально видно на экране), а затем посмотреть, что лежит в памяти вокруг. Если повезло - значит повезло и координаты нашлись. Правда, тут сразу возникает еще одна проблема - допустим, нашел я координаты своего персонажа, а дальше-то что? Мне всех нужно найти. Получается, что игра в любом случае каким-то образом знает, где лежат все игроки. Я попробовал взять координаты и отладчиком посмотреть, какие инструкции обращаются к ним на чтение - очевидно, что чтобы нарисовать объект, нужно прочитать его координаты. Дальше я долго-долго возился с каждой инструкцией и выяснял, что еще та или иная инструкция рисует, и относятся ли очередные координаты к игроку (моему или нет). В результате я нашел инструкцию, которая читает только игроков. Игроки, как выяснилось, лежат в массиве. На него я нашел указатель и таким образом получил доступ к координатам всех игроков. Вуаля.Это уже потом я нашел более простой способ через поиск двойного указателя на своего игрока, но кто ж знал.
Итого - у меня есть координаты, я могу их читать, круто. Дальше я почитал, как можно проецировать координаты из игровых (3D) в монитор (2D), бегал в цикле по массиву координат, читал их, делал проекцию и рисовал на мониторе точку.
Вроде и все, но фантазия тут может очень сильно разгуляться.
Из инструментов мне понадобились CE, OllyDbg, fasm, исходники Quake и дофига времени.
PS: Изначально я вообще тренировался на игре Crimsonland, которая и не 3D совсем - так было проще.