Имеем приложение чата и зашифрованный файл базы данных, экспортированный из этого приложения
- С помощью программы JadxGUI декомпилим apk файл
В исходниках находим
- файл
Utility.java
с методом для шифрования базы данных - В файле
ChatActivity.java
находим id админаJ85qLk4N3GQy3puROgkyGUwgEAT2
- Создаем пустой Android проект и копируем туда
Utility.java
, удаляя ненужный код
Как видно в методе encryptDatabase
- из
userid
берется подстрока из последних 3 символов - из внутренних файлов приложения загружается файл ключа шифрования
enc_key
- при отсутствии этот файл создается с помощью подстроки
- с помощью рандома генерится вектор инициализации
- генерится метаданные о файле включающие дату шифрования и подстроку пользователя
- все эти данные укладываются в зашифрованный файл
- первые два байта размер метаданных (в типе short)
- 16 байт вектора инициализации
- метаданные
- сама исходная база, зашифрованная и сжатая с помощью
DeflaterOutputStream
- 16 байт подписи
- Загружаем зашифрованную базу во внутреннюю память приложения
/data/data/com.example.okroshka/files/MessengerDB.db_enc
- Теперь зная алгоритм шифрования, надо написать дешифратор
Зная об id админа, пробует подставить его в алгоритм
Дешифровать базу не получится, по мы получаем метаданные 2024-04-19 23:01:38_D13
, по которым видно, что базу экспортировал другой пользователь, с id, заканчивающимся на D13
. Используем на этот его, предварительно удаляя неверный enc_key
- Скачиваем дешифрованную базу и открываем ее
Видим таблицу messages
с перепиской и забираем оттуда код