- •От издательства
- •О техническом обозревателе
- •О соавторах
- •Об авторах
- •Вступительное слово
- •Благодарности
- •Предисловие
- •Почему важна защита интернета вещей?
- •Чем защита интернета вещей отличается от традиционной ИТ-защиты?
- •Законы хакинга интернета вещей
- •Заключение
- •Моделирование угроз для интернета вещей
- •Схема моделирования угроз
- •Определение архитектуры
- •Разбивка архитектуры на компоненты
- •Выявление угроз
- •Использование деревьев атак для обнаружения угроз
- •Распространенные угрозы интернета вещей
- •Атаки с подавлением сигнала
- •Атаки с воспроизведением
- •Атаки со взломом настроек
- •Клонирование узла
- •Заключение
- •Пассивная разведка
- •Физический или аппаратный уровень
- •Периферийные интерфейсы
- •Среда загрузки
- •Блокировки
- •Предотвращение и обнаружение несанкционированного доступа
- •Прошивка
- •Интерфейсы отладки
- •Физическая устойчивость
- •Разведка
- •Атаки на сетевой протокол и службы
- •Тестирование беспроводного протокола
- •Оценка веб-приложений
- •Картирование приложений
- •Элементы управления на стороне клиента
- •Аутентификация
- •Управление сеансом
- •Проверка ввода
- •Логические ошибки
- •Сервер приложений
- •Исследование конфигурации хоста
- •Учетные записи пользователей
- •Привилегии учетной записи
- •Уровни патчей
- •Удаленное обслуживание
- •Управление доступом к файловой системе
- •Шифрование данных
- •Неверная конфигурация сервера
- •Мобильное приложение и облачное тестирование
- •Заключение
- •4. Оценка сети
- •Переход в сеть IoT
- •VLAN и сетевые коммутаторы
- •Спуфинг коммутатора
- •Двойное тегирование
- •Имитация устройств VoIP
- •Идентификация устройств IoT в сети
- •Обнаружение паролей службами снятия отпечатков
- •Атаки MQTT
- •Настройка тестовой среды
- •Написание модуля MQTT Authentication-Cracking в Ncrack
- •Тестирование модуля Ncrack на соответствие MQTT
- •Заключение
- •5. Анализ сетевых протоколов
- •Проверка сетевых протоколов
- •Сбор информации
- •Анализ
- •Создание прототипов и разработка инструментов
- •Работа с Lua
- •Общие сведения о протоколе DICOM
- •Генерация трафика DICOM
- •Включение Lua в Wireshark
- •Определение диссектора
- •Определение основной функции диссектора
- •Завершение диссектора
- •Создание диссектора C-ECHO
- •Начальная загрузка данных функции диссектора
- •Анализ полей переменной длины
- •Тестирование диссектора
- •Разработка сканера служб DICOM для механизма сценариев Nmap
- •Написание библиотеки сценариев Nmap для DICOM
- •Коды и константы DICOM
- •Написание функций создания и уничтожения сокетов
- •Создание заголовков пакетов DICOM
- •Написание запросов контекстов сообщений A-ASSOCIATE
- •Чтение аргументов скрипта в движке сценариев Nmap
- •Определение структуры запроса A-ASSOCIATE
- •Анализ ответов A-ASSOCIATE
- •Создание окончательного сценария
- •Заключение
- •6. Использование сети с нулевой конфигурацией
- •Использование UPnP
- •Стек UPnP
- •Распространенные уязвимости UPnP
- •Злоупотребление UPnP через интерфейсы WAN
- •Другие атаки UPnP
- •Использование mDNS и DNS-SD
- •Как работает mDNS
- •Как работает DNS-SD
- •Проведение разведки с помощью mDNS и DNS-SD
- •Злоупотребление на этапе проверки mDNS
- •Атаки «человек посередине» на mDNS и DNS-SD
- •Использование WS-Discovery
- •Как работает WS-Discovery
- •Подделка камер в вашей сети
- •Создание атак WS-Discovery
- •Заключение
- •UART
- •Аппаратные средства для связи с UART
- •Как найти порты UART
- •Определение скорости передачи UART
- •JTAG и SWD
- •JTAG
- •Как работает SWD
- •Аппаратные средства для взаимодействия с JTAG и SWD
- •Идентификация контактов JTAG
- •Взлом устройства с помощью UART и SWD
- •Целевое устройство STM32F103C8T6 (Black Pill)
- •Настройка среды отладки
- •Кодирование целевой программы на Arduino
- •Отладка целевого устройства
- •Заключение
- •Как работает SPI
- •Как работает I2C
- •Настройка архитектуры шины I2C типа «контроллер–периферия»
- •Заключение
- •9. Взлом прошивки
- •Прошивка и операционные системы
- •Получение доступа к микропрограмме
- •Взлом маршрутизатора Wi-Fi
- •Извлечение файловой системы
- •Статический анализ содержимого файловой системы
- •Эмуляция прошивки
- •Динамический анализ
- •Внедрение бэкдора в прошивку
- •Нацеливание на механизмы обновления микропрограмм
- •Компиляция и установка
- •Код клиента
- •Запуск службы обновления
- •Уязвимости служб обновления микропрограмм
- •Заключение
- •10. Радио ближнего действия: взлом rFID
- •Радиочастотные диапазоны
- •Пассивные и активные технологии RFID
- •Структура меток RFID
- •Низкочастотные метки RFID
- •Высокочастотные RFID-метки
- •Настройка Proxmark3
- •Обновление Proxmark3
- •Клонирование низкочастотных меток
- •Клонирование высокочастотных меток
- •Имитация RFID-метки
- •Изменение содержимого RFID-меток
- •Команды RAW для небрендированных или некоммерческих RFID-тегов
- •Подслушивание обмена данными между меткой и считывателем
- •Извлечение ключа сектора из перехваченного трафика
- •Атака путем подделки RFID
- •Автоматизация RFID-атак с помощью механизма скриптов Proxmark3
- •Пользовательские сценарии использования RFID-фаззинга
- •Заключение
- •11. Bluetooth Low Energy (BLE)
- •Как работает BLE
- •Необходимое оборудование BLE
- •BlueZ
- •Настройка интерфейсов BLE
- •Обнаружение устройств и перечисление характеристик
- •GATTTool
- •Bettercap
- •Взлом BLE
- •Настройка BLE CTF Infinity
- •Приступаем к работе
- •Заключение
- •12. Радиоканалы средней дальности: взлом Wi-Fi
- •Как работает Wi-Fi
- •Атаки Wi-Fi на беспроводные клиенты
- •Деаутентификация и атаки «отказ в обслуживании»
- •Атаки на Wi-Fi путем подключения
- •Wi-Fi Direct
- •Атаки на точки доступа Wi-Fi
- •Взлом WPA/WPA2
- •Взлом WPA/WPA2 Enterprise для сбора учетных данных
- •Методология тестирования
- •Заключение
- •13. Радио дальнего действия: LPWAN
- •Захват трафика LoRa
- •Настройка платы разработки Heltec LoRa 32
- •Настройка LoStik
- •Превращаем USB-устройство CatWAN в сниффер LoRa
- •Декодирование протокола LoRaWAN
- •Формат пакета LoRaWAN
- •Присоединение к сетям LoRaWAN
- •Атаки на LoRaWAN
- •Атаки с заменой битов
- •Генерация ключей и управление ими
- •Атаки воспроизведения
- •Подслушивание
- •Подмена ACK
- •Атаки, специфичные для приложений
- •Заключение
- •14. Взлом мобильных приложений
- •Разбивка архитектуры на компоненты
- •Выявление угроз
- •Защита данных и зашифрованная файловая система
- •Подписи приложений
- •Аутентификация пользователя
- •Управление изолированными аппаратными компонентами и ключами
- •Проверенная и безопасная загрузка
- •Анализ приложений iOS
- •Подготовка среды тестирования
- •Статический анализ
- •Динамический анализ
- •Атаки путем инъекции
- •Хранилище связки ключей
- •Реверс-инжиниринг двоичного кода
- •Перехват и изучение сетевого трафика
- •Анализ приложений Android
- •Подготовка тестовой среды
- •Извлечение файла APK
- •Статический анализ
- •Обратная конвертация двоичных исполняемых файлов
- •Динамический анализ
- •Перехват и анализ сетевого трафика
- •Утечки по побочным каналам
- •Заключение
- •15. Взлом умного дома
- •Физический доступ в здание
- •Клонирование RFID-метки умного дверного замка
- •Глушение беспроводной сигнализации
- •Воспроизведение потока с IP-камеры
- •Общие сведения о протоколах потоковой передачи
- •Анализ сетевого трафика IP-камеры
- •Извлечение видеопотока
- •Атака на умную беговую дорожку
- •Перехват управления интеллектуальной беговой дорожкой на базе Android
- •Заключение
- •Инструменты для взлома интернета вещей
- •Предметный указатель
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
|
X |
|
|
|
|
|
|||
|
|
- |
|
|
|
|
|
d |
|
||
|
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
|||
P |
|
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
BUY |
|
|
|||
Простой способ отключить сравнение – заменить команду je (код |
|
|
|
to |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
m |
||
w Click |
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
df-x chan |
|
o |
|
|||||
операции 0x0F84) на команду jne (код операции 0x0F85),которая воз- |
. |
.c |
|
||||||||
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
|
e |
|
вращает прямо противоположный результат. Соответственно, когда процессор достигнет этого шага, он продолжит выполнение в блоке и сообщит, что устройство не взломано.
Обратите внимание, что эта версия двоичного файла разработана для симулятора iOS. Бинарный файл для физического устройства iOS будет содержать эквивалентную операцию ARM64 TBZ.
Измените представление, нажав клавишу q, чтобы выйти из пред- ставления графика,а затем p для входа в режим сборки.Это позволя- ет нам получить адрес операции в двоичном файле (вытакже можете использовать непосредственно pd):
[0x003115c0]> q |
|
|
|
[0x003115c0]> p |
|
|
|
… |
|
|
|
0x1000a7218 |
f645e701 |
test byte |
[var_19h], 1 |
< 0x1000a721c |
0f8423000000 |
je 0x1000a7245 |
...
[0x1000f7100]> wx 0f8523000000 @ 0x1000a721c
Затем можно повторно подписать и переустановить приложение в симуляторе:
$ /usr/bin/codesign --force --sign - --timestamp=none ~/Library/Developer/Xcode/DerivedData/ iGoat-<id приложения>/Build/Products/Debug-iphonesimulator/iGoat.app
replacing existing signature
Если бы мы работали на физическом устройстве,нам пришлось бы использовать один из методов повторной подписи двоичного файла для установки измененного двоичного файла.
Анализ приложений Android
В этом разделе мы проанализируем приложение InsecureBankV2 для ОС Android.Как и iGoat,это приложение не предназначено специаль- но для интернета вещей, но мы сосредоточимся на уязвимостях, ко- торые применимы и к устройствам интернета вещей.
Подготовка тестовой среды
Android не имеетограничений по выборутестовой среды,и вы може- те успешно оценить, работает ли ваша операционная система в Win- dows, macOS или Linux. Чтобы настроить среду, установите Android Studio IDE (https://developer.android.com/studio/releases/). Кроме того, вы можете установить пакет разработки программного обеспечения
414 Глава 14
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
|
X |
|
|
|
|
|
|||
|
|
- |
|
|
|
|
|
d |
|
||
|
|
F |
|
|
|
|
|
|
t |
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
|
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
|
to |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(SDK) для Android и Android SDK Platform Tools напрямую, загрузив |
|
|
|
|
|
m |
|||||
|
w Click |
|
|
|
|
|
|
||||
|
w |
|
|
|
|
|
|
|
|
|
|
ZIP-файлы с того же веб-сайта. |
|
w |
|
df-x chan |
|
o |
|
||||
|
. |
.c |
|
||||||||
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
|
e |
|
Запустите службу Android Debug Bridge, представляющую собой двоичный файл, который взаимодействует с устройствами Android и эмуляторами и идентифицирует подключенные устройства с по мощью следующей команды:
$ adb start-server
*daemon not running; starting now at tcp:5037
*daemon started successfully
Внастоящее время к нашему хосту не подключены никакие эму- ляторы или устройства. Мы можем легко создать новый эмулятор
спомощью диспетчера виртуальных устройств Android (AVD), кото- рый включен в инструменты Android Studio и Android SDK. Получите доступ кAVD,загрузите нужную версиюAndroid,установите ее,дайте имя своему эмулятору, запустите его – и вы готовы к работе.
Теперь, когда мы создали эмулятор, давайте откроем его, выпол- нив команды, где перечислены устройства, подключенные к вашей системе.Эти устройства могут быть фактическими устройствами или эмуляторами:
$ adb devices emulator-5554 device
Отлично, эмулятор обнаружен. Теперь мы установим уязвимое приложение для Android в эмулятор. Скачайте приложение Insecure-
BankV2 по адресу https://github.com/dineshshetty/Android-InsecureBankv2/.
Приложения Android используют формат файла, который называет-
ся пакетом Android (APK). Чтобы установить APK InsecureBankV2 на наш эмулятор, перейдите в папку с целевым приложением и затем используйте команду:
$ adb -s emulator-5554 install app.apk
Performing Streamed Install Success
Теперь вы должны увидеть значок приложения в симуляторе, ука- зывающий, что установка прошла успешно. Вам также следует запус тить InsecureBankV2 AndroLab – внутренний сервер python2, исполь-
зуя команды, которые можно найти в том же репозитории GitHub.
Извлечение файла APK
В некоторых случаях вам может потребоваться изучить конкретный файл APK отдельно от остальной части устройства Android. Для этого используйте следующие команды для извлечения APK из устройства
Взлом мобильных приложений 415
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
|
X |
|
|
|
|
|
|||
|
|
- |
|
|
|
|
|
d |
|
||
|
|
F |
|
|
|
|
|
|
t |
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
|
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
BUY |
|
|
|||
(или эмулятора).Для извлечения пакета нам нужно знатьпутьк нему. |
|
|
to |
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
m |
|||
|
w Click |
|
|
|
|
|
|
||||
|
w |
|
|
|
|
|
|
|
|
|
|
Мы можем определить путь, перечислив соответствующие пакеты: |
|
w |
|
df-x chan |
|
o |
|
||||
|
. |
.c |
|
||||||||
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
|
e |
|
$ adb shell pm list packages com.android.insecurebankv2
Определив путь, извлекаем приложение с помощью команды adb pull:
adb shell pm path com.android.insecurebankv2 package:/data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
$ adb pull /data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
: 1 file pulled. 111.6 MB/s (3462429 bytes in 0.030s)
Эта команда извлекает APK в текущий рабочий каталог вашей хост-системы.
Статический анализ
Начнем со статического анализа, исследуя файл APK, который вам сначала нужно распаковать. Используйте apktool (https://ibotpeaches. github.io/Apktool/), чтобы извлечь всю необходимую информацию из APK без потери данных:
$ apktool d app.apk
I: Using Apktool 2.4.0 on app.apk I: Loading resource table...
….
Один из самых важных файлов в APK–AndroidManifest.xml.Мани- фест Android – это файл с двоичной кодировкой, содержащий такую информацию, как используемые активности (Activities). Активности в приложении для Android – это экраны в пользовательском интер- фейсе приложения. Все приложения Android имеют по крайней мере одну активность,и имя основной из них включено в файл манифеста. Это действие выполняется при запуске приложения.
Кроме того, файл манифеста содержит разрешения, необходимые приложению, поддерживаемые версии Android и экспортированные активности, которые могут быть подвержены уязвимостям, помимо других функций. Экспортированная активность – это пользователь- ский интерфейс, который могут запускать компоненты различных приложений.
Файл classes.dex содержит исходный код приложения в формате исполняемого файла Dalvik (DEX). В папке META-INF вы найдете раз- личные метаданные из файла APK. В папке res собраны скомпилиро- ванные ресурсы, а в папке assets – ресурсы приложения. Мы же со-
416 Глава 14
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
|
X |
|
|
|
|
|
|||
|
|
- |
|
|
|
|
|
d |
|
||
|
|
F |
|
|
|
|
|
|
t |
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
|
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
|
to |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
средоточимся в основном на изучении AndroidManifest.xml и файлов |
|
|
|
|
|
m |
|||||
|
w Click |
|
|
|
|
|
|
||||
|
w |
|
|
|
|
|
|
|
|
|
|
формата DEX. |
|
w |
|
df-x chan |
|
o |
|
||||
|
. |
.c |
|
||||||||
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
|
e |
|
Автоматизация статического анализа
Рассмотрим некоторые инструменты, которые помогут вам выпол- нить статический анализ. Но будьте осторожны, основывая весь свой тесттолько на автоматизированных инструментах: они не идеальны, и вы можете пропустить критическую проблему.
Используйте Qark (https://github.com/linkedin/qark/), чтобы проскани-
ровать исходный код и APK-файл приложения. С помощью следую- щей команды выполним статический анализ двоичного файла:
$ qark --apk path/to/my.apk
Decompiling sg/vantagepoint/a/a...
...
Running scans...
Finish writing report to /usr/local/lib/python3.7/site-packages/qark/report/
report.html ...
Это займет некоторое время. Помимо Qark, можно использовать инструмент MobSF, упомянутый ранее в этой главе.
Обратная конвертация двоичных исполняемых файлов
ИнструментQark,который вытолько что запустили,выполнил обрат- ную конвертацию двоичного файла, чтобы выполнить его проверку. Попробуемсделатьэтовручную.КогдавыизвлекалифайлыизAPK,то получили множество файлов DEX, содержащих скомпилированный код приложения. Теперь переведем этот байт-код, чтобы сделать его более читабельным.
Для этого воспользуемся инструментом Dex2jar (https://github.com/ pxb1988/dex2jar/), преобразующим байт-код в файл JAR:
$ d2j-dex2jar.sh app.apk
dex2jar app.apk -> ./app-dex2jar.jar
Еще один отличный инструментдля этой цели–Apkx (https://github. com/b-mueller/apkx/), который является оболочкой для различных де- компиляторов. Помните, что, даже если один декомпилятор не сра- ботает,другой может работать успешно.
Теперь мы воспользуемся программой просмотра JAR, чтобы про- смотреть исходный код APK и легко его прочитать. Отличный ин- струмент для этой цели – JADX, запускаемый командой jadx-gui для работы с графическим интерфейсом (https://github.com/skylot/jadx/).
По сути, он пытается декомпилировать APK и позволяет вам пере- мещаться по декомпилированному коду в текстовом формате с под-
Взлом мобильных приложений 417