Пишем приложение для вибратора с Алиэкспресс, или как реверс-инжинирить Bluetooth

Содержание

Слайд 2

Для чего нам Bluetooth?​

Для чего нам Bluetooth?​

Слайд 3

Finch Technologies & Co.

Finch Technologies & Co.

Слайд 4

План

Основы Bluetooth
Способы реверс-инжиниринга Bluetooth
Реверс-инжиниринг вибратора с Алиэкспресс

План Основы Bluetooth Способы реверс-инжиниринга Bluetooth Реверс-инжиниринг вибратора с Алиэкспресс

Слайд 5

Bluetooth-Device

Bluetooth-Device

Слайд 6

BLE Connect

BLE Connect

Слайд 7

BLE Security

Pairing – процесс создания парами BLE-устройств секретных ключей для последующего шифрования

BLE Security Pairing – процесс создания парами BLE-устройств секретных ключей для последующего шифрования трафика
трафика

Слайд 8

BluetoothDevice & BluetoothGatt

GATT – профиль Bluetooth, определяющий способ взаимодействия двух устройств и

BluetoothDevice & BluetoothGatt GATT – профиль Bluetooth, определяющий способ взаимодействия двух устройств
использующий концепцию атрибутов
GATT Characteristic – контейнер для данных
GATT Service – совокупность характеристик
UUID – 128-битный уникальный идентификатор атрибута

Слайд 9

GATT Characteristic

GATT Characteristic

Слайд 10

BluetoothGatt

BluetoothGatt

Слайд 11

BluetoothGatt read

BluetoothGatt read

Слайд 12

BluetoothGatt write

BluetoothGatt write

Слайд 13

BluetoothGatt notification

BluetoothGatt notification

Слайд 14

Пример

1. Подключение

2. Поиск всех сервисов устройства

3. Список сервисов

4. Отправка команды

5. Результат отправки

Пример 1. Подключение 2. Поиск всех сервисов устройства 3. Список сервисов 4.

Слайд 15

О BLE подробнее

http://appsconf.ru/moscow/2019/abstracts/5051
https://youtu.be/hpHFo_Lyk0M

О BLE подробнее http://appsconf.ru/moscow/2019/abstracts/5051 https://youtu.be/hpHFo_Lyk0M

Слайд 16

BLE пакет

BLE пакет

Слайд 17

Реверс-инжиниринг BLE-пакета

Анализ BLE-профиля
Реверс-инжиниринг приложения
Анализ трафика

Реверс-инжиниринг BLE-пакета Анализ BLE-профиля Реверс-инжиниринг приложения Анализ трафика

Слайд 18

nRF Connect

Сканирование
Подключение
Сервисы
Характеристики
Чтение и запись

nRF Connect Сканирование Подключение Сервисы Характеристики Чтение и запись

Слайд 19

nRF Connect

Android

https://play.google.com/store/apps/details?id=no.nordicsemi.android.mcp

iOS

https://apps.apple.com/ru/app/nrf-connect/id1054362403

nRF Connect Android https://play.google.com/store/apps/details?id=no.nordicsemi.android.mcp iOS https://apps.apple.com/ru/app/nrf-connect/id1054362403

Слайд 20

Wireshark

Просмотр BLE-логов
Адреса
Запись/Чтение
Сервисы
Характеристики

Wireshark Просмотр BLE-логов Адреса Запись/Чтение Сервисы Характеристики

Слайд 21

Wireshark

Windows & macOS
https://www.wireshark.org/download.html

Wireshark Windows & macOS https://www.wireshark.org/download.html

Слайд 22

Анализ BLE-профиля

Список всех сервисов и характеристик
Свойства характеристик
Чтение/Запись сырых пакетов

Анализ BLE-профиля Список всех сервисов и характеристик Свойства характеристик Чтение/Запись сырых пакетов

Слайд 23

Подключение

Подключение

Слайд 24

Список сервисов

Список сервисов

Слайд 25

Список характеристик

Список характеристик

Слайд 26

Свойства характеристик

