Статья Виртуальная машина для самых маленьких(начинающих)

  • 112
  • 92
Контакты для связи отсутствуют.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Всем привет. Сегодня у нас опять crackme в виде виртуальной машины, она намного проще прошлой, на ней можно потренироваться, понять основы. Программа написана на ассемблере, кому интересно можете скачать ее в самом конце статьи.
1) Сперва нам нужно определиться какая функция(опкод) что делает. Для этого мы начинаем отлаживание нашей программы. Мы видим такую картину:
1623692978626.png

Нашу виртуальную машину мы уже нашли, осталось только проанализировать ее. К этому мы и перейдем, но сначала у нас идет инициализация виртуальной машины.
1623693064873.png

Далее мы видим функцию, где и будет осуществляться все действия в программе. Переходим в нее и видим такое:
1623693147382.png

Я уже подписал все, т.к я ее уже проанализировал. Если кто не знает, ALT+ ; - переименование функции, переменной, ; - комментарий к строке. В eax(al) помещается наш опкод,а в edx(dl) - параметр
1623693363941.png

Первый опкод это 0x30, посмотрим что он делает.
(Не обращайте внимание на то, как я обозвал регистры, они могут называться как угодно, в любой последовательности, то есть моя последовательность не есть верной)
1623693530034.png

Как мы видим, каждый параметр делает что-то свое, в данном случае от параметра зависит какой регистр мы будем "трогать" ,то есть записывать в него что-то или читать из него.
Например, проанализировав ,мы можем понять, что параметры меньше чем 8 выполняют перемещение из регистра виртуальной машины, в наш регистр, то есть отладчика.
В данном случае,мой параметр 9, он означает что из стека(см. ebx) будет прочитано значение и записано в регистр виртуальной машины.
1623693827213.png

После того, как мы дойдем до ret в этой функции нас перекинет на функцию, которая увеличивает EIP нашего виртуального монстра).
1623693976744.png

Далее мы попадаем на наше уже знакомое меню, где будет решено какой опкод будет следующий. В моем случае, это 0xB0(см. EAX(AL)) с параметром 0x00(см. EDX(DL))
1623693947558.png

Заходим внутрь функции.
1623694137711.png

Видим,что из 2 регистра(в зависимости от параметра), читается значение и записывается к нам в отладчик в регистр EAX.
1623694208902.png

Ладно, перейдем к основному, к нахождению пароля. Если вам интересно, вот вам краткое описание каждой функции(опкода)
1623694321504.png

"end of the function" это тот момент, когда мы вводим неверный пароль и нас перекидывает туда.
1623694368322.png

Если ни один опкод не подошел, значит это получение пароля, но получаем мы его не целиком, а по символу, и записывая это все в регистр 1(виртуальной машины).
1623694439374.png

1623694559061.png

Далее,мы получаем наше значение из регистра виртуальной машины, в регистр нашего отладчика.
1623694645018.png

Также, мы имеем функцию под опкодом 0x20, которая меняет наш EIP(виртуальной машины)
1623694763944.png

Далее мы попадаем на опкод 0x60,посмотрим что делает он.
1623694810371.png

Мы получаем значение из регистра под номером 4(вы его можете назвать как угодно)
1623694907559.png

У нас идет складывание двух чисел ,буфера(reg_7) и нашего пароля(reg_1)
И так по кругу, не буду затягивать, т.к описывать весь процесс можно часами, что займет кучу времени вашего и моего, и места на форуме).
В конечном итоге мы получаем опкод 0x00 с параметром 0x03 и это главная функция, здесь будет сравнение путем xor нашего пароля с константой(0x29A, она находится в 1 виртуальном регистре)
1623695512946.png

Вот и проверка суммы символов нашего пароля(виртуальный регистр reg_4) и константы(0x29A, хранящаяся в reg_1). Если значения совпадают, то результатом xor будет 0 ,иначе нет. Это все дело сохранится в reg_1.
1623695585131.png

После этого ,идет опкод 0xD0 для проверки результата xor. Получаем результат xor из reg_1 ,в моем случае это неравно 0 ,т.к я ввел неверный набор символов
1623695771617.png

Сравнение результата xor с 0.
1623695850300.png

Наш итоговый пароль: kpyqli(он может быть другим, т.к я использовал брутфорс). Советую скачать и разобрать самому, так станет намного понятнее что и как делать, а это можно сказать будет вам как подсказка.
1623695933715.png
 

Вложения

  • miniVMcrackme.rar
    2.3 KB · Просмотры: 15
  • 16
  • 5
Контакты для связи отсутствуют.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Всё ок было почитать интересно, но нихуя для себя ничего не понял за старания большой жирный пельмень тебе в тарелку)
 
  • colby57
  • UNEXPECTED_KERNEL_MODE_TRAP_M (1000007f)
  • 155
  • 2
  • 240
проще говоря эта VM как наглядный пример использования оператора switch на плюсах (je listing) для каждой инструкции, которой будет пользоваться CALL хэндлер
 
Сверху Снизу