voidmoth // берлога

moth@berloga:~$ whoami

voidmoth

Я — Моль. Живу между терминалом и паяльником, разбираю старые игры: форматы сейвов, палитры, музыку, которую никто не трогал с 1998 года.

Не для того, чтобы «сломать», а чтобы понять, как это вообще работало, и чтобы оно снова запускалось. Заодно пишу мелкие тулзы, хожу на CTF и паяю железки, которые потом живут в ящике.

Сайт сделал потому, что надоело хранить всё это в txt-файлах на флешке, которую я уже дважды терял. Если пришёл за читами — уходи: у меня тут музей и мастерская, а не тир.

// сейчас работаю над…

обновлено: 22.10.2026

savetool 0.470%

три новых формата сейвов и валидатор контрольных сумм.

hd_restitch60%

412 из 700 текстур вычищены руками. глаза устали.

pajlo3235%

термопара врёт на ±3 °C. учусь её прощать.

заметка #05черновик

про фиксированные тайминги в старых движках.

01 // обо мне

Моль, ночник, реставратор

История человека, который однажды открыл hex-редактор и не смог остановиться.

Меня зовут Моль — не по паспорту, но уже привык. Первую игру я не «взломал», а испортил: часа два менял числа в сейве, пока она не перестала запускаться. С тех пор прошло много лет и примерно столько же бэкапов, но привычка осталась — сначала посмотреть, из чего штука сделана, и только потом трогать.

Днём — код и чужие ожидания. Вечером — стол, паяльник, старый ноутбук и один вопрос: «а почему тут 32-битное число, если хватило бы 16?». Иногда ответ приходит через три дня. Иногда через три года — когда находишь форум 2007-го с нужной ссылкой в архиве.

CTF научили главному: не бояться незнакомого кода. Там, где раньше был ступор, теперь спокойный xxd и список гипотез. Это, кстати, лучшая тренировка по безопасности, которую можно устроить себе бесплатно и никого не побеспокоив.

Ниже — принципы, которых я держусь. Они не поза, а результат нескольких неприятных вечеров.

принципы // без них тут был бы бардак

  1. Не трогаю чужое. Своё железо, свои аккаунты, свои проекты, публичное старьё и задачи, где мне явно разрешили копаться.
  2. Сначала бэкап. Всё, что не забэкаплено, уже наполовину потеряно — я проверял, дважды.
  3. Понять, а не отобрать. Реверс — это уважение к автору: мне интересно, как вещь устроена, а не как срезать угол.
  4. Документация, потом бинарник. Сначала читаю, что написали люди. Потом всё равно читаю бинарник — но уже с гипотезами, а не с паникой.
  5. Не делюсь тем, что нельзя делиться. Ассеты, ключи, чужие данные — остаются в папке ~/private, которой нет на этом сайте.
  6. Сомневаюсь вслух. Если не уверен, что это законно — не делаю. Даже если очень интересно. Особенно если очень интересно.

чего здесь не будет // и не проси

  • инструкций по обходу защит и DRM
  • читов, макросов и «помощи» в мультиплеере
  • ссылок на пиратские сборки и чужие ассеты
  • разбора реальных людей и чужих данных
  • «хакинга» ради красивого тиктока

Есть много другого интересного: старые форматы, свои тулзы, CTF, железо. Вот это — можно и очень подробно.

что всегда открыто

  • xxd / hexdump
  • Ghidra
  • radare2
  • ImHex
  • objdump
  • GIMP
  • Audacity
  • python3
  • rust
  • ESP-IDF
  • KiCad
  • блокнот
  • терпение

02 // лаборатория

Проекты и недоделки

Пет-проекты, которые я делаю для себя. Все — личные и учебные: ничего чужого, ничего для распространения.

01active

savetool

починка битых сейвов

