Дан ELF файл. Сразу открываю его в IDA. Смотрю дизассемблированый код: ![](https://hackmd.io/_uploads/B1-powYsh.png) Здесь две интересные функции: **call** и **login** Посмотрим их: * call ![](https://hackmd.io/_uploads/rJXInPFj3.png) * login ![](https://hackmd.io/_uploads/BymFnvtsh.png) Функциия **call** для нас бесполезна. Смотрим **login**: Идёт ввод логина и пароля. Сразу найдём креды. Данные пременные являются константами, смотрим их значения в памяти: ![](https://hackmd.io/_uploads/S1elaPKjh.png) Итого: ``` Login: admin Password: Super_secret_admin_password ``` После авторизации открывается панель админа (admin_menu): ![](https://hackmd.io/_uploads/S1DPRPYjn.png) Проананализирую: 1) Глобальная переменная баланс, изменение которой происходит на константное число (9990), и сразу заметим, что с начальным балансом (1000) никак не получится набрать 4408386 (CDB), значит смотри дальше. 2) Вспоминаю вторую подсказку "Что такое Little-Endian? :)" о понимаю, что необходимое необходимое значение баланса не **"CDB"**, а **"BDC"** (про числовое значение сразу забываем). 3) Есть возможность сменить логин. Возможно пригодится. Посмотрим, где в памяти хранится баланс: ![](https://hackmd.io/_uploads/S1sWb_to3.png) Интересно... Чуть выше находится **admin_login** и **admin_pass**, а мы как раз можем изменить значение **admin_login**. Сразу рассчитаю, сколько символов нужно ввести. Рассчитаем разницу адрессов: **0000564D8BF5A03C** (balance) - **0000564D8BF5A010** (admin_login) = **2C** = **44** -> Payload: 44 символа + BDC ``` AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDC ``` Проверяем: ![](https://hackmd.io/_uploads/ByKD7uYin.png) Отлично. Идём получать флаг. ![](https://hackmd.io/_uploads/BJ1H7_tj2.png) Победа. Флаг - **CODEBY{0vErFL0w_1n_D@tA}**