Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #94, ОКТЯБРЬ 2006 г.

Хакерский синезуб

User anonymous

Хакер, номер #094, стр. 094-130-1

Программирование под Bluetooth для правильных людей

Настоящему хакеру синий зуб нужен вовсе не для перекачивания картинок или подключения какой-то там гарнитуры. Хотя и это неплохо :). Настоящие взломщики обожают подбирать пины на чужих девайсах, палить невидимые устройства и чинить злодеяния. Попробуем взглянуть на это дело с программерской точки зрения.

Не буду загружать тебя теорией про то, как и для чего нужен блютус, поскольку человек, совсем незнакомый с этой технологией даже на уровне пользователя, – нам не друг :). Приступим сразу к делу.

Для программирования под BT я выбрал Visual C++ 2005 версию. Конечно же, никакого интерфейса мы делать не будем. Поэтому жми File->New->Projects, выбирай Visual C++ и смело дави на Win32 Console. В Application Settings поставь галочку на Empty projects и завершай все это дело Finish’ем.

Осталось определить, какие все-таки заголовочные файлы необходимы для BT-программирования. Нам нужно подключить BluetoothAPIs.h: в нем содержится львиная доля всех функций и btfdef.h, а также большое количество команд по всем функциям девейсa (пролистать телефонную книгу, выйти в Internet по протоколу WAP, включить музыку), и еще этот хидер управляет всеми доступными протоколами по BT.

Для некоторых функций тебе требуется практика в программировании под Windows Sockets (если кто забыл, напомню, что это средство для поддержки сетевых протоколов, они организуют соединение устройств, открывают порты, прогоняют через них данные). В общем, так как Windows Sockets поддерживает большинство протоколов (в том числе и Bluetooth) в некоторых местах придется использовать сокеты. Иначе наши программы не будут стабильно работать.

Алгоритмируй это

Самое главное при написании программы - создать алгоритм;

1.Подготавливаем Sockets для клиента (сюда входит подготовка порта и буферизация данных);

2.Создаем Sockets для Bluetooth-устройств;

2.1 Устанавливаем BT_ADDR устройства;

sa.btAddr = b; // b - переменная BT_ADDR

2.2 Если с устройством возможно соединиться, то создаем порт для передачи данных

sa.port = channel & 0xff;

3. Собираем информацию о подключаемом устройстве;

4. Соединяемся с устройством;

5. Посылаем сообщение;

6. Закрываем соединение.

Это был первый вариант, но давай посмотрим и на другой, который будет использоваться в примере про подбор PIN-кода.

1. Подготавливаем Sockets для клиента;

2. Создаем Sockets для Bluetooth-устройства;

3. Произвольно меняем свой BT_ADDR;

4. Соединяемся с устройством, не забыв при этом послать пароль;

5. Если удаленное устройство не приняло пароль, то переходим к третьему шагу;

6. В случае, если пароль подобран, то надо записать в файл последний посылаемый пароль на устройство и запомнить его имя;

7. Закрываем соединение.

Итак, алгоритм создан, и для полноценного кодинга нам нужно вспомнить немного теории, а именно: несколько главных структур, которые ты должен знать.

Структура SOCKADDR_BTH определяет BTH_ADDR устройства, к которому требуется приконнектиться:

typedef struct _SOCKADDR_BTH {

USHORT addressFamily;

BTH_ADDR btAddr;

Содержание  Вперед на стр. 094-130-2
ttfb: 3.0279159545898 ms