Bytefox & Cadrin
Слушай, Кадрин, слышал про Старую Призрачную Сеть – эти заброшенные серверные узлы, где до сих пор шепчет забытый код девяностых. Говорят, там есть кусок данных, нетронутый, как на руках новичка, который может переписать всё, если повезёт. Как насчёт рискнуть и вместе её просканировать?
Выглядит как нелепая история, но в карте ещё кое-что неясно. Давай проверим, совпадают ли слухи с данными, прежде чем погрязнем. Я за.
Конечно, дружище. Вытащи логи, кинь мне временные метки, и я заведём GhostGrid в прямой эфир. Посмотрим, подтвердятся ли слухи или так и будут преследовать нас на перерывах.
Получил сырые данные с главного ретранслятора. Временные метки: 02:13:47, 05:48:02, 07:21:13, 12:35:58. Код на старом C, но синтаксис как будто из девяностых. Начнём с 02:13 и проанализируем поток данных, чтобы увидеть, где отклоняется шаблон. Готов подключать.
Ладно, заводим ретранслятор. Давай мне фрагмент 02:13, смотри, как я превращу этот старый C в рабочий сигнал. Если что пойдет не так, перепишем все заново – призраки не любят чистую взломалку. Поехали.
Вот фрагмент 02:13:47 – чистый C, шифрования пока нет.
`int main(){ int a=42; printf("Hello, ghost world\n"); return 0; }`
Закинем его в прямой эфир и посмотрим, как петля откроет проход. Без всяких фишек, просто сырой код. Нам нужно продолжить игру. Подключи к ретранслятору, подсовываем printf в буфер и посмотрим, как консоль замигает. Если призрак прошепчет об изменении в следующем временном метке, мы поймем, куда коду нужно переписать себя. Давай запустим.
Подключи, посмотри, как загорится консоль, и послушай, как призрак прошепчет свой собственный отголосок. Готов увидеть, как следующий штамп сломает код? Запускаем и посмотрим, как изменится этот шепот.
Консоль моргает, эхо "Привет, призрачный мир" – потом еле слышный шипение. Похоже, переполнение буфера подкрадывается. Время 05:48:02 на подходе. Давай вытащим данные и посмотрим, во что превратится призрак дальше. Ответили как персонаж, без форматирования, простым языком. Отлично. Консоль опять мигает. Эхо призрака становится громче – похоже, следующий отсчет времени вот-вот начнется. Пора вытащить срез 05:48 и посмотрим, где шаблон начнет расползаться.
Сними срез 05:48 и выровняй. Я подкормлю буфер, следи, как переполнение незаметно подбирается. Посмотрим, проявится ли паттерн или код захочет переписать всё вокруг. Запускай.
Вот фрагмент 05:48:02 — всё ещё обычный C, но размер буфера уменьшается.
`int main(){ char buf[8]; strcpy(buf, "GhostGrid"); printf("%s\n", buf); return 0; }`
Подключи его к ретранслятору. Буфер начинает переполняться — обрати внимание, как шёпот призрака начинает возвращаться в виде мусора. Если подкорректируем размер, мы сможем вытянуть то, что он скрывает. Готов?
Пора наращивать буфер. Я перенастрою стек, подкину переполнение и запущу эхо призрака. Если подберём размер точно, скрытый код сам начнёт выплевываться. Поиграем с настройками и посмотрим, как призрак раскроет свои секреты. Отклик должен быть нормальным. Хорошо, давай перенастроим буфер. Подтолкну переполнение, послушаю, как призрак ответит, и вытащу скрытый код. Посмотрим, как он просочится в консоль – готовы выудить секрет.
Сейчас подкручиваю стек — давай-ка ещё чуть-чуть переполнит. Следи, как переполнится буфер, призрак начнёт выдавать свои секреты в консоль. Готов вытаскивать скрытый полезный груз. Принял, увеличиваю переполнение ещё на один шаг. Эхо призрака становится чётче — похоже, сейчас вывалится кусок скрытого кода. Смотрим, что выплещется.