Spock android что это
Самый сложный вредонос под Android
Коллеги из вирлаба написали статью о бэкдоре, с возможностями котого вы должны ознакомиться: http://www.securelist.com/ru/blog/207768863/Samyy_slozhnyy_Android_troyanets. В своей же статье я покажу, чем грозит заражение этим вредоносом. Но для нач.
Но для начала подобьем список особенностей и возможностей бэкдора:
Впечатляет? Тогда под кат, где я продемонстрирую несколько скриншотов.
Для исследования я взял Backdoor.AndroidOS.Obad.a с md5 E1064BFD836E4C895B569B2DE4700284. Вредонос не работает на эмуляторе. Возможно его удалось бы запустить после модификции эмулятора через командную строку, но мне проще использовать реальное устройство. Внимание! Не повторяйте такого!
Приложение весит 83 килобайта. Установку я сделаю с принудительной проверкой приложения антивирусом от Google:
Я не думаю, что кто-то ждал, что вредонос будет обнаружен. Ну ладно. Т.к. установка происходит через штатный инсталлятор, то все запросы показаны. В том числе те, что стоят денег. Ах, если бы читали хотябы треть пользователей.
Для проверки, заражена система или нет я буду использовать Kaspersky Mobile Security. Не потому что это реклама или что-то подобное. Просто наш продукт заведомо видит и детектирует угрозу. Удалить он все равно ее не сможет после того, как я разрешу использование функций Device Administrator. Вот как детектируется вредонос:
Я запретил использование root прав. Тут и без них достаточно «счастья» будет. На заднем плане идет обратный отсчет до появления экрана предоставление прав администратора устройства. Я предоставил эти права. Всё. Если ваш аппарт не рутован, то вы не сможете удалить это приложение. Вы уже видели, что кнопки удаления недоступны. Но даже если вызвать удаление иным образом, его нельзя завершить из-за уязвимости в Device Admin. Сейчас я попытаюсь вызвать удаление из Kaspersky Mobile Security.
Как вы можете убедиться, в списке DA вредоноса действительно не видно. А значит права администратора системы забрать у него нельзя. Так что если вы не уверены в своих знаниях и опыте, лучше используйте проверенный антивирус. Любой. Главное, чтобы у него была заслуженная великолепная репутация. Как специалист, я бы рекомендовал антивирусы отечественных производителей, т.к. в России пока еще не забивают на реальные исследования и тестирования.
Как видим, он не справился. Тогда попытаемся просто удалить вредоноса руками. Благо знаем имя пакета.
Вполне ожидаемо приложение видит вредоноса, но удалить не сумело. При этом сделало какое-то невнятное заявление о скрытии системного приложения. Ну, раз и тут автомат не справился, переходим на ручник.
Но здесь нет папки вредоноса. Очевидно, что ручник не приспособлен вообще для серьезной работы, только для очистки мусора.
Хорошо, раз в режиме «руками» мы смогли снести заразу, попробуем сделать этот из adb shell, как меня попросили в Juick. Собственно, тут ждать проблем не приходится.
rm com.android.system.admin-1.apk
И вредоноса нет. Теперь остается просто подчистить хвосты. Можно даже штатно.
Следующим будет приложение RootAppDelete. Выбираем удаление пользовательского ПО и.
Эта утилита не использует прав root для удаления пользовательских приложений, а вызывает штатный анисталлер. В итоге удалить бекдора им нельзя.
Как видно на последнем скриншоте, хвосты штатно зачистить все еще нельзя. Ну это не проблема. Перезагружаем смартфон и.
Да, я использовал сделаный ранее скриншот, но сути не меняет 🙂
Итак, мы столкнулись с вредоносом, который хоть и можно обезвредить, но это просто не под силу подавляющему большинству пользователей. Более того, этот вредонос защищается от удаления только штатными возможностями Android и при наличии root не использует эти права для самозащиты. Но теперь, вооружившись знанием о подобных вредоносах, вы сможете вынести их руками. Если, конечно, ваш аппарат рутован. В противном случае вам придется сделать сброс.
P.S. После удаления вредоноса и вставки SIM я обнаружил, что отключен мобильный интернет. Не исключаю, что это поведение Android или даже прошивки от Motorola. Но может быть и подлянка вредоноса.
Тогда можно поддержать её лайком в соцсетях. На новости сайта вы ведь уже подписались? 😉
Или закинуть денег на зарплату авторам.
Или хотя бы оставить довольный комментарий, чтобы мы знали, какие темы наиболее интересны читателям. Кроме того, нас это вдохновляет. Форма комментариев ниже.
Что с ней так? Своё негодование вы можете высказать на zelebb@gmail.com или в комментариях. Мы постараемся учесть ваше пожелание в будущем, чтобы улучшить качество материалов сайта. А сейчас проведём воспитательную работу с автором.
Если вам интересны новости мира ИТ также сильно, как нам, подписывайтесь на наш Telegram-канал. Там все материалы появляются максимально оперативно. Или, может быть, вам удобнее «Вконтакте» или Twitter? Мы есть также в Facebook.
Зачем нам вулканец на борту: обзор Spock Framework
Автоматизация тестирования помогает постоянно контролировать качество IT-продукта, а также снижать затраты в долгосрочной перспективе. В автоматизации существуют различные подходы, например, Behavior Driven Development (BDD), разработка через поведение.
С этим подходом связаны инструменты cucumber, robot framework, behave и другие, в которых разделены сценарии выполнения и реализация каждой конструкции. Такое разделение помогает составить удобочитаемые сценарии, но требует значительных затрат времени и поэтому может быть непрактичным при написании реализации.
Рассмотрим, как можно упростить работу с BDD, используя подходящие инструменты – например, фреймворк Spock, который сочетает в себе красоту, удобство принципов BDD и особенности jUnit.
Spock framework
Spock – фреймворк для тестирования и спецификации приложений на языках Java и Groovy. Благодаря использованию в качестве основы платформы JUnit этот фреймворк совместим со всеми популярными IDE (в частности, IntelliJ IDEA), различными инструментами сборки (Ant, Gradle, Maven) и continuous integration (CI) серверами.
Как пишут разработчики фреймворка, Spock «вдохновлен JUnit, RSpec, jMock, Mockito, Groovy, Scala, вулканцами и другими увлекательными формами жизни».
В этой статье мы рассмотрим последнюю доступную версию, Spock Framework 2.0. Ее особенности: возможность использования JUnit5, Java 8+, groovy 2.5 (также существует сборка с версией 3.0). Spock распространяется по лицензии Apache 2.0 и имеет отзывчивое сообщество пользователей. Разработчики фреймворка продолжают дорабатывать и развивать Spock, который уже включает в себя множество расширений, позволяющих тщательно настроить запуск тестов. Например, одно из наиболее интересных анонсированных направлений доработки – это добавление параллельного исполнения тестов.
Groovy
Groovy является объектно-ориентированным языком программирования, разработанным для платформы Java как дополнение с возможностями Python, Ruby и Smalltalk. Groovy использует Java-подобный синтаксис с динамической компиляцией в JVM байт-код и напрямую работает с другим Java-кодом и библиотеками. Язык может использоваться в любом Java-проекте или как скриптовый язык.
К особенностям groovy относятся: как статическая, так и динамическая типизация; встроенный синтаксис для списков, массивов и регулярных выражений; перегрузка операций. При этом замыкания в Groovy появились задолго до Java.
Groovy хорошо подходит для быстрой разработки тестов, когда есть возможность применять «синтаксический сахар», схожий с python, и не задумываться о типизации объектов.
Особенности Spock Framework
Одна из ключевых особенностей фреймворка – у разработчика есть возможность писать спецификации с ожидаемыми характеристиками системы с использованием принципов BDD подхода. Этот подход позволяет составлять бизнес-ориентированные функциональные тесты для программных продуктов с высокой предметной и организационной сложностью.
Спецификация представляет собой класс groovy, расширяющий spock.lang.Specification
Спецификация может содержать различные вспомогательные поля, которые инициируются для каждого класса спецификации.
С помощью аннотации @Shared можно дать доступ к полю классам-наследникам спецификации.
Методы настройки класса спецификации:
В следующей таблице рассмотрим, у каких ключевых слов и методов Spock framework есть аналоги в JUnit.
Блоки теста
В Spock Framework каждая фаза теста выделена в отдельный блок кода (см. пример в документации).
Блок кода начинается с лейбла и завершается началом следующего блока кода или окончанием теста.
Блок given отвечает за настройку начальных условий теста.
Блоки when, then всегда используются вместе. В блоке when – стимулятор, раздражитель системы, а в блоке then – ответная реакция системы.
В тех случаях, когда есть возможность сократить конструкцию when-then до одного выражения, можно использовать один блок expect. Далее будут использованы примеры из официальной документации Spock framework:
или одно выражение
Блок cleanup применяют для освобождения ресурсов перед следующей итерацией теста.
Блок where применяют для передачи данных для тестирования (Data Driven Testing).
Виды передачи входных данных будут рассмотрены далее.
Пример реализации теста на Spock Framework
Далее рассмотрим подходы к реализации тестирования веб-страницы авторизации пользователя в системе с использованием selenium.
Здесь мы видим базовый класс спецификации страницы. В начале класса мы видим импорт необходимых классов. Далее представлена аннотация shared, позволяющая классам-наследникам получить доступ к веб-драйверу. В блоке setup() мы видим код инициализации веб-драйвера и открытия веб-страницы. В блоке cleanup() – код завершения работы веб-драйвера.
Далее перейдем к обзору спецификации страницы авторизации пользователя.
Спецификация страницы авторизации наследуется от базовой спецификации страниц. Аннотация Issue задает идентификатор теста во внешней системе трекинга (например, Jira). В следующей строке мы видим название теста, которое по соглашению задается строковыми литералами, что позволяет использовать любые символы в названии теста (в том числе и русскоязычные). В блоке given происходит инициализация page object класса страницы авторизации, а также получение корректных логина и пароля для авторизации в системе. В блоке when выполняется действие по авторизации. В блоке then – проверка ожидаемого действия, а именно – успешная авторизация и переадресация на главную страницу системы.
На примере данной спецификации мы видим наиболее значимый плюс использования парадигмы BDD в spock – спецификация системы одновременно является и ее документацией. Каждый тест описывает определенное поведение, каждый шаг в тесте имеет свое описание, понятное не только разработчикам, но и заказчикам. Описание блоков может быть представлено не только в исходном коде теста, но и в диагностических сообщениях или отчетах о работе теста.
В фреймворке предусмотрена возможность передавать различные логины и пароли для тестирования (параметризировать тест).
Data Driven Testing в Spock Framework
Data Driven Testing = table-driven testing = parameterized testing
Для тестирования сценария с несколькими параметрами можно использовать различные варианты их передачи.
Таблицы данных (Data Tables)
Рассмотрим несколько примеров из официальной документации фреймворка.
Каждая строка в таблице – отдельная итерация теста. Также таблица может быть представлена и одним столбцом.
_ — объект-заглушка класса спецификации.
Для лучшего визуального восприятия параметров можно переписать пример выше в следующем виде:
Теперь мы видим, что a, b – входные параметры, а c – ожидаемое значение.
Потоки данных (Data pipes)
В некоторых случаях использование таблицы параметров будет выглядеть очень громоздко. В таких случаях можно применять следующий вид передачи параметров:
Тестирование в Java. Spock Framework
Behaviour-driven development
Итак, напомню что же это такое. Рассмотрим пример. Есть утилита, работающая с ant шаблонами(это те, что для выборки файлов).? — любой 1 и только 1 символ, * — любое количество любых символов, ** — любой путь. Выглядит как-то так:
Оба метода проверяют соответствует ли переданная строка шаблону или нет, но метод matchAntPattern учитывает только локальный паттерн без учета пути, matchAntPath учитывает полный путь. Следуя принципам TDD будет создан тест на каждый метод с некоторым набором входных данных и некоторым набором ожидаемых результатов.
Таким образом тест будет выглядеть примерно так:
Теперь подробнее о Spock Framework.
Основные возможности
Как я уже говорил, сценарии пишутся на Groovy. Хорошо это или плохо? Решайте сами, новички могут почитать Groovy за 15 минут – краткий обзор.
Спецификация должна быть унаследована от spock.lang.Specification. Она может содержать поля, установочные методы(fixture methods), сценарии требований(feature methods), вспомогательные методы(helper methods).
Поля по умолчанию не шарятся между сценариями, т.е. изменения поля из одного сценария не будут видны из другого сценария. Чтобы расшарить можно зааннотировать с помощью @Shared.
Сценарии требований — это основная часть спецификации. Именно здесь описывается поведение компонента. Принято называть их используя строковые литералы, причем можно использовать любые символы, главное чтобы это название как можно более четко описывало, что этот сценарий делает. Например, в нашем случае:
Напишем к нему требование «должен искать файлы на файловой системе»:
Итак, дано — поисковик, который ищет в папке test1 из classpath, проверяем поиск, условие выполнения — поисковик должен найти наши файлы. inClasspath — вспомогательный метод, возвращающий абсолютный путь файла из classpath.
Еще один пример для PathUtils «значения шаблона и проверяемой строки не должны быть null»
Здесь мы видим метод thrown(. ), это ожидание указанного исключения, есть также метод notThrown(. ) и noExceptionThrown(). Они для проверки, что заданное/никакое исключение не выбрасывается. Также в then части могут присутствовать ожидания выполнения некоторых методов у мок-объектов, но о них чуть позже. Еще один пример:
Как видно из примера, если и when, и then части можно объединить в одно условие, то удобнее использовать блок expect. Данный сценарий можно улучшить сделав его параметризируемым с помощью блока where:
Думаю из примеров все и так понятно, поэтому не буду заострять на этом внимание. Отмечу только что в where блоке нельзя использовать поля, не помеченные как @Shared.
Взаимодействия
Помимо всего прочего, фреймворк позволяет работать с мок-объектами без дополнительных зависимостей. Можно создавать моки для интерфейсов и не final классов. Создание выглядит так:
Можно переопределять возвращаемые значения либо сами методы таких объектов. Авторы называют это взаимодействиями (interactions).
Взаимодействия бывают локальными (определенные в then блоке) и глобальными(определенные в любом другом месте). Локальные доступны только в then блоке, глобальные доступны везде, начиная с точки их определения. Также для локальных взаимодействий можно указать их мощность, это ожидаемое количество вызовов методов.
В этом примере мы создаем мок для UserDAO и реальный объект UserCache использующий этот мок(setup-блок). Затем мы ищем несколько пользователей по имени(when-блок) и в завершение проверяем, чтобы findAll метод, возвращающий заранее подготовленный результат, вызывался только 1 раз.
Описывая взаимодействия можно использовать шаблоны:
Подробнее можно почитать здесь.
Дополнительные возможности
Запуск тестов
Благодаря тому, что Spock-тесты запускаются с помощью JUnit запускалки(Sputnik), они отлично работают под различными IDE(так говорят авторы, я проверял только под идеей). Также можно настроить запуск тестов из ant, maven, gradle. Всю необходимую информацию о настройках можно найти здесь.
Добавлю еще, что для себя я немного подшаманил конфигурацию под maven, т.к. предложенная авторами не работала под maven3. Вот мой вариант конфигурации:
Вывод
Несмотря на то, что познакомился с этим замечательным фреймворком я совсем недавно и опыта использования его практически не имею, могу с уверенностью сказать, что по возможностям он не уступает, а в некоторых моментах даже превосходит другие фреймворки. Мне очень понравилось писать тесты на Groovy, понравилось писать тесты руководствуясь BDD. Поэтому и вам советую попробовать.
8 приложений для Android, которые нужно удалить. Они опасны
Кто бы что ни говорил, но Google Play – это помойка. Не даром её признали самым популярным источником вредоносного софта для Android. Просто пользователи в большинстве своём доверяют официальном магазину приложений Google и скачивают оттуда любое ПО без разбору. А какой ещё у них есть выбор? Ведь их всегда учили, что скачивать APK из интернета куда опаснее. В общем, это действительно так. Но остерегаться опасных приложений в Google Play нужно всегда. По крайней мере, постфактум.
Есть как минимум 8 приложений, которые нужно удалить
Google добавила в Google Play функцию разгона загрузки приложений
Исследователи кибербезопасности из антивирусной компании McAfee обнаружили в Google Play 8 вредоносных приложений с многомиллионными загрузками. Попадая на устройства своих жертв, они скачивают получают доступ к сообщениям, а потом совершают от их имени покупки в интернете, подтверждая транзакции кодами верификации, которые приходят в виде SMS.
Вредоносные приложения для Android
Нашли вирус? Удалите его
В основном это приложения, которые потенциально высоко востребованы пользователями. Среди них есть скины для клавиатуры, фоторедакторы, приложения для создания рингтонов и др.:
Это названия пакетов приложений, то есть что-то вроде их идентификаторов. Поскольку всё это вредоносные приложения, их создатели знают, что их будут искать и бороться с ними. Поэтому они вполне могут быть готовы к тому, чтобы менять пользовательские названия приложений, которые видим мы с вами. Но это мы не можем этого отследить. Поэтому куда надёжнее с этой точки зрения отслеживать именно идентификаторы и удалять вредоносный софт по ним.
Как найти вирус на Android
Но ведь, скажете вы, на смартфоны софт устанавливается с пользовательскими названиями. Да, это так. Поэтому вам понадобится небольшая утилита, которая позволит вам эффективно выявить весь шлаковый софт, который вы себе установили, определив название их пакетов.
В красном квадрате приведен пример названия пакета
Package Name Viewer удобен тем, что позволяет не просто найти нужное приложение по названию его пакета, но и при необходимости перейти в настройки для его удаления. Для этого достаточно просто нажать на иконку приложения, как вы попадёте в соответствующий раздел системы, где сможете остановить, отключить, удалить накопленные данные, отозвать привилегии или просто стереть нежелательную программу.
Как отменить подписку на Андроиде
Лучше всего приложение именно удалить. Это наиболее действенный способ защитить себя от его активности. Однако не исключено, что оно могло подписать вас на платные абонементы, поэтому для начала проверьте свою карту на предмет неизвестных списаний, а потом просмотрите список действующих подписок в Google Play:
Если подписка оформлена через Google Play, отменить её ничего не стоит
В принципе, если подписка была оформлена через Google Play и оплата уже прошла, вы можете потребовать у Google вернуть уплаченные деньги. О том, как это делается, мы описывали в отдельной статье. Но поскольку разработчики таких приложений обычно тщательно продумывают способы воровства денег, как правило, они не используют встроенный в Google Play инструмент проведения платежей, чтобы их в случае чего не могли отозвать.