Свойства характеристик

Слайд 27

Запись данных

Запись данных

Слайд 28

Чтение данных

Чтение данных

Слайд 29

Резюме

Первичная информация о девайсе
Формат данных неизвестен

Резюме Первичная информация о девайсе Формат данных неизвестен

Слайд 30

Реверс-инжиниринг приложения

Декомпиляция бинарников
Найти сервисы и характеристики
Формат данных

Реверс-инжиниринг приложения Декомпиляция бинарников Найти сервисы и характеристики Формат данных

Слайд 31

Получение apk

adb shell pm path package.name
package:/data/app/package.name/app.apk
adb pull /data/app/package.name/app.apk

Получение apk adb shell pm path package.name package:/data/app/package.name/app.apk adb pull /data/app/package.name/app.apk

Слайд 32

Декомпиляция бинарников

Декомпиляция бинарников

Слайд 33

Анализ исходников

Анализ исходников

Слайд 34

Поиск нужного сервиса

UART_UUID = UUID.fromString("6E400001-B5A3-F393-E0A9-E50E24DCCA9E");
TX_UUID = UUID.fromString("6E400002-B5A3-F393-E0A9-E50E24DCCA9E");
RX_UUID = UUID.fromString("6E400003-B5A3-F393-E0A9-E50E24DCCA9E");

Поиск нужного сервиса UART_UUID = UUID.fromString("6E400001-B5A3-F393-E0A9-E50E24DCCA9E"); TX_UUID = UUID.fromString("6E400002-B5A3-F393-E0A9-E50E24DCCA9E"); RX_UUID = UUID.fromString("6E400003-B5A3-F393-E0A9-E50E24DCCA9E");

Слайд 35

Поиск чтения данных

class Clazz extends BluetoothGattCallback { @Override public void onCharacteristicRead(…) {

Поиск чтения данных class Clazz extends BluetoothGattCallback { @Override public void onCharacteristicRead(…) { ... } }
... } }

Слайд 36

Поиск формата данных

onCharacteristicRead(… Characteristic c)
{
receivedData(c.getValue());
}

Поиск формата данных onCharacteristicRead(… Characteristic c) { receivedData(c.getValue()); }

Слайд 37

Поиск формата данных

