Введение в крэкинг с нуля, используя OllyDbg - Глава 2

  • На форуме работает ручное одобрение пользователей. Это значит, что, если Ваша причина регистрации не соответствует тематике форума, а также Вы используете временную почту, Ваша учётная запись будет отклонена без возможности повторной регистрации. В дальнейшем - пожизненная блокировка обоих аккаунтов за создание мультиаккаунта.
  • Мы обновили Tor зеркало до v3!
    Для входа используйте следующий url: darkv3nw2...bzad.onion/
  • Мы вновь вернули telegram чат форуму, вступайте, общайтесь, задавайте любые вопросы как администрации, так и пользователям!
    Ссылка: https://t.me/chat_dark_time

AnGel

Администратор
Команда форума

AnGel

Администратор
Команда форума
27 Авг 2015
3,411
2,025
После того, как мы рассмотрели строение, основные элементы и принципы OllyDbg, необходимо изучить системы счисления и что такое стек, чтобы иметь о них хоть какое-то представление.

Системы счисления

Наиболее часто используемыми системами счисления являются двоичная, десятеричная и шестнадцатеричная.

Основное, что о них нужно знать:

  • ДВОИЧНАЯ: представляется символами 0 и 1, и поэтому называется двоичной.
  • ДЕСЯТЕРИЧНАЯ: представляется десятью символами (от 0 до 9), и поэтому называется десятеричной.
  • ШЕСТНАДЦАТЕРИЧНАЯ: представляется символами от 0 до F (0-9, а также A, B, C, D, E и F, то есть 16 символов в итоге).
Обычно, если будет упоминаться какое-то число, то будет считаться, что оно в шестнадцатеричной системе, если иное не указано явно.

Существуют не слишком приятные математические формулы, которые мы не будем использовать, для конвертации чисел из одной системы в другу. Настоящий крэкер использует для этого «Windows-калькулятор», что гораздо быстрее и проще и избавляет от работы со степенями, суммами и прочим при конвертации чисел.

Открывает калькулятор и подготавливаем его для работы.

1fad807813551d9d1c58d6208da7f5ad.jpg

Теперь идём в меню «View», чтобы включить научный режим.

4a78fd44c1f793714c3d19f4793e7dc2.jpg

Здесь мы видим, что по умолчанию стоит десятеричная система счисления. Сбоку можно изменить её на одну из трёх: шестнадцатеричную (HEX), восьмиричную (OCT) и двоичную (BIN).

Восьмеричная система, использующую 8 символов, не слишком используется в крэкинге, но если потребуется, то в калькуляторе такая опция есть.

Поэтому, чтобы перевести число из одной системы счисления в другую наиболее простым образом, переводим калькулятор в исходную систему счисления, например, если хотим перевести 55 из десятечной в шестнадцатеричную, то ставить в калькуляторе десятеричную систему счисления и набираем 55.

7165a9540321499c1e62586b27fab6bf.jpg

Теперь переводим калькулятор в шестнадцатеричную систему счисления, и введённое число автоматически конвертируется в него.

9f2f33a240e82560a67bb51fc3b7d896.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 в десятеричной системе, для чего используется вопросительный знак, после которого идёт собственно само значение.

a238a0f432967094e4dc36fb5edcf6ae.jpg

Справа видим, что получили соответствующее десятеричное значение, которое равно 2147483647, то есть всё в порядке.

Теперь когда хотим выяснить, является ли значение 80000000 отрицательным, видим, что не показываются результаты для значений после 7FFFFFFF (это баг в Command Bar), поэтому как же нам выяснить его значение в OllyDbg?

1e484a5427bbad12990495e0834e3e55.jpg

Для этого есть маленький трюк.

Идём в регистры и выделяем EAX.

9491a1564e45bb4e0b791a7e8bed9dbe.jpg

Теперь нажимаем на правую кнопку мыши и выбираем “MODIFY”.

a2fc64f312040f70bb9207c04aafd79c.jpg

Нам показывается окно, с помощью которого мы можем поместить в EAX нужное нам значение, хотя также это окно полезно для совершения различного рода конверсий. В первом поле задаётся шестнадцатеричное значение, которое мы хотим сконвертировать, а во втором поялвяется соответствующее значение в десятеричной.

В данном случае видим, что 80000000 соответствует десятеричному -214783648.

5746c7d79ac6b7997161d36757c38b76.jpg

Если хотим убедиться, что FFFFFFFF это десятеричное -1.

e7e3fc5223ecc954742eba7850779f75.jpg

Таким образом, в окне модификации регистра мы можем легко проверять значение отрицательных числе, после чего можем выйти, нажав “Cancel”, не изменив на самом деле регистр никаким образом.

--- ASCII-символы

Одна из тем, которую мы должны освоить, это вид представления данных на экране, при котором каждому символу присваивается шестнадцатеричное значение, что позволяет нам интерпретировать их как буквы, символьные значения и т.д.

В таблице, скопированной (хе-хе) из «Теории ассемблера» (Caos Reptante), можно видеть десятеричное значение и соответствующие ему шестнадцатеричное и символьные значения. Например, если нужно использовать символ пробела в Олли, то можем применить 20 (hex) или 32 (dec).

08adae5a5f89f2e97f9c6f6de46b2f3d.gif

В остальных случаях мы можем узнать символьное значение шестнадцатеричного числа с помощью Command Bar:

? 45

d8601294b9c4eeac9571097bdb104d50.jpg

Видим, что 45 соответствует заглавное букве “E”, и если поищем число 45 в средней колонке вышеприведённой таблицы, то убедимся, что это и есть шестнадцатеричное значение буквы “E”.

5959a7ec5c8adf3fe5754bb461ef0318.gif

Также в OllyDbg есть окно DUMP, где находится колонка с ASCII-символами. Давайте посмотрим, увидим ли мы какие-нибудь из них в крэкми CrueHead’а.

c8d9c6ff54239757515629a906151edb.jpg

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

Что такое стек или «куча»

Стек или «куча» - это зона памяти, где сохраняются данные, которые должны быть восстановлены в ближайшее время.

Слово «куча» напоминает о пачках или кучах писем или игральных карт, встречающихся на столах. В этих пачках самое новое письмо помещается сверху, а если письмо берётся из такой пачки, то также сверху.

Это и есть основная черта стека. Письмо помещается на верх кучи, и оно же будет тем, которое уйдёт самым первым.

В дальнейшем мы рассмотрим, как работать в OllyDbg со стеком.

ba5473dad37623f652405fbc41206cc9.jpg

Хорошо, думаю, что на этот раз достаточно. В третьей главе мы рассмотрим, что такое регистры и флаги, и для чего они предназначаются.
 
  • Лайк
Reactions: Gl.Korolb

О нас

  • Наше сообщество существует уже много лет и гордится тем, что предлагает непредвзятое, критическое обсуждение различных тем среди людей разных слоев общества. Мы работаем каждый день, чтобы убедиться, что наше сообщество является одним из лучших.

    Dark-Time 2015 - 2022

    При поддержке: XenForo.Info

Быстрая навигация

Меню пользователя