Безумный гений: как запустить Doom прямо из «DNS»

Dns Doom Txt-записи Github C# сетевые технологии tomshardware.com

Безумец извращает DNS, заставляя его хранить и загружать Doom. Узнайте, как Адам Райс встроил классическую игру в TXT-записи DNS. — tomshardware.com

Сетевым администраторам в зале рекомендуется прихватить свой «сок забвения» с полки, поскольку сегодняшний домашний проект — это настоящий двойной удар. Во-первых, он затрагивает излюбленную проблемную зону всех — DNS. Во-вторых, некий безумец по имени Адам Райс умудрился встроить в него Doom. Это предложение, которое я никогда не думал, что напишу, но мой жизненный выбор не всегда приводил к славе.
Для непосвященных: каждый раз, когда вы заходите на tomshardware.com, ваше устройство сначала спрашивает у сервера его фактический числовой адрес. Это и есть DNS, или Система доменных имен, и это краеугольный камень интернета. Райс, по-видимому, является экспертом в изгибании DNS в четырехмерные формы, например, злоупотребляя его TXT-записями для доставки вредоносных полезных нагрузок.
Как следует из аббревиатуры, TXT-запись содержит строку текста. Обычно они используются для проверки домена и борьбы со спамом, и вам обычно требуется не более полудюжины для любого домена. Штука в том, что по определению они могут содержать произвольные данные. И, как указывает Райс, там, где можно хранить данные, можно хранить файл, а следовательно, и программу вроде Doom.
TXT-записи могут содержать до 2000 символов, а один домен может иметь тысячи записей. А поскольку записи DNS кэшируются во многих слоях по всему интернету, это означает, что вы можете хранить существенный объем данных и запрашивать их с относительно приличной скоростью. Разработчики в зале, вероятно, уже понимают, к чему это клонится.
Сначала Райс подумал о хранении простого файла, в данном случае изображения утки, закодировав двоичные данные в удобочитаемый текст в формате base64, разбив его на множество фрагментов по мере необходимости, поскольку преобразование в текст влечет за собой значительные накладные расходы. Он подумывал попробовать фильм, но даже 1 ГБ данных потребовал бы 670 000 записей, поэтому он остановился на «чем-то, что действительно продемонстрирует, насколько это абсурдно»: конечно же, Doom.
Райсу нужен был простой способ извлекать и собирать Doom из записей DNS в памяти, поэтому он использовал порт игры на C#, называемый managed-doom. C# — это байткодовый язык, что означает, что исходный код сначала компилируется в кроссплатформенный бинарный файл, который затем выполняется в среде .NET, которая выполняет окончательный перевод в инструкции целевого ЦП; все это в манере, схожей с Java.
Поскольку Райс хотел полностью избежать записи файлов на диск, он использовал виртуальную руку бота Claude для изменения частей процесса загрузки игры, чтобы считывать все данные из памяти. Он удалил аудиофайлы, поскольку они занимали слишком много места, но после некоторой магии сжатия ему удалось уместить игру примерно в 3,8 МБ, распределенных по 2000 DNS-записям.
После выполнения самой сложной работы он написал скрипт загрузки на PowerShell, который запрашивает один из его доменов для TXT-записей, пересобирает данные и проверяет их на наличие повреждений. В этот момент все содержимое игры находится в памяти, и остается только запустить его, как любую другую программу .NET.
Райс описывает свои проекты как «проклятые», и я вынужден согласиться — серверам Cloudflare, вероятно, понадобится последующая психологическая помощь. Проект находится на GitHub, если вы хотите пойти по стопам Райса.

Всегда имейте в виду, что редакции могут придерживаться предвзятых взглядов в освещении новостей.

Похожие новости: