Урок 1 - Введение
В данных уроках я постараюсь вас научить как исследовать логику работы программ и изменять ее,точнее производить взлом.
Это вам пригодится не только для того чтобы взламывать чужие программы а так же понадобится для защиты собственных.
Вообще то это много где может понадобится и все не перечислишь.
Для начала мы будем исследовать простые игры и производить в их памяти различные модификации например делать игрока
бессмертным или сделаем так чтобы при стрельбе у него патроны увеличивались а не уменьшались и постепенно сложность будет увеличиваться.
Но для того что-бы этим заниматься нужно знать хотя бы основы языка программирования Ассемблер
Ассемблер это язык программирования низкого уровня где каждая команда имеет
двоичное представление.
В Ассемблере при компиляции каждая команда конвертируется в свой двоичный вид и напрямую исполняется процессором.
Возьмем например вот такую ассемблерную команду
dec [
0048BB50]
Эта команда декремента и она отнимает от аргумента один.
dec – Название команды
0048BB50 – Аргумент команды в шестнадцатеричной системе счисления
[ ] – Эти скобки означают что между ними находится адрес в памяти, то есть команда отнимает один от значения по адресу 0048BB50
У команд может быть один или два аргумента, а может вообще не быть.
Когда мы скомпилируем программу то наша команда в исполняемом файле будет выглядеть так
FF 0D 50BB4800
Здесь
FF 0D это номер команды а
50BB4800 это аргумент. Сейчас я расскажу почему аргумент не
0048BB50 а
50BB4800.
Дело в том что все числа в памяти хранятся как-бы задом наперед.
Чтобы узнать что это за число нужно сначала разбить его по байтам и потом переставить местами.
Берем наше число 50BB4800 и разбиваем по байтам, получаем 50 BB 48 00.
Далее мы перемещаем байты задом наперед и получаем 00 48 BB 50 что является аргументом нашей команды.
Как вы думаете, можно ли имея двоичный код перевести его в команды ассемблера? Ответ можно и программы которые этим занимаются называются дизассемблерами.
Но некоторые дизассемблеры не ограничиваются простым переводом двоичного кода в язык более менее понятный человеку а еще имеют
массу возможностей для анализа программ про которые мы поговорим в будущих уроках.
В настоящее время почти все программы пишутся на языках высокого уровня таких как
C++,
Java
,
Swift и одном из моих любимых
C#.
Сейчас язык Ассемблера используется в основном для:
- 1.написания драйверов
- 2.написания отдельных модулей программ которые критичны к производительности
- 3.создания различных вирусов и вредоносных программ
- 4.исследования других программ
По моему лучше например дизассемблировать какую нибудь игру и сделать так что-бы игрок прыгал на 500м или ходил через стены чем писать нудные “Hello world”. И то “Hello world” на ассемблере это совсем не то что на вышеперечисленных языках, поверьте это сложнее. А вот исправив всего одну команду в памяти игры можно сделать игрока бессмертным, сделать бесконечные патроны да и вообще все что вы пожелаете.
Но дизассемблеры это не единственный инструмент которым мы будем пользоваться. Существуют еще такие программы как: Отладчики, API шпионы, Файловые мониторы, Декомпиляторы, Hex редакторы которые в той или иной ситуации могут очень помочь. С этими инструментами мы в свое время будем работать.
Но для начала мы будем работать с отладчиком. Единственное отличие отладчика от дизассемблера в том что отладчик работает с оперативной памятью и позволяет контролировать выполнение программы а также изменять память прямо во время выполнения программы. Дизассемблер работает с исполняемым файлом.
В большинстве уроком мы будем пользоваться отладчиком Cheat Engine версии 6.4.
Скачать
На этом урок подходит к концу, надеюсь материал вам понравился, в следующем уроке мы рассмотрим язык Ассемблера подробнее.