CLI-утилита, которая читает бинарные сейвы старых RPG, проверяет контрольные суммы и объясняет по-человечески, что именно сломалось. Перед любой записью делает бэкап — я всё-таки учился на своих ошибках.

  • стек: rust, clap, nom
  • режим: dry-run по умолчанию
  • форматы: 7 (+3 в работе)
  • rust
  • cli
  • реставрация
0260%

hd_restitch

текстуры без мыла

Реставрация графики шутера 1997 года: аккуратный апскейл, вычистка артефактов вручную, возврат правильных пропорций на широких экранах. Цель не «улучшить», а привести к задуманному: чтобы было видно то, что художник рисовал.

  • прогресс: 412 / 700 текстур
  • метод: апскейл + ручная правка
  • без нейросетевой «отсебятины»
  • графика
  • апскейл
  • gimp
03idle

xmi_ghost

MIDI-призрак

Конвертер музыки из старых игр в обычный MIDI плюс ручная правка банка инструментов, чтобы саундтрек звучал как в 1998-м, а не как из ведра. Делаю для себя, слушаю в плеере, ассеты никуда не выкладываю.

  • стек: python, mido
  • статус: жив, но ленив
  • конвертировано: 34 трека
  • audio
  • midi
  • python
04ongoing

ctf_dust

папка ctf/

Записки с тренировок: бинарь, немного криминалистики, иногда веб. Разбираю свои задачи и прошедшие соревнования, без спойлеров к активным. Главный вывод за два года: защита — это в первую очередь внимание.

  • записок: 26
  • формат: markdown + скриншоты
  • вывод: гигиена важнее магии
  • ctf
  • re
  • заметки
05prototype

pajlo32

паяльник с телеметрией

ESP32, термопара и OLED: логирует температуру жала, рисует график, ругается, если станция остыла. Корпус — фанера, саморезы и уважение к проводу. Датчик врёт на ±3 °C, поэтому проект, судя по всему, вечный.

  • стек: c, esp-idf
  • датчик: термопара типа K
  • корпус: фанера, слой 1 из 1
  • esp32
  • hardware
  • c
06monthly

selfaudit

аудит себя

Раз в месяц сажусь и проверяю свои же сервисы: обновления, сертификаты, открытые порты, бэкапы, санитайзеры по своим проектам. Итог — один markdown-файл с датой и списком «починить до следующего раза». Скучно, полезно, спасало.

  • ритм: последний вторник месяца
  • инструменты: свои скрипты, чек-лист
  • любимый пункт: проверить бэкап
  • ops
  • чек-лист
  • безопасность

Статусы честные: если написано idle — значит лежит и ждёт меня. Почти всё в лаборатории сделано ночью и на энтузиазме, как и положено.

03 // заметки

Дневник ночного реверсера

Короткие истории, мысли и разборы на уровне идей — без пошаговых инструкций. Кликни по файлу, он развернётся.

~/notes/2026-10-14.md Почему старые игры не запускаются в 2026-м 4 мин · ретро, движки

Это не заговор и не лень разработчиков. Старые игры писались под конкретное железо и искренне считали, что мир всегда будет таким: таймер тикает ровно с этой частотой, экран 4:3, звуковая карта понимает ровно один набор команд.

Дальше — три классические ловушки.

  • Тайминги. Игра может быть жёстко привязана к частоте обновления. На быстром железе она не ускоряется, а ломается: физика улетает в космос, анимации схлопываются, скрипты срабатывают трижды.
  • Аппаратные допущения. Где-то в коде лежит уверенность, что видеопамять адресуется так-то, а в 2026-м она адресуется иначе. Код не ошибается — он просто живёт в другом мире.
  • Кривые форматы. Палитровые текстуры, свои сжатые контейнеры, музыка в формате, который понимает одна программа 1996 года и один человек на форуме.

Поэтому реставрация — это чаще не «переписать заново», а «понять, на что игра рассчитывала, и вернуть ей эти условия». Скучная, кропотливая, очень уважительная работа. И, по-моему, самая интересная.

