Сегодня в выпуске: обнаружение динамически загружаемого приложением кода, реверс приложения для шифрования файлов, рассказ об истории создания StateFlow, SharedFlow и BroadcastChannel в Kotlin, статья с подборкой инструментов для серверной разработки на Kotlin, объяснение сути контрактов Kotlin, заметка о функции Surround With в IDEA и Android Studio. А также подборка свежих библиотек для разработчиков.
Detecting Dynamic Loading in Android Applications With /proc/maps — статья о том, как определить, загружает ли приложение дополнительный исполняемый код уже после своего старта. Так часто делают зловреды, чтобы избежать обнаружения зловредного кода.
Метод крайне простой. Достаточно иметь рутованный смартфон с установленным приложением и кабель для подключения к ПК. Далее выполняем команду adb shell
, чтобы открыть консоль устройства, получаем права root с помощью команды su
, узнаем имя PID (идентификатор процесса) нужного нам приложения:
$ ps -A | grep имя.пакета.приложения
PID будет во второй колонке. Теперь выполняем следующую команду, подставляя полученный PID:
cat /proc/PID/maps | grep '/data/data'
Файл /proc/PID/maps
синтетический. Он содержит таблицу всех отображенных в памяти процесса файлов. Первая часть приведенной команды читает этот файл. Вторая часть команды (grep /data/data
) оставляет в выводе только файлы из приватного каталога приложения (/data/data/имя.пакета.приложения
). Именно оттуда зловреды обычно загружают дополнительный код.
Decrypting images hidden with Calculator+ — разбор способа реверса и последующей расшифровки файлов приложения Calculator+ — Photo Vault & Video Vault hide photos. Пример крайне простой и поэтому хорошо подходит для демонстрации основ реверса приложений для Android.
Итак, есть приложение Calculator+, которое имеет неожиданную функцию секретного хранилища зашифрованных фотографий и видеороликов. Задача: вытащить эти фотографии, не используя само приложение.
1. Извлекаем приложение из смартфона:
$ adb shell pm list packages|grep calc $ adb shell pm path eztools.calculator.photo.vault $ adb pull /data/app/eztools.calculator.photo.vault-OP_MBoGMZN-LZ5wr50dNWA==/base.apk
2. Используем JADX-GUI для декомпиляции приложения обратно в исходный код Java.
3. С помощью встроенной функции поиска ищем все строки, имеющие отношение к шифрованию: encrypt, decrypt, AES и так далее. Автору удалось найти следующий фрагмент кода:
FileInputStream fileInputStream = new FileInputStream(this.f6363e.f6361a);ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();EncryptUtils.m10791a("12345678", fileInputStream, byteArrayOutputStream);byteArrayOutputStream.flush();ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());this.f6362d = byteArrayInputStream;aVar.mo2601d(byteArrayInputStream);
Метод EncryptUtils.m10791a()
оказался искомым методом шифрования.
Как видно из кода, метод шифрует файл алгоритмом DES и ключом, переданным ему в качестве аргумента. А в аргументе всегда передается строка 12345678.
4. Расшифровать файлы не составит труда, но сначала необходимо найти, где они хранятся. Для этого надо проследить за методами, вызывающими метод шифрования. В итоге нашелся такой код:
public static final File m18904s(Context context) { C3655i.m20371c(context, "context"); File externalFilesDir = context.getExternalFilesDir("photo_encrypt"); if (externalFilesDir != null) { return externalFilesDir; } C3655i.m20376h(); throw null;}
Это код создания объекта класса File во внешнем приватном каталоге приложения (context.getExternalFilesDir): /sdcard/Android/data/eztools.calculator.photo.vault/files
.
5. Теперь файлы можно извлечь и расшифровать. Автор написал для этого скрипт на Python, приводить его здесь я не буду.
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
1 год7690 р. |
1 месяц720 р. |
Я уже участник «Xakep.ru»
Читайте также
Последние новости