Показаны сообщения с ярлыком Указатели. Показать все сообщения
Показаны сообщения с ярлыком Указатели. Показать все сообщения

20150303

ESP. Часть 2. Выводим найденное в консольку.

А вот и видео!


В нем я вслух и почти построчно разбираю 100 строк кода на Си, которые делают следующее:

0. Находят окно игры
1. Получают хэндл процесса с правами чтения из памяти
2. Читают количество игроков на карте
3. Бегут в цикле, читая адрес каждой структуры игрока
4. Выводят в консоль его здоровье и координаты

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

ESP. Часть 1. Ищем нужные нам данные.

Сначала - видео:


А теперь, для начала, я приведу наш небольшой план еще раз:
0. Получение данных из игры
1. Чтение данных из игры программно
2. Рисование в окне игры
3. Вывод данных из игры в окно


Итого, руководствуясь видео выше и своей смекалкой, мы получаем следующие данные:

0. Указатель на коллекцию структур игроков
1. Смещения до здоровья и координат в структуре игрока
2. Адрес общего количества игроков
3. Смещения между структурами игроков в коллекции из п. 0

Конечная наша цель - вывести над каждым игроком в игре его текущее здоровье, как вы уже, думаю, догадались.

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

20110912

И сразу, чтобы не расслабляться, четвёртый урок!

Что-то продуктивность, как я погляжу, идёт в гору. :)
В этом уроке я продемонстрирую простейшую технику взлома под названием "Code Injection" - "Инъекция кода". Само собой, всё уже серьёзно, мы уже опытные, так что практиковаться будем на самой настоящей игре (которую я указывал в предыдущих постах :). Предлагаю сначала посмотреть урок, ибо он короткий - около пяти минут - а потом почитать немного теории и позадавать вопросы, если вдруг что-то осталось неясным. Итак!

[Четвёртый урок]


А теперь - немного теории. Совсем немного, правда. Но это очень сильно облегчит дальнейшее обучение. :)

Начнём с некоторых понятий, с которыми мы уже сталкивались:

Отладчик - [заумное объяснение] - специальная программа, которая позволяет нам подсмотреть код игры, меняющий значения по определённым адресам. Например, посмотреть (и изменить!) участок кода, отвечающий за приченение игроку урона (монстр укусил, в пропасть упал, захлебнулся и тому подобное), изменение количества патронов (постреляли - патронов стало меньше. Нехорошо!) и много чего угодно ещё - всё зависит от фантазии и знания вот этого языка:

Ассемблер - [заумное объяснение] - один из первых языков программирования, на котором нам предоставляет код тот самый отладчик из предыдущего абзаца. Прелесть в том, что язык нужен только этот (для любой игры), да и знать его вдоль и поперёк для умения ломать игры совсем не требуется - нужно знать только азы и понимать, что за код нам отладчик выплюнул. :)

Остановимся на окне отладчика Cheat Engine чуть подробнее. Вот скриншот (смотрим на красные цифры):
1. Количество вызовов инструкции игрой. Один раз выстрелили - один раз вызвалась инструкция, которая забирает патроны. И так далее.
2. Адрес в коде игры, по которому находится инструкция. Важно: адреса кода никогда не меняются!
3. Представление этой инструкции в шестнадцатеричной системе счисления, или опкод этой инструкции. Например, код инструкции nop - 90. [заумное объяснение]
4. Сама инструкция в виде команд ассемблера. В данном случае - sub - subtract- вычитание.
5. Пояснение той самой команды, если вы не знаете полного значения.




С особо любопытными делюсь набором статей по введению в ассемблер - [ссылка], второй абзац, "Дневники чайника", Чтивы 0-1-2-3. Так же - архив рассылки Калашникова, на данный момент уже не очень актуален, но материал там даётся просто отлично: [ссылка], крутим вниз до абзаца "Приятного вам изучения!", качаем "Полный архив рассылки" и "Необходимое ПО".
Ещё одна неплохая статья от Криса Касперски - [ссылка].

Пока всё, вникайте, задавайте вопросы. В следующих уроках сделаем ещё что-нибудь интересное. :)

PS: В качестве небольшого домашнего задания попробуйте найти указатель для адреса здоровья и\или для патронов (для того оружия, что в руках, или для любого).




Третий видеоурок и короткий рассказ про указатели и динамическое распределение памяти.



Ребята, перед просмотром урока\практикой - это важно! - сделайте следующее:

1. Откройте Cheat Engine, нажмите на кнопочку "Settings" ("Настройки") - Рис. 1.
2. Убедитесь, что галочка "Pointer adding: Append pointerline instead of insert" нажата - Рис. 2.


3. Всё, можно нажимать "ОК" и смело приступать к изучению. :)

Добавлю немного необходимой теории. Можно, конечно, на неё и забить, но если вы хотите в дальнейшем отлично понимать, что происходит - очень рекомендую ознакомиться. [Ссылка на статью], читаем параграфы 1.1-1.4 ("Система счисления", "Регистры", "Память", "Программа"). Поначалу прочитанное будет укладываться в голове крайне смутно и неохотно, но со временем эти знания окажутся крайне полезными.

И, чуть подробнее, про DMA ("Dynamic Memory Allocation", "Динамическое аспределение памяти") - [ссылка]. Если будет с ходу понятно и интересно - можете поискать и на английском, там подробностей побольше. :)

Ах да, [ссылка на урок], чуть не забыл! :D