[ Введение в крэкинг с нуля, используя OllyDbg - Глава 2 ]
После того, как мы рассмотрели строение, основные элементы и принципы OllyDbg, необходимо изучить системы счисления и
что такое стек, чтобы иметь о них хоть какое-то представление.
Системы счисления
Наиболее часто используемыми системами счисления являются двоичная, десятеричная и шестнадцатеричная.
Основное, что о них нужно знать:
* ДВОИЧНАЯ: представляется символами 0 и 1, и поэтому называется двоичной.
* ДЕСЯТЕРИЧНАЯ: представляется десятью символами (от 0 до 9), и поэтому называется десятеричной.
* ШЕСТНАДЦАТЕРИЧНАЯ: представляется символами от 0 до F (0-9, а также A, B, C, D, E и F, то есть 16 символов в итоге).
Обычно, если будет упоминаться какое-то число, то будет считаться, что оно в шестнадцатеричной системе, если иное не
указано явно.
Существуют не слишком приятные математические формулы, которые мы не будем использовать, для конвертации чисел из одной
системы в другу. Настоящий крэкер использует для этого <Windows-калькулятор>, что гораздо быстрее и проще и избавляет от
работы со степенями, суммами и прочим при конвертации чисел.
Открывает калькулятор и подготавливаем его для работы. (1.jpg)
Теперь идём в меню <View>, чтобы включить научный режим. (2.jpg)
Здесь мы видим, что по умолчанию стоит десятеричная система счисления. Сбоку можно изменить её на одну из трёх:
шестнадцатеричную (HEX), восьмиричную (OCT) и двоичную (BIN).
Восьмеричная система, использующую 8 символов, не слишком используется в крэкинге, но если потребуется, то в калькуляторе
такая опция есть.
Поэтому, чтобы перевести число из одной системы счисления в другую наиболее простым образом, переводим калькулятор в
исходную систему счисления, например, если хотим перевести 55 из десятечной в шестнадцатеричную, то ставить в калькуляторе
десятеричную систему счисления и набираем 55. (3.jpg)
Теперь переводим калькулятор в шестнадцатеричную систему счисления, и введённое число автоматически конвертируется в
него. (4.jpg)
Таким образом, видимо, что 55 в десятеричной системе - это 37 в шестнадцатеричной.
При этом появились неиспользованные в десятеричной системе счисления клавиши с символами A, B, C, D, E, F, чтобы мы могли
их вводить.
Думаю, что этот способ более практичен в использовании, и позволяет нам переводить числа из одной системы счисления в
другую без особых сложностей.
Отрицательные шестнадцатеричные числа
Это понять гораздо сложнее, поэтому начнём издалека. Как в шестнадцатеричной системе можно представить отрицательное
число, если мы не можем использовать для это цели минус как в трационной десятеричной системе? Как представить в
шестнадцатеричном формате, например, -1?
Рассмотрим эту проблему, и надеюсь, что всё станет понятно.
Если у нас есть возможность писать шестнадцатеричные числа от 00000000 до FFFFFFFF, то как нам представлять отрицательные
числа?
Мы можем использовать половину этого диапазона для положительных чисел, а половину - для отрицательных.
Положительные числа будут идти от 00000000 до 7FFFFFFF, а отрицательные - до 80000000.
Положительные
000000000 всё равно, что 0 в десятеричной
000000001 всё равно, что 1 в десятеричной
...
...
7FFFFFFF всё равно, что 2147483647 в десятеричной ( и это максимальное положительно е число)
Отрицательные
FFFFFFFF всё равно, что -1 в десятеричной
FFFFFFFE всё равно, что -2 в десятеричной
...
...
80000000 всё равно, что -2147483648 в десятеричной (и это максимальное отрицательное число)
Можно попробовать узнать в Command Bar значение 7FFFFFFF в десятеричной системе, для чего используется вопросительный
знак, после которого идёт собственно само значение. (5.jpg)
Справа видим, что получили соответствующее десятеричное значение, которое равно 2147483647, то есть всё в порядке.
Теперь когда хотим выяснить, является ли значение 80000000 отрицательным, видим, что не показываются результаты для
значений после 7FFFFFFF (это баг в Command Bar), поэтому как же нам выяснить его значение в OllyDbg? (6.jpg)
Для этого есть маленький трюк.
Идём в регистры и выделяем EAX. (7.jpg)
Теперь нажимаем на правую кнопку мыши и выбираем "MODIFY". (8.jpg)
Нам показывается окно, с помощью которого мы можем поместить в EAX нужное нам значение, хотя также это окно полезно для
совершения различного рода конверсий. В первом поле задаётся шестнадцатеричное значение, которое мы хотим
сконвертировать, а во втором поялвяется соответствующее значение в десятеричной.
В данном случае видим, что 80000000 соответствует десятеричному -214783648. (9.jpg)
Если хотим убедиться, что FFFFFFFF это десятеричное -1. (10.jpg)
Таким образом, в окне модификации регистра мы можем легко проверять значение отрицательных числе, после чего можем выйти,
нажав "Cancel", не изменив на самом деле регистр никаким образом.
--- ASCII-символы
Одна из тем, которую мы должны освоить, это вид представления данных на экране, при котором каждому символу
присваивается шестнадцатеричное значение, что позволяет нам интерпретировать их как буквы, символьные значения и т.д.
В таблице, скопированной (хе-хе) из <Теории ассемблера> (Caos Reptante), можно видеть десятеричное значение и
соответствующие ему шестнадцатеричное и символьные значения. Например, если нужно использовать символ пробела в Олли,
то можем применить 20 (hex) или 32 (dec). (11.gif)
В остальных случаях мы можем узнать символьное значение шестнадцатеричного числа с помощью Command Bar:
? 45 (12.jpg)
Видим, что 45 соответствует заглавное букве "E", и если поищем число 45 в средней колонке вышеприведённой таблицы,
то убедимся, что это и есть шестнадцатеричное значение буквы "E". (13.gif)
Также в OllyDbg есть окно DUMP, где находится колонка с ASCII-символами. Давайте посмотрим, увидим ли мы какие-нибудь из
них в крэкми CrueHead'а. (14.jpg)
Видим, что сбоку от колонки, отображающей шестнадцатеричные значения, есть колонка ASCII, где можно видеть
соответствующие им текстовые строки, состоящие из ASCII-символов.
Что такое стек или <куча>
Стек или <куча> - это зона памяти, где сохраняются данные, которые должны быть восстановлены в ближайшее время.
Слово <куча> напоминает о пачках или кучах писем или игральных карт, встречающихся на столах. В этих пачках самое новое
письмо помещается сверху, а если письмо берётся из такой пачки, то также сверху.
Это и есть основная черта стека. Письмо помещается на верх кучи, и оно же будет тем, которое уйдёт самым первым.
В дальнейшем мы рассмотрим, как работать в OllyDbg со стеком. (15.jpg)
Хорошо, думаю, что на этот раз достаточно. В третьей главе мы рассмотрим, что такое регистры и флаги, и для чего они
предназначаются.
(c) Рикардо Нарваха, пер. Aquila
[ ВСЕ ФОТКИ К ТУТОРИАЛУ ТЫ СМОЖЕШЬ НАЙТИ В ДИРЕ ../ADDONS/OLLY-TUTORIAL/* ]
[ ПРОДОЛЖЕНИЕ СЛЕДУЕТ ]