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


Перед прочтением рекомендуем освоить предыдущий материал из этой серии.
 

Способы сокрытия

Специалисты выделяют три наиболее распространенных способа противодействия криминалистическому исследованию приложений в ОС Android: обфускация, шифрование символьных строк и проверка окружения. Обфускация — это приведение исполняемого кода программы к виду, сохраняющему его функциональность, но затрудняющему анализ. Часть вредоносного кода может находиться в мультимедийных и графических файлах различных форматов, например MP3, PNG, GIF, AVI. Такой метод сокрытия кода называется компьютерной стеганографией.

 

Постановка задачи: куда-то уходят деньги

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

Дальше изучать файл (а именно определять содержащиеся в нем данные или команды) будем при помощи Android Studio — интегрированной среды разработки для работы с платформой Android. Начнем с файла AndroidManifest.xml, который содержит запросы для получения различных функций и прав на мобильном устройстве. В исследуемом файле имеется запрос SMS_SEND, который позволит приложению отправлять СМС.

Откроем метод onCreate класса Activation. Метод содержит следующий код:

new-instance v0, Lcl/catsboat/c;
invoke-direct {v0, p0}, Lcl/catsboat/c;-><init>(Lcl/catsboat/Main;)V
invoke-virtual {v0}, Lcl/catsboat/c;->

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

Рассматривая класс cl/catsboat/c, нужно обратить внимание на строку со следующим кодом:

invoke-direct {v1, v2, v3}, Lcl/catsboat/a;-><init>(Landroid/content/Context;Landroid/os/Handler;)V

В этой строке есть обращение к классу a.smali. Конструкция класса содержит следующий код:

const-string v1, "image.png"
invoke-virtual {v0, v1}, Landroid/content/res/AssetManager;->open(Ljava/lang/String;)Ljava/io/InputStream;
move-result-object v0
const-wide/16 v2, 0x3486
invoke-virtual {v0, v2, v3}, Ljava/io/InputStream;->skip(J)J
new-instance v1, Ljava/io/DataInputStream;
invoke-direct {v1, v0}, Ljava/io/DataInputStream;-><init>(Ljava/io/InputStream;)V

Этот блок кода создает объект, представляющий собой поток байтов для чтения из image.png, находящегося в папке Assets приложения SMSSender, далее пропускает первые 13 446 байт и создает на основе него поток для чтения Java-данных. Логично предположить, что в файле image.png имеется зашифрованный код, к которому обращается приложение после запуска.
Обратимся к классу cl/catsboat/a.smali. Его конструкция содержит следующий код:

sput-object v0, Lcl/catsboat/a;->a:[B // Задается ключ для расшифровки байт-кода
return-void
:array_0
.array-data 1
  0xat // Байт в шестнадцатеричной системе
  0x2t // Байт в шестнадцатеричной системе
  0x4t // Байт в шестнадцатеричной системе
  0x5t // Байт в шестнадцатеричной системе
  0x6t // Байт в шестнадцатеричной системе
  0x7t // Байт в шестнадцатеричной системе
  0x8t // Байт в шестнадцатеричной системе
  0x5ct // Байт в шестнадцатеричной системе
  0x2dt // Байт в шестнадцатеричной системе
  0x18t // Байт в шестнадцатеричной системе
  0x38t // Байт в шестнадцатеричной системе
  0x4et // Байт в шестнадцатеричной системе
.end array-data
.end method

Итоговый ключ в шестнадцатеричной системе — {10,2,4,5,6,7,8,92,45,24,56,78}.

Для получения зашифрованного кода в файле image.png необходимо с помощью шестнадцатеричного редактора WinHex и Java-приложения выполнить следующие действия.

Продолжение статьи доступно только подписчикам

Вариант 1. Оформи подписку на «Хакер», чтобы читать все статьи на сайте

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

Вариант 2. Купи одну статью

Заинтересовала статья, но нет возможности оплатить подписку? Тогда этот вариант для тебя! Обрати внимание: этот способ покупки доступен только для статей, опубликованных более двух месяцев назад.


Комментарии

Подпишитесь на ][, чтобы участвовать в обсуждении

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

Check Also

Цифровой паноптикум. Настоящее и будущее тотальной слежки за пользователями

Даже если ты тщательно заботишься о защите своих данных, это не даст тебе желаемой приватн…