- •От издательства
- •О техническом обозревателе
- •О соавторах
- •Об авторах
- •Вступительное слово
- •Благодарности
- •Предисловие
- •Почему важна защита интернета вещей?
- •Чем защита интернета вещей отличается от традиционной ИТ-защиты?
- •Законы хакинга интернета вещей
- •Заключение
- •Моделирование угроз для интернета вещей
- •Схема моделирования угроз
- •Определение архитектуры
- •Разбивка архитектуры на компоненты
- •Выявление угроз
- •Использование деревьев атак для обнаружения угроз
- •Распространенные угрозы интернета вещей
- •Атаки с подавлением сигнала
- •Атаки с воспроизведением
- •Атаки со взломом настроек
- •Клонирование узла
- •Заключение
- •Пассивная разведка
- •Физический или аппаратный уровень
- •Периферийные интерфейсы
- •Среда загрузки
- •Блокировки
- •Предотвращение и обнаружение несанкционированного доступа
- •Прошивка
- •Интерфейсы отладки
- •Физическая устойчивость
- •Разведка
- •Атаки на сетевой протокол и службы
- •Тестирование беспроводного протокола
- •Оценка веб-приложений
- •Картирование приложений
- •Элементы управления на стороне клиента
- •Аутентификация
- •Управление сеансом
- •Проверка ввода
- •Логические ошибки
- •Сервер приложений
- •Исследование конфигурации хоста
- •Учетные записи пользователей
- •Привилегии учетной записи
- •Уровни патчей
- •Удаленное обслуживание
- •Управление доступом к файловой системе
- •Шифрование данных
- •Неверная конфигурация сервера
- •Мобильное приложение и облачное тестирование
- •Заключение
- •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 |
|
|
|||
Также можно использовать команду pdc для генерации псевдокода |
|
|
|
to |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
m |
||
w Click |
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
df-x chan |
|
o |
|
|||||
и декомпиляции конкретной функции. В этом случае Radare2 авто- |
. |
.c |
|
||||||||
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
|
e |
|
матически разрешает и представляет ссылки на другие функции или строки:
[0x00321b8f]> pdc @method.BrokenCryptographyExerciseViewController.viewDidLoad function sym.func.1001ac808 () {
loc_0x1001ac808:
…
x8 = x8 + 0xca8 //0x1003c1ca8 ; str.cstr.b_nkP_ssword123 ; (cstr 0x10036a5da) "b@nkP@ssword123"
Мы можем легко извлечь жестко запрограммированное значение b@nkP@ssword123, которое вы можете использовать для аутентифика- циипривыполнениизадачиHardcodedKeys(Жесткозакодированные ключи) категории Key Management (Управление ключами) в функци- ях приложения.
Используя аналогичную тактику, исследователи обнаружили уяз- вимость в более ранних версиях мобильного приложения MyCar Controls (https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-9493/).
Приложение позволяет пользователям удаленно запускать, оста- навливать,блокироватьи разблокироватьсвой автомобиль.Оно со- держало жестко запрограммированные учетные данные админист ратора.
Перехват и изучение сетевого трафика
Другой важной частью оценки приложения для iOS является провер- ка его сетевого протокола и запрошенных вызовов API сервера.Боль- шинство мобильных приложений в основном использует протокол HTTP, поэтому здесь мы остановимся именно на нем. Чтобы пере- хватить трафик, мы будем использовать версию Burp Proxy Suite для организаций, которая запускает прокси-сервер, выполняющий роль посредникамеждумобильнымустройствомицелевымвеб-сервером.
Вы можете найти его по адресу https://portswigger.net/burp/.
Чтобы ретранслировать трафик, вам необходимо выполнить ата- кутипа«человекпосередине».Ееможнопроводитьразнымиспособа- ми.Поскольку мы просто пытаемся проанализироватьприложение, а не воссоздать реалистичную атаку, мы выберем самый простой путь атаки: указать HTTP-прокси в настройках сети устройства. На физическом устройстве Apple можно настроить прокси-сервер HTTP, перейдя к подключенной беспроводной сети. Оказавшись там, измените параметр прокси в системе macOS на внешний IPv4адрес, на котором вы будете запускать Burp Proxy Suite, используя порт 8080. В симуляторе iOS укажите глобальный системный прок- си в сетевых настройках macOS, убедившись, что для веб-прокси (HTTP) и защищенного веб-прокси (HTTPS) установлено одинако- вое значение.
410 Глава 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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
После настройки параметров прокси на устройстве Apple весь тра- |
|
|
|
|
|
m |
||||
w Click |
|
|
|
|
|
|
||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
фик будет перенаправлен на Burp Proxy Suite. Например, если мы исd-f-x chan |
.c |
|
||||||||
|
. |
|
|
|
|
|
|
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
e |
|
пользуем задачу аутентификации в приложении iGoat, можем захва- тить следующий HTTP-запрос, который содержит имя пользователя и пароль:
GET /igoat/token?username=donkey&password=hotey HTTP/1.1
Host: localhost:8080
Accept: */*
User-Agent: iGoat/1 CFNetwork/893.14 Darwin/17.2.0
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: close
Если приложение использовало SSL для защиты промежуточного соединения, нам пришлось бы выполнить дополнительный шаг по установке специально созданного сертификата SSL центра сертифи- кации (ЦС) в нашу среду тестирования. Burp Proxy Suite может авто- матически сгенерировать для нас этот ЦС. Вы можете получить его, перейдя к IP-адресу прокси с помощью веб-браузера, а затем щел- кнув ссылку Certificate (Сертификат) в правом верхнем углу экрана.
Приложение Akerun Smart Lock Robot для iOS (https://www.cvedetails. com/cve/CVE-2016-1148/) содержало аналогичную проблему. Точнее, исследователи обнаружили, что все версии приложений до 1.2.4 не проверяют SSL-сертификаты, что позволяет при помощи атаки типа «человек посередине» подслушивать обмен зашифрованными сооб- щениями с умным замком.
Обход механизма обнаружения джейлбрейка с помощью динамического патча
В этом разделе мы изменим код приложения, когда он выполняет- ся в памяти устройства, и динамически внесем патч (модификацию) в его компонент контроля безопасности с целью обхода защиты. Мы выберем компонент приложения, который выполняет проверку це- лостности среды.Для проведения этой атаки будем использовать ин- струментарий Frida (https://frida.re/). Вы можете установить его с по мощью диспетчера пакетов pip для Python:
$ pip install frida-tools
Затем найдите функцию или вызов API, который выполняет про- верку целостности среды. Поскольку исходный код доступен, мы мо- жем легко обнаружить вызов функции в классе iGoat/String Analysis/ Method Swizzling/MethodSwizzlingExerciseController.m. Эта проверка безопасности работает только на физических устройствах, поэтому вы не увидите никакой разницы, когда она активна в симуляторе:
Взлом мобильных приложений 411
|
|
|
|
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 |
|
|
|
|
assert((NSStringFromSelector(_cmd) isEqualToString:@"fileExistsAtPath:"]); // Check for if this is a check for standard jailbreak detection files
if ([path |
hasSuffix:@"Cydia.app"] || |
|
[path |
hasSuffix:@"bash"] |
|| |
[path |
hasSuffix:@"MobileSubstrate.dylib"] || |
|
[path |
hasSuffix:@"sshd"] |
|| |
[path |
hasSuffix:@"apt"])_ |
|
|
|
|
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 |
|
||
|
|
|
|
-x cha |
|
|
|
|
Динамически изменяя эту функцию, мы можем заставить возвра- щаемый параметр всегда сообщать об успешном выполнении про- верки. Используя фреймворк Frida, создаем файл jailbreak.js с кодом, который обеспечит желаемое:
var hook = ObjC.classes.NSFileManager["- fileExistsAtPath:"]; Interceptor.attach(hook.implementation, {
onLeave: function(retval) { retval.replace(0x01);
},
});
Код начинается с поиска файла функции Objective-C – ExistsAtPath из класса NSFileManager и возвращает указатель на эту функцию . Затем он присоединяет к этой функции перехватчик, который динамически устанавливает обратный вызов с именем onLeave. Этот обратный вызов будет выполняться в конце функции, и он настроен так,чтобы всегда заменять исходное возвращаемое значение на 0x01 (код успешного выполнения) .
Затем применяем патч, подключив инструмент Frida к соответ- ствующему процессу приложения:
$ frida -l jailbreak.js -p 59843
Вы можете найти точный синтаксис фреймворка Frida для приме- ненияпатчейкметодамObjective-Cвонлайн-документациипоадре-
су https://frida.re/docs/javascript-api/#objc/.
Как обойти обнаружение джейлбрейка с помощью статического патча
Вы можете обойти обнаружение джейлбрейка с помощью стати- ческого патча. Давайте воспользуемся Radare2 для анализа сборки и внесения изменений в двоичный код. Например, мы можем заме- нить результат сравнения fileExists на утверждение, которое всегда истинно. Вы найдете функцию fetchButtonTapped в файле, располо-
женном по адресу iGoat/String Analysis/Method Swizzling/MethodSwiz- zlingExerciseController.m:
412 Глава 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 |
|
|
|
|
|
|
-(IBAction)fetchButtonTapped:(id)sender { |
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
||||||
|
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
|
p |
|
|
|
|
g |
|
|
|
... |
|
|
|
df |
-x cha |
|
e |
|
|||
|
|
|
|
|
|
n |
|
|
|
if (fileExists)
[self displayStatusMessage:@"This app is running on ...
else
[self displayStatusMessage:@"This app is not running on ...
Поскольку мы хотим переустановить исправленную версию кода в симуляторе, будем работать с версией приложения Debug-iphonesi- mulator, которая находится в папке данных, полученных из Xcode, о которой уже шла речь в разделе «Извлечение и повторная подпись IPA».Сначалаоткрываемдвоичныйфайлврежимезаписиспомощью параметра -w:
$ r2 -Aw ~/Library/Developer/Xcode/DerivedData/iGoat-<id приложения>/Build/
Products/Debug-iphonesimulator/iGoat.app/iGoat [0x003115c0]> fs; f | grep fetchButtonTapped
0x1000a7130 326 sym.public_int_MethodSwizzlingExerciseController::fetchButton Tapped_int
0x1000a7130 1 method.MethodSwizzlingExerciseController.fetchButtonTapped: 0x100364148 19 str.fetchButtonTapped:
На этот раз вместо того, чтобы поручать Radare2 дизассемблиро- вать или декомпилировать приложение с помощью команд pdf и pdc, мы перейдем к графическому представлению, используя команду VV, а затем нажав p на клавиатуре. Это представление упрощает поиск ветвлений бизнес-логики приложения:
[0x1000ecf64]> VV @ method.MethodSwizzlingExerciseController.fetchButtonTapped:
Эта команда должна создать графическое представление,показан- ное на рис. 14.11.
Рис.14.11.Графическое представление Radare2,представляющее логический переключатель
Взлом мобильных приложений 413