Пишем приложение для вибратора с Алиэкспресс, или Как реверс-инжинирить Bluetooth
Для чего нам Bluetooth?​
Finch Technologies & Co.
План
Bluetooth-Device
BLE Connect
BLE Security
BluetoothDevice & BluetoothGatt
GATT Characteristic
BluetoothGatt
BluetoothGatt read
BluetoothGatt write
BluetoothGatt notification
Пример
О BLE подробнее
BLE пакет
Реверс-инжиниринг BLE-пакета
nRF Connect
nRF Connect
Wireshark
Wireshark
Анализ BLE-профиля
Подключение
Список сервисов
Список характеристик
Свойства характеристик
Запись данных
Чтение данных
Резюме
Реверс-инжиниринг приложения
Получение apk
Декомпиляция бинарников
Анализ исходников
Поиск нужного сервиса
Поиск чтения данных
Поиск формата данных
Поиск формата данных
Поиск записи данных
Резюме
Анализ трафика приложения
Включения логов трафика
Получаем трафик приложения
Анализ трафика
Фильтрация по адресу
Анализ трафика
Проверка
Резюме
Реверс вибратора
Сервисы девайса
Брутфорс?
Характеристика для команд
Приложение для брутфорса
Брутфорс
Брутфорс?
Реверс-инжиниринг apk
Поиск нужного сервиса
Поиск нужного сервиса
Поиск отправки данных
Проверим
Стоит ли доверять?
Анализ приложения
Анализ трафика
Проверим
Что за формат?
Получим команды
Поиск в приложении
Резюме
BLE Security?
Немного методов защиты
Заключение
Спасибо за внимание
5.42M
Categories: internetinternet programmingprogramming

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

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

Гончаров Даниил (Finch Technologies Ltd.)

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

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

3. Finch Technologies & Co.

Finch Technologies & Co.
3

4. План


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

5. Bluetooth-Device

5

6. BLE Connect

6

7. BLE Security


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

8. BluetoothDevice & BluetoothGatt

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

9. GATT Characteristic

9

10. BluetoothGatt

10

11. BluetoothGatt read

11

12. BluetoothGatt write

12

13. BluetoothGatt notification

13

14. Пример

1. Подключение
2. Поиск всех сервисов устройства
3. Список сервисов
4. Отправка команды
5. Результат отправки
14

15. О BLE подробнее


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

16. BLE пакет

16

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


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

18. nRF Connect


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

19. nRF Connect

Android
• https://play.google.com/st
ore/apps/details?id=no.no
rdicsemi.android.mcp
19
iOS
• https://apps.apple.com/ru
/app/nrfconnect/id1054362403

20. Wireshark

• Просмотр BLE-логов




20
Адреса
Запись/Чтение
Сервисы
Характеристики

21. Wireshark


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

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


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

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

23

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

24

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

25

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

26

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

27

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

28

29. Резюме


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

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


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

31. Получение apk

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

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

32

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

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");
34

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

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

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

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

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];
...
37

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

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

39. Резюме


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

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


Протокол работы с девайсом



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

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

41

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


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

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

43

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

44

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

1.
2.
3.
4.
5.
45
Фильтрация по адресу
Лог записи/чтения
Сервис
Характеристика
Значения

46. Проверка

46

47. Резюме


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

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

48

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

49

50. Брутфорс?


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

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

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

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

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

53. Брутфорс

53

54. Брутфорс?


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

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


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

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

56

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

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

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;
}
58

59. Проверим

59

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

60

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

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

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

62

63. Проверим

63

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

64

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

• 0153fd00
• 3200
• …
65

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

66

67. Резюме

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

68. BLE Security?


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

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


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

70. Заключение


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

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

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

72.

72
English     Русский Rules