День назад праздновали день рождения Тьюринга, и на сайте Гугла был дудл с джаваскриптовой машинкой Тьюринга. Уже не первый раз поисковик показывает нетривиальные и интересные скрипты, которые потом, после дня празднования, исчезают в небытие. Странно, что на странице всех дудлов о них есть немного слов, но нет работающих моделей, как, например, по рассматриваемому дудлу машины Тьюринга. Возможно, они где-то есть, но поиск в интернете не привёл к результату. Такок своевольное поведение стихии интернета начало надоедать, поэтому вчера я без особого напряжения и старания, но решил извлечь работающий код и попытаться им управлять.
Для этого понадобилось деобфусцировать гугловские коды страницы поиска (которую уже и поиском не назовёшь, судя по массе скриптов) и отвязать движок от родительского сайта. Получилось запустить алгоритм счётчика, который зашит в движок по умолчанию, но не работает механизм прохождения логических задач, который, судя по коду, в нём содержится, но не стартует по клику на кнопке с треугольником. Тем не менее, процентов 20 работы сделано, и не хотелось бы, чтобы она пропадала. Возможно, в другое свободное время я им займусь, а, возможно, кто-то подхватит и сделает форк с реквестом, и у него (или у нас вместе) получится запустить задания.
Выкладываю всё вытащенное на Гитхаб, уже с деобфускацией. Если авторы выскажут недовольство и потребуют удаления — что-нибудь придумаем, как уйти от авторских материалов (очень много кода из самого дудла, анимации спрайтов — там выполнять необязательно), а пока что проект рассматривается как образовательный. Ведь задача реинжиниринга игрушки не несёт иной цели, как обучиться методам реинжиниринга и деобфускации, а также знакомства с кухней непомерно разросшихся скриптов такого простого поначалу сайта. Поэтому в репозиторий я положил не только сам скрипт машинки, но и все присутствующие на странице скрипты — бара, футера, и чего-то ещё. Это может быть полезно как для знакомства, так и для восстановления функций игрушки (машины Тьюринга), потому что в ней как-то различаются 2 состояния пользователя — пришедшего первый раз и прошедшего первые 6 уровней (по числу букв «Google»).
В конечном итоге, вся игра заключена в одном файле turing12.3.js и в 2 картинках спрайтов (turing12-hp-deferredsprite.png, turing12-hp-sprite.png). Всё остальное для основной задачи несущественно.
Далее, запуск самой игры сформирован (вручную) в файле gTuring01.htm, а запуск страницы поиска для ознакомления с оболочкой и всеми прочими файлами rs.js, ssl_gb.js — в googleTuring.htm, но сама игра в последнем файле не запущена. extern_chrome_ca.js — файл из канадского Гугла, неизвестно, что делает, к игре не относится. Если понадобятся сжатые исходники — они есть, но быть нужными не должны, деобфусцировано нормально, этим сервисом.
Найденный симулятор машины Тьюринга (JS) с доработками 2012 года.</a
Open-Turing-Project / OpenTuring (язык C)
Автор: spmbt