Сначала новости по основе. В общем, я вроде как более-менее набрался сил, так что буду пробовать писать парсер из BB и MD в HTML. Не уверен насколько хороши рандомные парсеры с npm, но вот что-то мне подсказывает, что у них будут проблемы с перекрёстной конвертацией всего этого дела между собой.
А теперь история. На работе случилось забавная штуковина, из-за которой мне пришлось учиться декомпилировать софт.
Мы откопали стенд. Представляет он из себя телевизор, комп и кинект. Сразу после запуска стенд запускает проектик на Unity, где юзеру предлагают выбрать один из нарядов петровской эпохи, он накладывается на стоящего перед кинектом пользователя в ДР, и затем ему предлагается сфоткаться в этом наряде, а затем забрать фотку через QR-код или отправить её по почте. Тестируем стенд - на ящик ничего не приходит, QR-код находится в вечном "фотка грузится, подождите пару минут".
В общем, начали мы с того, что начали реверс инженерить адрес. Выглядел он как-то навроде "http://file.orgdomain.ru:9088/gateway/getfile?id=123456789" где ID это время когда сделана фотка в UNIX формате. Этот самый файл file.orgdomain.ru это некоторая наша локальная виртуалка, на которую сваливают абсолютно всю работу с медиа. Самое бесячее - то самое "подождите пару минут" было просто заглушкой для ошибки 404, то есть мы даже не можем узнать реально ли что-то грузится и обрабатывается на сервере. При этом, штурм базы данных сервера показал, что он так или иначе обслуживает около десятка разных устройств и делает бекапы чуть ли не раз в 30 секунд, так что найти среди этого потока что-то полезное было весьма проблематично.
Одним словом, упёрлись в то, что программа была чёрным ящикам, и по внешней активности было сложно понять, как она работает. И тут я вспомнил про такую штуку как "декомпиляция". Проект на юнити, пока мы тыкали его палкой, выглядел довольно дёшево, и я предположил, что он вряд ли имеет внутри себя защиту от копания в потрохах. Загуглил как проводить декомпиляцию, и всё оказалось просто - скачиваешь утилиту dnSpy, открываешь конкретный файл. с данными, и программа вываливает на тебя весь набор из C#'овских классов. Покопавшись в списке, я нашёл класс с названием проекта и узнал... Забавную вещь. Основная самая полезная - что, оказывается, файлы сохраняются как Х. PNG и X.TXT, где пнгха это сама фотка человека, а в текстовом файле записан емейл. Сам о приложение ничего никуда не отправляет - в нём банально нет логики для этого. Самое загадочное - в конфиге можно было поменять место сохранения фотографий, и программа охотно сохраняла файл в другом месте (так мы и узнали, как выглядят вышеописанные файлы - из дефолтной папки файлы пропадали почти мгновенно, из-за чего мы думали, что она ничего не сохраняет), но вот если поменять параметр "URL", то адрес, куда ведёт QR код поменяется. Ну и мы выяснили, что по итогу эти фотографии якобы не сохранялись из-за того, что часть инфраструктуры работала - но только та, которая отправляла фотографии куда-то в пустоту и удаляла их со стенда. В общем, фиг пойми как это работает, но по итогу мысль у меня примерно такая. Прежде всего, можно поменять путь, по которому сохраняются картинки - как мы выяснили, это полностью предотвращает их потерю. После этого, можно будет быстренько написать дублирующий бекенд. С почтой всё легко - достаточно просто написать питоновский скрипт, который будет бомбить файлом на указанный ящик электронной почты. С QR-кодом всё сложнее. Он как-то хитро захардкожен в проект, а разбираться как заново пересобрать проект на Юнити ради такой чепухи мне влом, так что я сделаю мув из разряда C++, где C это сокращение от "Clown" - я просто возьму, и подменю DNS этого сервера на... Ну, например, локальный http-сервачок, который будет раздавать эти фотографии.
P.S. Пока писал эту заметку, коллега разобрался в чём дело. Одна из программ в структуре монструозного бекенда, который когда-то мониторил десяток таких машин, для чего-то использовал локальный аккаунт администратора... У которого просрочился пароль. Ага. Огромная система поломалась просто потому, что уто-то поставил галочку в поле "пароль истекает через" у одного из аккаунтов на виртуалке. Впрочем, это не решило всех наших проблем. QR-код заработал, стабильно раздавая фото по локалке, а вот на почту юзерам летела... Ссылка на наше локальное хранилище, а не сам файл. Я не знаю кто и зачем это сделал, но мы так и не нашли ту часть, которая отвечает за отправку фото на email. Видимо, всё-таки придётся что-то выдумывать с альтернативным бекендом.