aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md84
-rwxr-xr-xfirst-classes.dexbin0 -> 433148 bytes
-rwxr-xr-xsecond-classes.dexbin0 -> 40932 bytes
-rwxr-xr-xtest.apkbin0 -> 802951 bytes
4 files changed, 84 insertions, 0 deletions
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..faad56e
--- /dev/null
+++ b/README.md
@@ -0,0 +1,84 @@
+Тестовое задание в Dr. Web на вакансию "Вирусный аналитик-стажёр Android"
+=========================================================================
+
+Во время выполнения тестового задания использовалось следующее ПО:
+
+ * fernflower
+ * dex2jar
+ * jdgui
+
+Задание 1
+---------
+
+Изучить `first-classes.dex`, найти вредоносный функционал и составить подробное
+описание угроз (без копирования кода, своими словами).
+
+Решение
+-------
+
+Данное приложение (`com.creativemobi.DragRacing`) было инфицировано и, как я
+понимаю, распространялось в виде APK на варезниках (приложение популярно,
+разработчик на Google Play с пометкой «Лучший разработчик»). На мой взгляд,
+эта система инфицирования APK автоматическая и мало зависит от инфицируемого
+приложения. Вредоносный функционал: типичный «ботнет-клиент», отправляющий
+дампы пришедших SMS и номеров телефонов входящих и исходящих звонков, а так же
+выполняющий некий набор команд, приходящих из «командного пункта»
+(lebar.gicp.net, бэкэнд на ASP.NET, домен в любой момент может поменяться,
+конфиг со всеми необходимыми параметрами получается с «текущего» сервера).
+
+Вредоносный функционал находится в пакете com.GoldDream.zj и хранит в себе три
+класса:
+- `zjReceiver` выполняет роль Android-ресивера, который вызывается при
+ описанных в AndroidManifest'е экшенах: обрабатываются экшены получения SMS и
+ звонков (`android.intent.action.NEW_OUTGOING_CALL`,
+ `android.provider.Telephony.SMS_RECEIVED`, и аналогичные для получения
+ звонков и отправления SMS), таким образом все SMS и номера дампаются в два
+ файла, замаскированные под файлы того приложения, которое было инфицировано.
+ Также обрабатывается экшен BOOT для запуска главного сервиса при старте ОС.
+
+- `zjService` — сервис, выполняющий операции каждые n минут (по умолчанию 3),
+ пришедшие из «командного пункта»:
+ * команда «Позвонить» по указанному в аргументе с сервера номеру,
+ * команда «Отправить SMS»,
+ * команды «Удалить приложение» и «Установить приложение» (вызывая менеджер пакетов Android),
+ * команда «Отправить локальный файл».
+ Каждые n минут он также отправляет сдампленные звонки и SMS и чистит дампы и
+ пытается зарегистрировать устройство в своей системе на основании IMEI,
+ серийного номера SIM, юзерагента встроенного в Android Webkit'а и IMSI.
+
+- `UploadFiles` — хелпер для загрузки файлов а-ля загрузка файлов в HTML-форму
+ «командного пункта».
+
+Задание 2
+---------
+
+Изучить `second-classes.dex`, найти вредоносный функционал и составить подробное
+описание угроз (без копирования кода, своими словами).
+
+Решение
+-------
+
+Более качественно написанный ботнет-клиент, чем в задании task #1,
+специализирующийся на SMS. Вредоносный функционал: отправляет контакты в
+XML-формате на CnC-сервер (load-date.ru), хранит входящие и исходящие SMS в
+своей sqlite-БД, данные из которых периодически отправляет на сервер и чистит.
+Отлавливает BOOT-экшн для запуска сервиса, который в свою очередь настраивает
+AlarmManager на выполнение вышеописанных действий через некоторое время. Так
+как используется AlarmManager, то телефон может нормально «засыпать», в отличие
+от реализации «задержки» с помощью sleep в task #1. С сервера приходят задания
+на отправку сообщений на короткие номера, для подтверждения парсятся входящие
+смски с помощью заранее написанных регулярок и отправляются обратно для
+подтверждения (почему-то автор малвари назвал это «логикой каптчи»). Сервисные
+сообщения о подписках и платных услугах специально скрываются от пользователя.
+Если я правильно понял, то при запуске приложения пользователя заспамливают
+просьбой разрешить стать «администратором устройства» этому приложению.
+
+Задание 3
+---------
+
+Задание для `test.apk`: приложение запрашивает пароль, необходимо его узнать.
+
+Решение
+-------
+
+"Ninja 300"
diff --git a/first-classes.dex b/first-classes.dex
new file mode 100755
index 0000000..111f0ef
--- /dev/null
+++ b/first-classes.dex
Binary files differ
diff --git a/second-classes.dex b/second-classes.dex
new file mode 100755
index 0000000..439223b
--- /dev/null
+++ b/second-classes.dex
Binary files differ
diff --git a/test.apk b/test.apk
new file mode 100755
index 0000000..b4b6ef8
--- /dev/null
+++ b/test.apk
Binary files differ