Прочитай код. Найди лишний байт. Захвати машину.
NULLBYTE — головоломка про чтение чужой программы и ошибку в один байт, которая позволяет повернуть программу против неё самой. Всё происходит на одном экране, который умещается в голове: крошечная машина из 256 ячеек, четыре регистра и стек — вся её память разложена перед тобой. Никаких настоящих компьютеров: ты понимаешь, как машина на самом деле думает, и заставляешь её сделать то, чего в её коде никогда не было.
Чем она отличается
- Вся машина умещается на одном экране. 256 байт, и виден каждый — код, стек, твой ввод, всё вживую.
- Ничего не рассказывается — всё показывается. Листинг — это дизассемблер живой памяти. Перепиши байт и увидишь, как меняется инструкция; байты, пришедшие из твоего ввода, подсвечены, чтобы за ними было легко следить.
- Уровень не решается «правильным ответом». Ответа в файле нет. Засчитывается только то, что машина действительно сделала при запуске.
- Ни учебника, ни стены теории. Карточка появляется, когда вещь впервые возникает на экране, и сама оседает в Журнале — ты узнаёшь ровно тогда, когда это нужно.
- От основ до настоящей техники. 43 задачи в шести блоках: от «что такое адрес» до перезаписи адреса возврата и сборки цепочки из чужих кусков кода.
Своя маленькая машина
Не настоящий x86 — машина достаточно маленькая, чтобы понять её целиком. Тринадцать инструкций, 256 ячеек, стек, растущий вниз, побайтные права и адрес возврата — один видимый байт. Ты усваиваешь идеи, стоящие за безопасностью памяти и эксплуатацией, а не кучу опкодов.
Что внутри
- 43 рукотворных уровня в шести блоках, каждый доказуемо проходим
- Лидерборды: побеждает самый короткий payload — возвращайся и срежь ещё байт
- Пошаговая машина: запускай, отматывай и ковыряй
- Подсказки в три ступени, когда нужны, и достижения за то, чтобы обойтись без них
- Английский и русский, включая листинги и комментарии