Обновить
4K+
6
Моисей Сутулин@codebra

Любопытный инженер, автор курсов, разработчик

10
Рейтинг
2
Подписчики
Отправить сообщение

«Bro, what…?» #1. Первый контакт с crackme на Linux x86-64

Уровень сложностиСредний
Время на прочтение54 мин
Охват и читатели7.8K

Вы запускаете программу, о которой ничего не знаете. Она вежливо просит строку, а в ответ на ваш ввод насмешливо отвечает: «Bro, what are you trying to do?» И правда, что мы пытаемся сделать? Пытаемся понять ее.

Перед нами crackme – программа-головоломка, написанная для тренировки навыков обратной разработки: бинарник под Linux x86-64 без исходников и документации, который издевается над каждым, кто не смог его разгадать. Это первая статья цикла из трех о гибридном анализе крякми Getting Started Keygen (Mazzottis). Мы осмотрим файл штатными утилитами, найдем main в Ghidra, расшифруем «бессмысленные» имена переменных в реальную раскладку стека и подтвердим гипотезы в GDB. По пути встретим оптимизированный пролог без RBP, «хитрое» беззнаковое условие и std::string, спрятавшийся в трех переменных, которые на первый взгляд никак не связаны.

Во второй части цикла – мутационное тестирование и реконструкция скрытой структуры, в третьей – полный разбор хеш-функции и восстановление алгоритма на Python.

Читать первую часть

Как программа попадает в память: от execve до main

Уровень сложностиСредний
Время на прочтение13 мин
Охват и читатели12K

Вы когда-нибудь задумывались, что происходит после того, как вы нажимаете Enter в терминале Linux? Вводите ./myprogram и...

Что именно происходит дальше? Как ядро находит файл? Как загружает его в память? Кто вызывает main? И как на всё это посмотреть вживую?

Разберемся на примере пустой программы empty_sleep. Она ничего не делает, просто запускается и завершается через 30 секунд. В ней нет лишнего кода и мы сможем сосредоточиться только на процессе загрузки. Всё, что мы увидим, относится к большинству динамически скомпилированных программ в Linux.

В этой статье покажу как с помощью strace в реальном времени проследить путь программы от execve до _start и main.

Читать далее

Информация

В рейтинге
821-й
Зарегистрирован
Активность

Специализация

Бэкенд разработчик, Пентестер
Python
C++
PHP
Обратная разработка