Привет! Всем прошло какое-то время, сегодня я решил несколько CrackMe, чтобы вернуться к реверсивной работе, так что я обнаружил, что этот домен - это классный веб-сайт, но не нужно просто запускать какие-либо файлы, некоторые из которых также являются вредоносными. Поэтому рекомендуется запускать файлы через Virus Total перед запуском двоичного файла или, как всегда, запускать его в среде песочницы (также известной как VMware или Virtualbox).

CrackMe

Сложность: очень легко

Это самый простой двоичный файл, который вы можете загрузить прямо в IDA и проверить сегмент cmp, чтобы получить код.

После открытия бинарного файла в IDA получаем

Смотрим внимательно на инструкции

mov rax, 6361726379736165h

Значение в шестнадцатеричном формате, давайте обратим его от этого инструмента

Но это не работает

Смотреть дальше

Также добавляется буква «k»

Давайте переставим carcysaek: easycrack

Вы можете сэкономить время, если у вас есть IDA-Pro и вы напрямую декомпилируете двоичный исходный код, который напрямую показывает пароль.

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

Простой кейген

Сложность: легко

Выполнение простой команды file показывает, что это исполняемый файл.

Теперь давайте попробуем выполнить его, ожидая аргументов командной строки, которые он называет SERIAL, что может пригодиться при отладке внутри IDA или GDB.

Открыв это в IDA, теперь есть функция под названием «CheckSerial». Если вы хотите, вы можете найти вызов «cmp». В итоге я декомпилировал весь двоичный файл (функция Premium)

Итак, после декомпилирования исходного кода мы видим, что ожидаемая длина равна «16», а базовый вход в систему действует как +1 к значению ASCII, поэтому давайте попробуем ввести пароль «abcdefghijklmnop».

Таким образом, пароль был abcdefghijklmnop.

CrackMe J1

Уровень сложности: средний

Как всегда, давайте проверим, что это за файл?

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

Поэтому я пропатчил двоичный файл везде, где он называется ".rdata: 004062DC 00000028 C c: \\ windows \\ system32 \\ shutdown / s / t 5 \ n \ n"

Теперь я могу ЗАБЛОКИРОВАТЬ выключение с помощью NOP (90) и дальше анализировать двоичный файл.

Давайте запустим двоичный файл из базового анализа строк, и мы увидим, что он ищет 3 этапа и пароли, поэтому мы ищем 3 пароля.

Теперь мы можем перейти к этапу 1

Итак, теперь мы можем дважды щелкнуть по строке (упомянутой выше) и получить адрес, так что теперь вы можете найти базовый «cmp», чтобы увидеть, есть ли сравнение строк.

Но двоичный файл заполнен мусором, который представляет собой длинную цепочку

Теперь давайте переместимся вниз и проверим cmp и посмотрим, с каким значением он сравнивается.

Две стрелки, красная и зеленая, показывают, что выполняется, если True, то зеленая, если красная, то Else.

Теперь вы можете увидеть, неправильный ли пароль, это выключение системы, дополненное NOP.

Пройдя вниз, мы видим, что правильное значение для сравнения - 539h (что составляет 539 в шестнадцатеричном формате), что соответствует 1337.

Итак, первый пароль: 1337

Давай попробуем!

Его действительно принимают, теперь он задает другой вопрос: давайте перейдем к строке, теперь вы можете проанализировать двоичный файл или просто проверить импорт, который я сделал, и он четко показывает мне GetComputerNameA, который принимает имя моего компьютера, и я попытался передать его, и он РАБОТАЕТ!

Давайте попробуем передать имя компьютера

На последнем этапе ищем строку «3rd Serial Number:»

Давайте просто передадим это строковое значение в программу и дождемся вывода, когда я введу

Нуф-Си-Гниринь-Эсревер

Выходит, что действительно странно! Если вы внимательно присмотрелись, то есть вызов isDebugger, который не позволяет вам отлаживать этот двоичный файл внутри отладчика.

Возможно, мы сможем избежать обхода вызова isDebugger () когда-нибудь позже

Давайте попробуем проследить шаги и посмотреть, куда он ведет! Таким образом, он вызывает небольшой сегмент команды позже в программе, которую я снова исправил, теперь она работает, как ожидалось.

Теперь это не приводит к сбою и выключению ПК, а завершается изящно. Вы можете попробовать распечатать флаг «Вызов завершен», но я не стал этого делать.

Вот и все! WRAP на день.