Нам дан код на C, использующий структуру SafeString. У нее есть метод set
,
который устанавливает символ только если попадает в границы строки.
Затем есть метод safeGets
, который реализует ввод строки, но не более
какого-то количества символов. Видим, что в конце вызывается set(s, size, 0)
.
Далее читаем main, из него понимаем, что флаг находится в памяти сразу за нашей строкой. Вспоминаем, что строки в C оканчиваются нулем, и если мы сможем забить всю нашу строку так, чтобы в ней не было нулей, то нам выведут флаг.
Нам дают ввести размер ввода, который должен быть не больше размера строки, то
есть максимальное значение 256. Тогда функция safeGets
попробует поставить
туда ноль, но поскольку этот индекс вылезает за пределы строки, она просто не
будет этого делать. И мы получим флаг.
Итого:
- Вводим 256
- Вводим 256 различных символов чтобы забить строку
Флаг: ugra_safe_0r_no7_5afe_3tq6n01fjslf