private static void receivedData(byte[] dataBytes)
{
  byte[] temp = { dataBytes[2], dataBytes[3] };
  boolean[] bits = byteArray2BitArray(temp);
Inputs.buttonA.key = bits[0];
  ...
  Inputs.forward2.key = bits[13];
  ...

Поиск формата данных private static void receivedData(byte[] dataBytes) { byte[] temp =

Слайд 38

Поиск записи данных

service = gatt.getService(s);
char = service.getCharacteristic(c);
char.setValue(value);
gatt.writeCharacteristic(char);

Поиск записи данных service = gatt.getService(s); char = service.getCharacteristic(c); char.setValue(value); gatt.writeCharacteristic(char);

Слайд 39

Резюме

Не все приложения можно реверс-инжинирить

Резюме Не все приложения можно реверс-инжинирить

Слайд 40

Анализ трафика приложения

Протокол работы с девайсом
Сервисы и характеристики
Данные чтения/записи
Адреса, пароли, явки

Анализ трафика приложения Протокол работы с девайсом Сервисы и характеристики Данные чтения/записи Адреса, пароли, явки

Слайд 41

Включения логов трафика

Включения логов трафика

Слайд 42

Получаем трафик приложения

Делаем некие действия в приложение
adb pull /sdcard/btsnoop_hci.log

Получаем трафик приложения Делаем некие действия в приложение adb pull /sdcard/btsnoop_hci.log

Слайд 43

Анализ трафика

Анализ трафика

Слайд 44

Фильтрация по адресу

Фильтрация по адресу

Слайд 45

Анализ трафика

Фильтрация по адресу
Лог записи/чтения
Сервис
Характеристика
Значения

Анализ трафика Фильтрация по адресу Лог записи/чтения Сервис Характеристика Значения

Слайд 46

Проверка

Проверка

Слайд 47

Резюме

Информация о работе приложения без его реверс-инжиниринга
Неявный формат данных

Резюме Информация о работе приложения без его реверс-инжиниринга Неявный формат данных

Слайд 48

Реверс вибратора

Реверс вибратора

Слайд 49

Сервисы девайса

Сервисы девайса

Слайд 50

Брутфорс?

Нужно найти сервис для отправки команд
Отправлять туда байты
Фиксировать результат

Брутфорс? Нужно найти сервис для отправки команд Отправлять туда байты Фиксировать результат

Слайд 51

Характеристика для команд

Находим характеристики для записи
Properties: Write

Характеристика для команд Находим характеристики для записи Properties: Write

Слайд 52

Приложение для брутфорса

char = service.getCharacteristic(uuid);
while (true) {
    char.setValue(rand_byte_array);
    gatt.writeCharacteristic(char);
    // Смотрим на результат
}

Приложение для брутфорса char = service.getCharacteristic(uuid); while (true) { char.setValue(rand_byte_array); gatt.writeCharacteristic(char); // Смотрим на результат }

Слайд 53

Брутфорс

Брутфорс

Слайд 54

Брутфорс?

Брутфорс возможен для несложного пакета команд
Но занимает много времени и внимания

Брутфорс? Брутфорс возможен для несложного пакета команд Но занимает много времени и внимания

Слайд 55

Реверс-инжиниринг apk

adb shell pm path cn.yingtaoapp.android
package:/data/app/cn.yingtaoapp.android/base.apk
adb pull /data/app/cn.yingtaoapp.android/base.apk
Декомпиляция apk

Реверс-инжиниринг apk adb shell pm path cn.yingtaoapp.android package:/data/app/cn.yingtaoapp.android/base.apk adb pull /data/app/cn.yingtaoapp.android/base.apk Декомпиляция apk

Слайд 56

Поиск нужного сервиса

Поиск нужного сервиса

Слайд 57

Поиск нужного сервиса

Характеристики с “Write”

Поиск нужного сервиса Характеристики с “Write”

Слайд 58

Поиск отправки данных

    public void doClick(int value) {
             case 0:
                this.mToy.BLE.write(value * 128);
                return;
            case 1:
                this.mToy.BLE.write(value * 64);
                return;
            default:
                return;
    }

Поиск отправки данных public void doClick(int value) { case 0: this.mToy.BLE.write(value *

Слайд 59

Проверим

Проверим

Слайд 60

Стоит ли доверять?

Стоит ли доверять?

Слайд 61

Анализ приложения

Включим логи
Отправим команду
Посмотрим логи

Анализ приложения Включим логи Отправим команду Посмотрим логи

Слайд 62

Анализ трафика

Анализ трафика

Слайд 63

Проверим

Проверим

Слайд 64

Что за формат?

Что за формат?

Слайд 65

Получим команды

0153fd00
3200

Получим команды 0153fd00 3200 …

Слайд 66

Поиск в приложении

Поиск в приложении

Слайд 67

Резюме

Формат команд
+
UUID сервисов и характеристик
=
Свое приложение

Резюме Формат команд + UUID сервисов и характеристик = Свое приложение

Слайд 68

BLE Security?

и Да и Нет
Шифрование передачи данных между устройствами

BLE Security? и Да и Нет Шифрование передачи данных между устройствами

Слайд 69

Немного методов защиты

Спрятать парс данных в C++, etc
Аутентификация устройства и приложения
Дополнительное

Немного методов защиты Спрятать парс данных в C++, etc Аутентификация устройства и приложения Дополнительное шифрование трафика
шифрование трафика

Слайд 70

Заключение

Bluetooth просто – протокол передачи данных
Не стоит забывать о безопасности!

Заключение Bluetooth просто – протокол передачи данных Не стоит забывать о безопасности!

Слайд 71

Спасибо за внимание

Контакты:
telegram @neargye

Спасибо за внимание Контакты: telegram @neargye