- •От издательства
- •О техническом обозревателе
- •О соавторах
- •Об авторах
- •Вступительное слово
- •Благодарности
- •Предисловие
- •Почему важна защита интернета вещей?
- •Чем защита интернета вещей отличается от традиционной ИТ-защиты?
- •Законы хакинга интернета вещей
- •Заключение
- •Моделирование угроз для интернета вещей
- •Схема моделирования угроз
- •Определение архитектуры
- •Разбивка архитектуры на компоненты
- •Выявление угроз
- •Использование деревьев атак для обнаружения угроз
- •Распространенные угрозы интернета вещей
- •Атаки с подавлением сигнала
- •Атаки с воспроизведением
- •Атаки со взломом настроек
- •Клонирование узла
- •Заключение
- •Пассивная разведка
- •Физический или аппаратный уровень
- •Периферийные интерфейсы
- •Среда загрузки
- •Блокировки
- •Предотвращение и обнаружение несанкционированного доступа
- •Прошивка
- •Интерфейсы отладки
- •Физическая устойчивость
- •Разведка
- •Атаки на сетевой протокол и службы
- •Тестирование беспроводного протокола
- •Оценка веб-приложений
- •Картирование приложений
- •Элементы управления на стороне клиента
- •Аутентификация
- •Управление сеансом
- •Проверка ввода
- •Логические ошибки
- •Сервер приложений
- •Исследование конфигурации хоста
- •Учетные записи пользователей
- •Привилегии учетной записи
- •Уровни патчей
- •Удаленное обслуживание
- •Управление доступом к файловой системе
- •Шифрование данных
- •Неверная конфигурация сервера
- •Мобильное приложение и облачное тестирование
- •Заключение
- •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 |
|
|
|||
nOCD из исходного кода. Это позволяет нам включить поддержку |
|
|
to |
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
m |
|||
|
w Click |
|
|
|
|
|
|
||||
|
w |
|
|
|
|
|
|
|
|
|
|
устройств FTDI и инструмента Bus Pirate. |
|
w |
|
df-x chan |
|
o |
|
||||
|
. |
.c |
|
||||||||
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
|
e |
|
Чтобы узнать больше об OpenOCD, обратитесь к подробному руко-
водству пользователя: http://openocd.org/doc/html/index.html.
Установка отладчика GNU Debugger
GDB – портативный отладчик, работающий в Unix-подобных систе- мах.Он поддерживаетмногие целевые процессоры и языки програм- мирования. Мы будем использовать GDB для удаленного отслежива- ния и изменения выполнения целевой программы.
В Ubuntu потребуется установить оригинальные пакеты gdb и gdb-multiarch, которые расширяют поддержку GDB для нескольких целевых архитектур, включая ARM (архитектура в основе Black Pill). Вы можете сделать это, введя в терминал команду:
$ sudo apt install gdb gdb-multiarch
Кодирование целевой программы на Arduino
Теперь напишем на Arduino программу,которую мы загрузим в Black Pill и попытаемся взломать. В реальном тесте у вас может не быть доступа к исходному коду устройства, но мы показываем его вам по двум причинам. Во-первых, вы узнаете, как код Arduino переводится в двоичный файл, который можно загрузить на устройство. Во-вто- рых, когда выполняется отладка с помощью OpenOCD и GDB, вы уви- дите, как код ассемблера соответствует исходному коду.
Программа (листинг 7.1) использует последовательный интерфейс для отправки и получения данных. Он имитирует процесс аутенти- фикации,проверяяпароль.Еслиполученправильныйпарольотполь- зователя, то выводится сообщение ACCESS GRANTED («доступ пре- доставлен»). В противном случае пользователю снова предлагается войти в систему.
Листинг 7.1. Программа последовательной связи в Arduino для микросхемы
STM32F103
const byte bufsiz = 32; char buf[bufsiz];
boolean new_data = false; boolean start = true;
void setup() { delay(3000); Serial1.begin(9600);
}
void loop() {
if (start == true) { Serial1.print("Login: ");
208 Глава 7
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
|||
|
F |
|
|
|
|
|
|
|
t |
|
|
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
r |
|
||
P |
|
|
|
|
|
NOW! |
o |
|
||||
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
BUY |
|
|
|
||||
|
|
|
|
to |
|
|
|
|
|
|
start = false; |
|
|
|
|
|
|
|
|
|
|
|
|
||
w |
|
|
|
|
|
|
|
|
|
m |
||
w Click |
|
|
|
|
e |
} |
||||||
|
. |
|
|
|
|
|
|
|||||
|
w |
|
|
|
|
|
|
|
|
o |
|
|
|
|
p |
df |
|
|
|
g |
.c |
|
|
||
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
n |
|
|
|
|
|
||
|
|
|
|
-xcha |
|
|
|
|
|
recv_data(); |
||
|
|
|
|
|
|
|
|
|
|
|
|
if (new_data == true) validate();
}
void recv_data() { static byte i = 0; static char last_char; char end1 = '\n'; char end2 = '\r'; char rc;
while (Serial1.available() > 0 && new_data == false) { rc = Serial1.read();
// пропускаем следующий символ, если предыдущий был \r или \n и текущий \r или \n if ((rc == end1 || rc == end2) && (last_char == end2 || last_char == end1))
return; last_char = rc;
if (rc != end1 && rc != end2) { buf[i++] = rc;
if (i >= bufsiz) i = bufsiz - 1;
}else {
buf[i] = '\0'; // terminate the string i = 0;
new_data = true;
}
}
}
void validate() { Serial1.println(buf); new_data = false;
if (strcmp(buf, "sock-raw.org") == 0) Serial1.println("ACCESS GRANTED");
else {
Serial1.println("Access Denied."); Serial1.print("Login: ");
}
}
|
|
|
|
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 |
|
|
|
|
Начнем с определения четырех глобальных переменных . Пере- менная bufsiz содержит количество байтов для символьного массива buf,вкоторомхранятсябайты,поступающиечерезпоследовательный порт от пользователя или устройства,взаимодействующего с портом. Переменная new_data – это логическое значение, которое становится истинным каждый раз,когда основной цикл программы получаетно- вую строку последовательных данных. Логическая переменная start истинна только на первой итерации основного цикла, поэтому она выводит первое приглашение «Login».
Уязвимости портов UART,JTAG и SWD 209
|
|
|
|
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 |
|
|
|||
Функция setup() является встроенной в функции Arduino, кото- |
|
|
|
to |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
m |
||
w Click |
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
df-x chan |
|
o |
|
|||||
рая выполняется один раз при инициализации программы. Внутри |
. |
.c |
|
||||||||
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
|
e |
|
этой функции мы инициализируем последовательный интерфейс (Serial1.begin) со скоростью 9600 бит в секунду.Обратите внимание, что Serial1 отличается от Serial, Serial2 и Serial3 – все они соответ- ствуют разным контактам UART на Black Pill. Объект Serial1 соответ- ствует контактам A9 и A10.
Функция loop() – еще одна встроенная функция Arduino, кото- рая автоматически вызывается после setup(), зацикливается и вы- полняет основную программу. Она постоянно вызывает функцию recv_data(),которая отвечаетза получение и проверкуданных из по- следовательного порта. Когда программа завершила получение всех байтов (это происходит, когда new_data принимает значение true), loop() вызывает функцию validate(),которая проверяет,составляют ли полученные байты правильную парольную фразу.
Функция recv_data() начинается с определения двух статиче- ских переменных (что означает, что их значение будет сохраняться между каждым вызовом этой функции): i для итерации через массив buf и last_char для хранения последнего символа, который мы про- читали из последовательного порта. Цикл while проверяет, есть ли какие-либо байты, доступные для чтения из последовательного пор- та (через Serial1.available), считывает следующий доступный байт с помощью Serial1.read и проверяет,являетсяли ранее сохраненный символ (который хранится в last_char) символом возврата каретки '\ r' илиновойстроки'\ n' .Циклделаетэто,посколькуможетстол- кнуться с устройствами,которые отправляют возврат каретки,новую строку или то и другое, чтобы завершить свои строки при отправке последовательных данных. Если следующий байт не указывает ко- нец строки , мы сохраняем только что прочитанный байт rc в buf и увеличиваем счетчик i на единицу. Если i достигает конца длины буфера, программа больше не сохраняет новые байты в буфере. Если прочитанный байтозначаетконец строки ,т.е.пользователь после- довательного интерфейса, скорее всего, нажал Enter, мы завершаем строку в массиве нулем, сбрасываем счетчик i и устанавливаем для new_data значение true.
В этом случае мы вызываем функцию validate(), которая печа- тает полученную строку и сравнивает ее с правильным паролем . Если пароль правильный, выводится ACCESS GRANTED («Доступ раз- решен»). В противном случае выводится Access Denied («Доступ за- прещен»), и пользователю снова предлагается войти в систему.
Записьи запуск программы Arduino
Теперь загрузите программу Arduino в Black Pill. Последовательность действий зависит оттого,приобрели ли вы модуль с предустановлен- ным загрузчиком Arduino, но мы рассмотрим оба варианта. Можно загрузить программу и еще одним методом: используя последова-
210 Глава 7
|
|
|
|
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 |
|
|
|
|
|
|
|
o |
|
https://github.com/rogerclarkmelbourne/STMdf--x chan |
.c |
|
|||||||||
|
|
. |
|
|
|
|
|
|
|||
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
|
e |
|
32duino-bootloader/), но здесь мы не будем рассматривать этот про- цесс – в интернете можно найти множество ресурсов на эту тему.
ВлюбомслучаевоспользуемсяпрограмматоромST-Linkизапишем программу в основную флеш-память.Если возникнут проблемы с за- писью во флеш-память, записывайте во встроенную память SRAM. Основнаяпроблемасэтимподходомзаключаетсявтом,чтопридется перезагружать программу Arduino каждый раз, когда вы выключаете ивыключаетеустройство,потомучтосодержимоеSRAMтеряетсяпри каждом выключении питания устройства.
Выбор режима загрузки
Чтобы убедиться, что вы загрузили программу во флеш-память Black Pill, нужно выбрать правильный режим загрузки. Устройства STM- 32F10xxx имеюттри различных режима загрузки,которые можно вы- биратьспомощьюконтактовBOOT1иBOOT0,какпоказановтабл.7.1. Обратитесь к схеме выводов на рис.7.11,чтобы найти этидва контак-
та на Black Pill.
Таблица 7.1.Режимы загрузки для Black Pill и других микроконтроллеров
STM32F10xxx
Контакты выбора режима загрузки |
Режим загрузки |
Псевдонимы |
|
BOOT1 |
BOOT0 |
|
|
× |
0 |
Основная |
Выбирает основную флеш-память в качестве |
|
|
флеш-память |
загрузочного пространства |
0 |
1 |
Системная память |
Выбирает системную память в качестве |
|
|
|
загрузочного пространства |
1 |
1 |
Встроенная SRAM |
Выбирает встроенную SRAM в качестве |
|
|
|
загрузочного пространства |
Используйте перемычку, поставляемую с Black Pill, для выбора ре- жима загрузки. Перемычка – это набор маленьких контактов в пла- стиковомкорпусе,которыесоздаютэлектрическоесоединениемежду двумя контактами (рис. 7.12). Вы можете использовать контакт пере- мычки, чтобы подключить контакты выбора режима загрузки к VDD (логическая 1) или GND (логический 0).
Рис.7.12.Перемычка, также известная как «джампер»
Уязвимости портов UART,JTAG и SWD 211
|
|
|
|
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 |
|
|
|||
СоединитеперемычкойобавыводаBOOT0иBOOT1BlackPillкGND. |
|
|
to |
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
m |
|||
|
w Click |
|
|
|
|
|
|
||||
|
w |
|
|
|
|
|
|
|
|
|
|
Если хотите писать в SRAM, следует подключить оба вывода к VDD. |
|
w |
|
df-x chan |
|
o |
|
||||
|
. |
.c |
|
||||||||
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
|
e |
|
Загрузка программы
Чтобы загрузить программу, сначала убедитесь, что перемычки для BOOT0 и BOOT1 подключены к GND.Создайте новый файл в средеAr- duino IDE, скопируйте и вставьте в него код из листинга 7.1, а затем сохраните файл. Мы использовали название serial-simple. Щелкни- те Tools > Board (Инструменты > Плата) и выберите Generic STM32F103C series в разделе STM32F1 Boards. Затем нажмите Tools >
Variant (Инструменты > Вариант) и проверьте, что отмечен пункт
STM32F103C8 (20k RAM, 64k Flash); он должен быть установлен по умолчанию.Убедитесь, что для метода Tools > Upload (Инструменты > Загрузить) установлено значение STLink и,в идеале,для параметра Optimize (Оптимизировать) установлено значение Debug (-g). Это гарантирует, что символы отладки появятся в конечном двоичном файле. Остальные параметры не меняйте.
Если на Black Pill был установлен загрузчик Arduino,вы можете на- прямуюподключитьегоккомпьютеручерезUSB-кабельбезпрограм- матора ST-Link. Затем укажите метод загрузки через загрузчик STM- 32duino вместо STLink. Но в учебных целях мы будем использовать программатор ST-Link, поэтому вам не понадобится предварительно прошивать загрузчик.
Чтобы загрузить программу в Black Pill, подключите к этому мо- дулю программатор ST-Link. Используйте четыре перемычки, чтобы соединить контакты SWCLK, SWDIO, GND и контакты 3,3 В ST-Link сконтактамиCLK,DIO,GND,3,3ВBlackPillсоответственно.Этивыво- ды расположены в нижней части разъема Black Pill.Как это выглядит, показано на рис. 7.14 и 7.15.
ПРЕДУПРЕЖДЕНИЕ Не следует подключать какие-либо устройства к портам USB до завершения подключения проводки.Рекомендуется из- бегать подавать питание на устройства при подключении их контак- тов.Таким образом вы предотвратите случайное короткое замыкание контактов, которое при включении устройств может привести к вы- ходу их из строя.
Использование логического анализатора для обнаружения выводов UART
Теперь найдите контакты UART на устройстве. Выше было показано, какэтосделатьспомощьюмультиметра,нотеперьмывоспользуемся логическиманализатором,чтобыидентифицироватьвыводUARTTX. Вывод TX передает выходной сигнал, поэтому его легко распознать. Для этого упражнения можно использовать недорогой логический анализаторHiLetgoUSBсвосемьюканалами,посколькуонсовместим с программным обеспечением Saleae Logic, которое мы используем.
212 Глава 7
|
|
|
|
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 |
|
|
|
|
|
|
|
o |
|
системы со страницы https://saleae.com/downloads/. (В нашем примереdf-x chan |
.c |
|
||||||||
|
. |
|
|
|
|
|
|
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
e |
|
используется версия для Linux.) Разархивируйте пакет в локальную папку, перейдите к нему в терминале и введите следующее:
$ sudo ./Logic
Эта команда откроет графический интерфейс Saleae Logic. Пока оставьте его открытым.
Убедитесь,чтовсетестируемыесистемывыключены,когдавыпод- ключаете к ним пробники логического анализатора, чтобы избежать короткого замыкания. В этом случае, поскольку Black Pill питается от программатора ST-Link, временно отключите программатор от USBпорта вашего компьютера.Помните,что если вы отключите Black Pill после загрузки кода Arduino в SRAM вместо флеш-памяти, вам при- дется повторно загрузить код в модуль.
С помощью перемычки подключите один из выводов GND логи- ческого анализатора к одному из выводов GND Black Pill, чтобы они имели общую «землю».Затем с помощью еще двух перемычек соеди- нитеканалыCH0иCH1логическогоанализатора(всевыводыканалов должны быть помечены) с выводами A9 и A10 Black Pill. Подключите логический анализатор к USB-порту на вашем компьютере.
Винтерфейсе Saleae вы должны увидеть как минимум пару кана- лов на левой панели, каждый из которых соответствует одному из каналов логического анализатора вывода схемы. Вы всегда можете добавить больше каналов, если ваш логический анализатор их под- держивает, чтобы можно было одновременно отслеживать больше выводов. Добавьте их, нажав две стрелки рядом с зеленой кнопкой Start (Пуск), чтобы открыть настройки. Затем вы можете выбрать, сколько каналов вы хотите отображать, переключая число рядом
скаждым каналом.
Внастройках увеличьте параметры Speed (Частотадискретизации) на 50 kS/s (киловыборок в секунду) и Duration (Длительность) до 20 с. Как правило, частота дискретизации цифровых сигналов должна быть как минимум в четыре раза выше, чем их частота следования. Для медленного последовательного канала частоты дискретизации 50 kS/s более чем достаточно,хотя и более высокая частота дискрети- зации не повредит. Что касается продолжительности, то 20 с хватит, чтобы устройство включилось и начало передавать данные.
Нажмите кнопку Start, чтобы начать захватывать сигналы, и не- медленно включите Black Pill, подключив программатор ST-Link к порту USB. Сеанс продлится 20 с, но вы можете в любое время оста- новить его. Если вы не видите данных по каналам, попробуйте вклю- чить и снова включить Black Pill во время сеанса. В какой-то момент вы должны увидеть сигнал, исходящий из канала, соответствующего выводу A9 (TX). Увеличивайте или уменьшайте масштаб, вращая ко- лесико мыши, чтобы рассмотреть их более четко.
Уязвимости портов UART,JTAG и SWD 213
|
|
|
|
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 |
|
|||||
кой Analyzers (Анализаторы) в графическом интерфейсе пользова- |
. |
.c |
|
||||||||
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
|
e |
|
теля, справа на панели выберите Async Serial (Асинхронный после- довательный порт), отметьте канал, на котором вы читаете сигнал, иустановитеBit Rate (Скоростьобмена)на9600.Обратитевнимание: если вы не знаете скорости передачи данных, можно выбрать Use Autobaud (Использовать автоподбор скорости), и пусть программа использует всю свою магию, чтобы подобрать правильное значение. Теперь вы должны увидеть приглашающее сообщение Login: про- граммыArduino в виде серии пакетов UART втолько что захваченном сигнале (рис. 7.13).
Рис.7.13.Расшифровка данных UART,поступающих с вывода TX Black Pill,с помощью программного обеспечения Saleae Logic.В правом нижнем углу вы можете увидеть приглашающий запрос Login: свидетельствующий о том,что программа Arduino запускается при загрузке устройства
Обратите внимание, как устройство на рис. 7.13 отправляет бук- ву L, которая указывает начало сообщения для входа в систему. Об- мен данными начинается с незанятой линии (при значении логи- ческой 1). Затем Black Pill отправляет стартовый бит со значением логического 0,за которым следуютбитыданных–отмладшегодо са- мого старшего. Букве L соответствует код 0x4C в ASCII, или 00110010 в двоичном формате, как вы можете видеть в передаче. Наконец, Black Pill отправляет стоповый бит (со значением логической 1) пе- ред началом буквы «о».
Мы разместили два маркера времени (A1 и A2 на рис. 7.13) по обе стороны от одного случайного бита. Маркеры времени – это своего рода флажки или метки, которые вы можете использовать для изме- рения времени, прошедшего между любыми двумя точками в ваших данных.Мы измерилидлительность100 мкс,чтодоказывает,что ско-
214 Глава 7
|
|
|
|
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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ростьпередачи составляет9600 бит/с.(Для передачи одного битатре- |
|
|
|
|
|
m |
|||||
|
w Click |
|
|
|
|
|
|
||||
|
w |
|
|
|
|
|
|
|
|
|
|
буется 1/9600 с, или 0,000104 с,т. е. примерно 100 мкс.) |
|
w |
|
df-x chan |
|
o |
|
||||
|
. |
.c |
|
||||||||
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
|
e |
|
Подключение адаптера USB-UART
Чтобы протестировать адаптер USB-UART, подключим его к нашему компьютеру. Некоторые адаптеры, включая тот, который мы исполь- зовали, поставляются с перемычкой, предварительно установленной на контактах RX и TX (рис. 7.12). Перемычка соединяет выводы RX и TX, создавая петлю между ними. Это полезно для проверки работы адаптера: подключите его к USB-порту вашего компьютера, а затем откройтепрограмму-эмулятортерминала,напримерscreenилиmini- com, для этого порта. Попробуйте использовать эмулятор терминала для отправки последовательных данных на подключенные устрой- ства. Если вы видите, что нажатие клавиш отображается эхом в тер- минале, это свидетельствует о том, что адаптер работает. Дело в том, что ваша клавиатура отправляет символы через порт USB на контакт TX адаптера; из-за перемычки символы отправляются на контактRX, а затем возвращаются в компьютер через порт USB.
Подключите адаптер к компьютеру (не убирая перемычку) и затем введите следующую команду, чтобы узнать, какой дескриптор файла устройства был назначен адаптеру:
$ sudo dmesg
…
usb 1-2.1: FTDI USB Serial Device converter now attached to ttyUSB0
Обычноалаптеруназначаетсядескриптор/dev/ttyUSB0,есликпор- ту не были подключены другие периферийные устройства.Затем вы- полните команду screen и передайте дескриптор файла в качестве аргумента:
$ screen /dev/ttyUSB0
Чтобы выйти из сеанса экрана, нажмите клавиши Ctrl+A, а затем \. Вы также можете указать скорость передачи в качестве второго ар- гумента.Чтобы узнатьтекущую скорость передачи адаптера,введите
следующее:
$ stty -F /dev/ttyUSB0 speed 9600 baud; line =0;
…
Эти выходныеданные показывают,что адаптер имеетскоростьпе- редачи 9600 бод.
Убедитесь, что адаптер работает, а затем удалите контакт пере- мычки, потому что вам нужно подключить контакты RX и TX к Black Pill. На рис. 7.14 показаны необходимые соединения.
Уязвимости портов UART,JTAG и SWD 215
|
|
|
|
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 |
|
|
|||
Подключите контакт RX адаптера к контакту TX на Black Pill (в на- |
|
|
|
to |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
m |
||
w Click |
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
df-x chan |
|
o |
|
|||||
шем примере – контакт A9). Затем подключите контакт TX адаптера |
. |
.c |
|
||||||||
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
|
e |
|
к контакту RX (A10). Важно использовать именно контакты A9 и A10, потому что они соответствуют интерфейсу Serial1, который мы ис- пользовали в коде Arduino.
Адаптер USB должен быть подключен к тому же проводу «земли», что и Balck Pill, потому что устройства используют GND как точку от- счета для уровней напряжения. Вывод Clear to Send (CTS) также дол- жен быть соединен с линией GND,потому что он считается активным при низком уровне (то есть на логическом уровне 0). Если этот вывод не подключить к GND, на нем будет высокий уровень, и адаптер не сможет отправлять байты на Black Pill.
GND USB GND
|
|
|
|
|
|
|
STM32F103C8T6 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
Blackpill |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
USB |
|
|
|
|
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Адаптер |
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
USB-последовательный порт |
|
|
|||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
A10 |
|
|
|
|
CTS RTS RXD TXD GND VCC |
|
|
|||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
A9 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RXD |
|
|
|
||||||||||||||
|
|
|
|
|
|
|
3.3V DIO CLK GND |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ПортUSB |
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3.3V |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ST-Link |
SWDIO |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ПортUSB |
|
|
|||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||||||
|
USB |
SWCLK |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
GND |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис.7.14.Схема соединений между Black Pill,ST-Link,адаптером USB-to-serial и ноутбуком
Подключение к компьютеру
Послетогокак вы соединилимежду собой BlackPill,ST-Link иадаптер USB, подключите ST-Link к USB-порту на вашем компьютере. Затем подключите адаптер к USB-порту.На рис.7.15 показан пример конст рукции.
216 Глава 7
|
|
|
|
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 |
|
|
|
|
|
|
ПРЕДУПРЕЖДЕНИЕ |
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
||
Обратите внимание, что модуль Black Pill не |
|
|
|
|
|
m |
|||||
|
w Click |
|
|
|
|
|
|
||||
|
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
подключен ни к одному USB-порту. Вместо этого он работает черезdf-x chan |
.c |
|
|||||||||
|
|
. |
|
|
|
|
|
|
|||
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
|
e |
|
программатор ST-Link.Если подключить Black Pill к любому USB-порту напрямую,модуль или порт могут выйти из строя.
Теперь, когда тестовая схема готова, вернитесь в среду разработки Arduino. Включите подробный вывод, нажав File > Preferences (Файл
| Настройки) и установив флажок Show verbose output during: com- pilation (Показать подробный вывод во время компиляции). Затем нажмите Sketch > Upload (Скетч > Загрузить),чтобы скомпилировать программу и загрузить ее в Black Pill.
Рис.7.15.Модуль Black Pill,программатор ST-Link и адаптер USB соединены
с помощью перемычек.Обратите внимание,что Black Pill не подключен к USBпорту,он питается через программатор ST-Link
Поскольку мы включили подробный вывод в Arduino IDE, компи- ляция и загрузка программы должны дать вам много информации о процессе, включая временный каталог, в котором хранятся проме- жуточные файлы, необходимые для компиляции (рис. 7.16).
Рис.7.16.Подробный вывод из Arduino IDE при компиляции и загрузке программы.Рамкой выделен временный каталог,который вам понадобится
ВLinuxэтоткаталогобычновыглядиткак/tmp/arduino_build_336697,
где последнее число–случайный идентификатор (у вас,очевидно,он будет другим), который изменяется с новыми сборками. При компи- ляции программы обратите внимание на этот каталог: он вам пона- добится позже.
Уязвимости портов UART,JTAG и SWD 217