
Словари MDict в закрытом приложении, или зачем я писал RIPEMD-128 вручную
ZEDDTAY 8 минут назад Словари MDict в закрытом приложении, или зачем я писал RIPEMD-128 вручную Средний 4 мин 100 Kotlin * Разработка мобильных приложений * Реверс-инжиниринг * Криптография * Android * Кейс Зачем мне...
<5 — 2026'da uzaya kaç SpaceX Starship fırlatması ulaşacak?
Вот важная новость с фронта ИИ: ZEDDTAY 8 минут назад Словари MDict в закрытом приложении, или зачем я писал RIPEMD-128 вручную Средний 4 мин 100 Kotlin * Разработка мобильных приложений * Реверс-инжиниринг * Криптография * Android * Кейс Зачем мне MDXЯ делаю читалку для Android. Дошёл до офлайн-словарей. Форматов два ходовых, StarDict и MDX, делал сразу оба.
StarDict хорошо задокументирован, с ним просто. MDX это формат словарей MDict, и с ним тоньше. Сразу оговорюсь, чтобы не было ложного пафоса.
Технические детали
Сам формат я не реверсил. MDX проприетарный, официальной спеки от создателей нет, но сообщество разобрало его давным-давно, есть подробное описание всех секций (спека writemdict). Я взял это описание и написал по нему свою реализацию.
Работа была не «вскрыть секрет», а аккуратно реализовать чужое описание, включая ту часть, где начинается крипта. Почему не готовые библиотеки. Java-парсеры под MDX есть, mdict4j и eb4j.
Мне не подходит, лицензия обязала бы открыть код всей читалки. Плюс я специально держу приложение без внешних зависимостей. Значит, пишу свой парсер с нуля.
Отраслевые последствия
Дальше про то, как устроен формат, где я споткнулся, и почему пришлось руками писать RIPEMD-128. Три секцииФайл MDX это три секции подряд. Четыре байта длины, дальше XML-строка в UTF-16LE с атрибутами словаря, дальше контрольная сумма ADLER32.
Мне из атрибутов нужны версия движка, кодировка статей, формат разметки и флаг шифрования. Блок метаданных, потом keyword index, потом keyword-блоки. Index это оглавление.
Для каждого блока в нём записано число слов, первое и последнее слово, размеры блока в сжатом и распакованном виде. Устроена так же, метаданные плюс таблица размеров, потом блоки со статьями. MDX умеет random access из коробки.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





