# decomp.wtf: как запустить локально и разобрать свою игру

> AI Release · @ai_release1 · https://ai-release.org/guides/decomp-wtf-zapusk-lokalno.html

## TL;DR
- Время выполнения: 30–60 минут на клонирование, первый запуск и настройку проверки; время самой декомпиляции зависит от размера бинарника и в исходном посте не указано.
- Уровень сложности: Intermediate
- Понадобится:
  - Git — чтобы склонировать репозиторий `i12bp8/decomp.wtf`.
  - Компилятор C (`gcc` или `clang`) — чтобы собрать сгенерированный исходник и сравнить результат с оригиналом.
  - `sha256sum` и `cmp` (Linux/macOS); в Windows — `certutil -hashfile` и `fc /b`.
  - Ваш собственный бинарник игры, на который у вас есть права.
  - Свободное место на диске — конкретный объём в посте не приводится, сверьтесь с README проекта.

## Требования и подготовка
![Иллюстрация к разделу «Требования и подготовка»](https://ai-release.org/guides/img/decomp-wtf-zapusk-lokalno-ru-1.jpg?v=1793436471)


- **ОС и версии.** В посте указано только, что агент работает локально, на машине пользователя. Список поддерживаемых ОС и версий — сверьтесь с README репозитория. Если проект рассчитан на POSIX-шелл, на Windows работайте через WSL2.
- **Git.** Проверьте: `git --version`. Ожидаемый результат — строка вида `git version <номер>`.
- **Компилятор C.** Проверьте: `gcc --version` или `clang --version`. Компилятор нужен не для красоты: главный результат работы агента — исходник на C, который компилируется в бинарник, побайтово совпадающий с оригиналом, значит собрать его придётся вам.
- **Утилиты сравнения.** `sha256sum --version` и `cmp --version`. SHA-256 — хэш-функция: она превращает файл в короткую строку, и два одинаковых файла дают одинаковую строку. Это самый быстрый способ увидеть, совпали ли бинарники.
- **Права.** Декомпилируйте только свои игры или те, где это разрешено лицензией. Агент локальный, файлы никуда не отправляются, но юридический статус от этого не меняется.
- **Локальный рантайм модели.** Агент работает на вашей машине, поэтому инференс (генерация ответов модели) тоже локальный. Как поднять модель локально — разобрано в гайде [Как запустить ИИ-модель локально на своём компьютере](https://ai-release.org/guides/kak-zapustit-ii-model-lokalno-na-svoem-kompyutere-gayd.html?utm_source=tg&utm_medium=channel&utm_campaign=guide_inline&utm_content=guide_to_guide). Конкретную модель и её требования к памяти decomp.wtf не документирует в посте — сверьтесь с README.

Чек-лист перед стартом:

- [ ] `git --version` отвечает без ошибок
- [ ] `gcc --version` (или `clang --version`) отвечает без ошибок
- [ ] `sha256sum` и `cmp` доступны
- [ ] есть копия вашего бинарника и вы точно знаете, чем он собирался
- [ ] прочитан README репозитория `i12bp8/decomp.wtf`

## Шаг 1. Клонировать репозиторий и зафиксировать эталон

**Что сделать:** склонировать проект `i12bp8/decomp.wtf` (внутри он называется What The Function — ИИ-агент для декомпиляции игр), зайти в каталог, прочитать README и сразу снять хэш оригинального бинарника.

```bash
git clone https://github.com/i12bp8/decomp.wtf.git
cd decomp.wtf
ls -la
git log -1 --oneline
sha256sum ./<ваша-игра> | tee original.sha256
```

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

**Как проверить:** `ls -la` показывает файлы проекта, среди них README и файл запуска; `git log -1 --oneline` печатает один коммит вида `<hash> <сообщение>`. Команда `sha256sum` создаёт файл `original.sha256` — проверьте: `cat original.sha256`.

**Пример:** для бинарника `my_game.bin` вы увидите в `original.sha256` строку `<64-символьный-хэш>  ./my_game.bin`. Эта строка — ваш эталон на весь гайд.

Почему это работает: git копирует репозиторий целиком, а `tee` одновременно печатает хэш на экран и пишет его в файл, поэтому эталон не потеряется между шагами.

## Шаг 2. Запустить агента на вашем бинарнике
![Иллюстрация к разделу «Шаг 2. Запустить агента на вашем бинарнике»](https://ai-release.org/guides/img/decomp-wtf-zapusk-lokalno-ru-2.jpg?v=1793436476)


**Что сделать:** посмотреть справку CLI и запустить агент так, как написано в README, передав ему путь к оригинальному бинарнику и каталог для результата.

```bash
./decomp.wtf --help
```

Дальше — по строке из README. Общий вид команды:

```bash
<команда-запуска-из-README> <путь-к-бинарнику> <каталог-вывода>
```

Точные флаги, имя исполняемого файла и способ передачи пути к бинарнику в посте не приводятся — их нужно взять из `--help` и README, не угадывать.

**Зачем:** агент сам выполняет цепочку шагов — разбирает бинарник, восстанавливает логику и пишет исходник на C. Вы не пишете код руками, вы задаёте вход и выход и следите за процессом. Механику таких программ в общем виде разбирает [гид по ИИ-агентам для автоматизации задач](https://ai-release.org/guides/ii-agenty-dlya-avtomatizacii.html?utm_source=tg&utm_medium=channel&utm_campaign=guide_inline&utm_content=guide_to_guide).

**Как проверить:** после запуска в каталоге вывода появились файлы `.c` и, как правило, лог. Проверьте:

```bash
ls -la ./out
find ./out -name "*.c" | head
```

Ожидаемый результат — минимум один файл с расширением `.c` и ненулевой размер. Если каталог пуст, агент не дошёл до генерации: смотрите лог.

**Пример:** запуск выглядит как `<команда> ./my_game.bin ./out`, а через некоторое время в `./out` лежит `my_game.c`. Замерьте время сами — например, обернув вызов в `time` — и используйте только своё число: в исходном посте цифр производительности нет.

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

## Шаг 3. Собрать исходник и проверить побайтовое совпадение
![Иллюстрация к разделу «Шаг 3. Собрать исходник и проверить побайтовое совпадение»](https://ai-release.org/guides/img/decomp-wtf-zapusk-lokalno-ru-3.jpg?v=1793436480)


**Что сделать:** скомпилировать полученный `.c` тем же компилятором и с теми же флагами, которыми собран оригинал, затем сравнить файлы.

```bash
gcc -O2 -o rebuilt ./out/my_game.c
sha256sum ./my_game.bin ./rebuilt
cmp ./my_game.bin ./rebuilt && echo "BYTE-IDENTICAL"
```

Флаги `-O2` — пример; реальные флаги оригинала возьмите из README проекта или из сборочного скрипта. Если флаги не совпадут, байты почти наверняка разойдутся.

**Зачем:** это и есть проверка обещания проекта. `cmp` сравнивает файлы байт за байтом и молчит, только если они идентичны; `sha256sum` даёт вторую, независимую проверку.

**Как проверить:** успех выглядит так — обе строки хэшей одинаковые, `cmp` ничего не печатает, на экране появляется `BYTE-IDENTICAL`:

```
<одинаковый-хэш>  ./my_game.bin
<одинаковый-хэш>  ./rebuilt
BYTE-IDENTICAL
```

Если вместо этого вы увидели `./my_game.bin ./rebuilt differ: byte 4021, line 1` — совпадения нет, переходите к разделу проблем. Если нужна помощь с чтением ошибок компилятора C, пригодится подборка [ИИ для программистов: помощники для кода](https://ai-release.org/guides/ii-dlya-koda.html?utm_source=tg&utm_medium=channel&utm_campaign=guide_inline&utm_content=guide_to_guide).

Дополнительно убедитесь, что собранный файл вообще запускается: `file ./rebuilt` должен показать тот же формат, что и `file ./my_game.bin`.

## Возможные проблемы и решения

**Проблема. Клонирование обрывается на первом шаге.**
- Ошибка: `fatal: repository 'https://github.com/i12bp8/decomp.wtf.git/' not found`
- Причина: опечатка в имени репозитория, репозиторий переименован или закрыт, либо нет доступа к GitHub из вашей сети.
- Решение: проверьте имя без клонирования — `git ls-remote https://github.com/i12bp8/decomp.wtf.git`. Если команда тоже падает, сверьте актуальное имя проекта `i12bp8/decomp.wtf` в README и на странице проекта; при сетевой ошибке проверьте прокси и `git config --get http.proxy`.

**Проблема. Файл не запускается после клонирования.**
- Ошибка: `zsh: permission denied: ./decomp.wtf`
- Причина: у скачанного файла нет бита на выполнение.
- Решение: `chmod +x ./decomp.wtf` и повторите запуск. Проверка: `ls -l ./decomp.wtf` показывает `-rwxr-xr-x`.

**Проблема. Собранный бинарник короче оригинала.**
- Ошибка: `cmp: EOF on ./rebuilt after byte 1048576`
- Причина: сообщение означает, что `rebuilt` закончился раньше оригинала — почти всегда это другие флаги сборки, другой компилятор или выкинутые секции (отладочные символы, таблицы). Агент восстановил код, но собрали вы его иначе.
- Решение: возьмите точные флаги из README проекта и сборочного скрипта оригинала, пересоберите и сравните размеры: `ls -l ./my_game.bin ./rebuilt`. Только после совпадения размеров запускайте `cmp` снова.

## Резюме и следующие шаги

Вы склонировали `i12bp8/decomp.wtf`, сняли хэш оригинала, получили исходник на C и проверили его сборкой до побайтового совпадения через `cmp`. Дальше перенесите команды шага 1 и шага 3 в скрипт, чтобы каждый новый бинарник проверялся одинаково и без ручных шагов.

## FAQ

**Что такое decomp.wtf?**
Это проект `i12bp8/decomp.wtf` с внутренним названием What The Function — ИИ-агент для декомпиляции игр, то есть для восстановления исходного кода из готового бинарника. Результат его работы — исходник на C, который компилируется в бинарник, побайтово совпадающий с оригиналом.

**Нужен ли интернет или облако для работы?**
Нет, агент работает локально, на машине пользователя. Требования к локальной модели и её параметрам в посте не указаны — сверьтесь с README проекта.

**Всегда ли получается побайтовое совпадение?**
В описании проекта результат заявлен как побайтово совпадающий бинарник, но статистики успешных и неуспешных прогонов в посте нет. Поэтому проверка обязательна: `cmp ./my_game.bin ./rebuilt && echo "BYTE-IDENTICAL"`.

**На каком языке выдаётся результат?**
На C. Другие языки на выходе в исходном посте не упоминаются.
