Как не надо делать защиту файлов или расшифровываем зашифрованное

Как всегда внезапно, появился неожиданный челлендж.

Один товарищ с очумелыми ручками расковырял свой андроид девайс и обнаружил, что все книги, которые он читает через приложение litres.ru хранятся на его устройстве. Прекрасно, казалось бы? Теперь же можно их оттуда скопировать и читать в более привычных для себя читалках. Но не все так просто. Файлы книг зашифрованы. И вот тут в истории появляюсь я.

Что бы узнать как зашифрована книга, надо получить исходный код которым было выполнено это шифрование. Но как это сделать? Оказывается в случае с android приложениями все довольно просто.

1) Качаем из бескрайнего интернета apk файл приложения litres.ru. Я скачал отсюда https://www.apkmirror.com/apk/litres/read-books-online/read-books-online-3-92-02-gp-release/litres-books-3-92-02-gp-android-apk-download/

2) Декомпилируем при помощи http://www.javadecompilers.com/

3) Если повезет, то получаем вполне себе приемлемого качества исходники (мне повезло)

А дальше начинается самый интересный этап. Необходимо среди примерно 400мб различных файлов найти необходимый кусок кода. Тут уже никаких универсальных советов дать не получится. Я искал полнотекстовым поискам по различным, как мне казалось подходящим словам "decrypt", "decode", "secret" и т.д.

И удача мне улыбнулась. Я нашел вот это:

Здесь представлен код на языке java, который как раз таки занимается расшифровыванием файла с книгой. Из полезного тут:

1) Алгоритм шифрования — AES/CBC/PKCS5Padding

2) И секрет — SECRET_PWD (он замазан)

Имея на руках алгоритм шифрования и секрет, уже не составляет проблем написать дешифратор.

Воспроизводим этот код на любом удобным языке программирования. Мой выбор пал на python. Получилось следующее

Перед запуском надо выполнить pip install pycryptodomex

А теперь мораль истории. Почему же так не надо делать делать шифрование? А ответ довольно прост: для расшифровки АБСОЛЮТНО любой книги, купленной на litres.ru достаточно этих четырех строчек. Все книги зашифрованы абсолютно одинаково, с использованием одного и того же секрета (который как раз таки на скринах замазан). С точки зрения безопасности — это тотальная дыра.

Конечно же идеальной защиты не существует и все можно обойти. Вопрос только в затраченных на этот обход ресурсах. В данном случае затраченные ресурсы минимальны и на выходе получается универсальный алгоритм, для работы которого требуется только зашифрованная книга.