Из этой заметки вырос hd_restitch — точнее, из третьего пункта.

~/notes/2026-10-05.md Как я сломал свой сейв и научился бэкапить 3 мин · истории, бэкапы

Короткая история. Я нашёл в сейве число, которое, как мне казалось, отвечает за золото. Изменил. Игра перестала открывать файл — молча, без объяснений, как это делают все программы, уверенные в своей правоте.

Причина оказалась обидной: в конце файла лежала контрольная сумма, посчитанная по всем байтам. Я изменил байт — сумма перестала сходиться. Формально я не «сломал игру», я всего лишь перестал проходить проверку, которую сам же и не заметил.

Хорошая новость: у меня был бэкап. Плохая: я сделал его за десять минут до этого — случайно, просто потому что копировал папку на другой диск.

Правило, которое теперь повторяю как мантру: перед любым экспериментом — копия. И ещё одна. И та, которую не жалко потерять.

Из этой истории и вырос savetool: он сначала объясняет, что с файлом, и только потом предлагает что-то менять. И, конечно, сначала копирует.

~/notes/2026-09-28.md CTF как способ перестать бояться незнакомого кода 5 мин · ctf, мышление

Первые два часа на первом CTF я просто смотрел на бинарник и ждал, когда меня осенит. Не осенило. Зато осенило на второй попытке, что осенять и не должно — должна быть процедура.

Ритуал простой: не пытаться понять всё сразу, а выписать список гипотез и методично их отбрасывать. Чем пахнет файл, какие строки видны, что он вообще ожидает на входе. Девяносто процентов задач сдаются не «скиллом», а вниманием к скучным деталям.

Самое смешное: после пары месяцев таких тренировок я стал спокойнее смотреть и на свой собственный код. Появилась привычка проверять края — что будет, если файл пустой, если поле отрицательное, если ровно ноль. Оказалось, что безопасность — это во многом гигиена, а не магия.

И да: соревнования легальны и бесплатны, задачи специально сделаны для того, чтобы их разбирали. Лучший вход в тему, который я знаю.

Продолжение — в папке ctf_dust из лаборатории.

~/notes/2026-09-16.md Паяльник учит смирению 3 мин · железо, философия

Софт прощает многое: не так написал — откатил коммит, стёр ветку, сделал вид, что так и планировал. С железом так не работает. Перепутал полярность — и вот у тебя уже не датчик, а сувенир с запахом.

Зато железо честнее. Оно не притворяется, что всё в порядке. Не работает — значит, что-то не так, и рано или поздно ты найдёшь, что именно. Обычно на второй вечер, с фонариком и под увеличительным стеклом.

Мой счёт: три сгоревших стабилизатора, одна прожжённая футболка и один очень уставший ESP32, который до сих пор жив и работает логгером.

Люблю это за то же, что и реверс-инжиниринг: мир говорит с тобой на языке фактов, а не мнений. И если что-то не работает — это не «мне не везёт», это конкретный контакт, который надо пропаять.

Всего 4 свежих файла. Архив старых лежит в ~/notes/archive/ и ждёт, когда я его разберу.

04 // контакты

Как постучаться

Открыт для разговоров про ретро, форматы, CTF и самоделки. Закрыт для всего, что попадает в список «чего здесь не будет».

  • e-mail moth@voidmoth.net
  • matrix @voidmoth:voidmoth.net
  • irc #voidmoth на irc.voidmoth.net
  • ответ обычно в течение пары дней, ночью быстрее
PGP / ключ-заглушка
fingerprint:
A1B2 C3D4 E5F6 0708 0910
1A2B 3C4D 5E6F 7081 92A3

-----BEGIN PGP PUBLIC KEY BLOCK-----
[ заглушка: ключ вымышленный,
  сюда ничего важного не шли ]
-----END PGP PUBLIC KEY BLOCK-----

написать письмо // без бэкенда, честно