uk141 25 октября 2026 23:07
Какой-то лютейший треш.
Вчера сидел себе спокойно, делал вещи. А потом думаю, ба! Я же делаю штуку, которая позволяет запланировать вышивки, посмотреть какие цвета, где и сколько есть и если не есть - дозаказать удобно, сразу на несколько вышивок, без выписывания всего на свете на бумажку цвета, семь раз перепроверять и ставить крестики и потом заказывать, но в итоге каждый раз не то.
А вот было бы классно кидать туда тупо схему и чтобы скрипт:
Нужно как-то разобраться, как оно там хранится. Но это нам не впервой. Создаем вышивку 1*1 пиксель, полностью заливаем черным DMC-310, сохраняем. Меняем цвет на красный DMC-666 и еще раз сохраняем.
Открываем в hex редакторе и смотрим что там вышло. Где одинаково - это нам не интересно. Где отличается - это вот то, что нужно.
Я: Смотри, нейронные мозги. Вот такая задача, вот такая мысль, вот они - данные
ИИ: Так это zip архив внутри файла. Он просто не с самого начала начинается.
Я: Как волнительно, давай мы это распакуем.
Внутри оказалось:
CrossStitch3.ttf - файл со шрифтом... Чтобы все спрашивали, наверное
hoops.xpub
hoop_0.xpub
info.xpub
Не знаю, кто такой xpub, но файл открывается текстовым редактором и там что? A-Z,a-z,0-9 чуток символов и два == в конце? Да это же base64!
Ну вот тут халява и кончилась.
Оказалось, что этот base64 не расшифровывается примерно никак.
Но есть ведь apk файл приложения, который его и зашифровал. Разве там не должно быть описано, как именно приложение этот код открывает и читает и преобразовывает? Тем более, что apk это... Да, это тупо zip.
Установив себе JADX и открыв файл, оказалось, что внутри почти ничего нет. Совсем чуток кода, картинки и два файла libmain.so по 60 мегабайт. На самом деле - приложение это вот этот libmain.so, а всё остальное - это приблуда, чтобы отрисовывать всякое на экране. И в этом есть смысл. Приложение же выходит под андроид и IOS и разработчики, наверняка делают одно приложение и потом имеют 2 "нашлепки", чтобы оно запускалось под две ОСи.
Спускаемся глубже. Приложение Ghidra, которое открыло скомпилированный файл и показало мне - древо с функциями, код на ассемблере и для некоторых функций - псевдокод на си.
Довольно быстро нашлись:
Функция base64Encode и base64Decode, которые действительно просто кодируют как обычно.
Функция DecryptSecretHeader, которая... Ну, я не уверен, потому что там кода на си на МЕГАБАЙТ и что интересно - она ниоткуда не вызывается, как я понял.
Как я понял - приложение собирает информацию в xml, потом есть слой кодирования, который делает со строкой какие-то непотребства (чтобы меня пораздражать, видимо) и потом уже результатирующая строка кодируется в base64. Причем, второй шаг имеет какой-то каскадный эффект. Один символ изменяется и это влияет на всю последующую строку. Потому что строка у вышивки с черным пикселем, с красным и Маяк от Окнеас имеют одинаковое начало, но как только доходит до указания цвета и всё дальше - всё отличается.
Добавив к этому безумию еще эмулятор Андроида, совместно написали хуки для эмулятора и получилось сделать магию. Если в приложении загрузить схему - хук поймает момент вызова и расшифрованную схему сохранит в файл. Оттуда можно достать всю информацию, что нужно.
И вот на это я вчерашний вечер потратил и весь сегодняшний день.
Как бы, результат есть и вижу я варианты.
А, ну еще один:
нужно войти, чтобы комментировать