Вирусы под Android. №7 (Чистка APK [1])

Тема в разделе "Вирусология", создана пользователем waydam, 12 окт 2016.

  1. waydam

    waydam

    Сообщения:
    464
    Баллы:
    16
    Привет, дорогой Друг. Давно не было материалов, это все последствия работы. Последнее время что-то очень много навалилось. Но думаю скоро все наладится. Очень часто спрашивают, как же сделать APK чистым?


    Историю эту начнем с того, что антивирусы по большей части полагаются на сигнатурный анализ. А значит, они не смогут отследить последовательность выполнения кода в памяти. Давайте перечислим места куда AV любят ставить детект:

    1. Подпись
    2. Ресурсы
    3. Манифест
    4. Последовательность вызываемых функций (Самый сложный)
    Чистка подписи
    Ну начнем с самого простого, это цифровая подпись. Берёте и подписываете другим сертификатом. Сверяете детекты, если они пропали – значит вы справились. Сертификаты можно генерировать через встроенную утилиту подписи в Android Studio. Я бы даже сказал нужно, ведь неправильно созданный сертификат, это еще 1 детект к вашему зверю.

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

    1. Переименовываете все файлы в ресурсах. (не забывайте менять пути в остальных файлах)
    2. Если есть картинки, то желательно к ним применить сжатие, чтобы изменилась контрольная сумма.
    3. Содержимое файлов xml желательно тоже менять, но это не так критично.
    Чистка манифеста
    Всего 1 файл, а доставляет кучу проблем. Ведь это отправная точка на анализ вашего APK. Тут все пути и все важные классы. Далее делаем следующие шаги:

    1. Изменить имя пакета APK.
    2. Далее идет изменения названия классов указанных в манифесте, при этом не забывайте менять названия файлов и сами классы в файле. Android Studio делает это очень удобно.
    3. Изменение расположение элементов внутри xml.
    Чистка кода
    Тут вам поможет только фантазия. Основная задача – изменить цепочку вызываемых функций. Можно добавлять мусор или просто изменить алгоритм на другой. Все зависит от того какой у вас проект. Так же вам придется написать какую нибудь простую функцию шифрования статических строк.

    Мы возьмем base64:
    Код:
    static String Encode64(String text){
    byte[] data = text.getBytes("UTF-8");
    String base64 = Base64.encodeToString(data, Base64.DEFAULT);
    return base64;
    }

    static String Decode64(String base64){
    byte[] data = Base64.decode(base64, Base64.DEFAULT);
    String text = new String(data, "UTF-8");
    return text;
    }
    Нам потребуется Decode64. Только переименуем для удобства ее в одну букву. К примеру D.

    Код:
    static String D(String base64)
    Теперь скрываем все строки с помощью base64. Вставляем вместо обычного текста в нашем коде наши заготовки.

    Было:
    Код:
    Toast.makeText(context, "test", Toast.LENGTH_SHORT).show();
    Стало:

    Код:
    Toast.makeText(context, D("dGVzdA=="), Toast.LENGTH_SHORT).show();
    То есть при исполнении функции строка декодируется и будет нормальной

    Автоматизация
    На рынке существует полно инструментов упрощающих вашу жизнь, опишу ту что использовал сам:

    1. Stringer – обфускатор APK файлов, один из лучших вроде как. Честно я не пользовался, но отзывы у него хорошие.
    2. proGuard – входит в комплект Android Studio. Код обфусцирует хорошо, но минус его 1 и очень большой. Он только изменяет код, ни чего больше. То есть переменные, ресурсы, манифест – все останется как и было. Но это не значит что его надо выкинуть. Выполнив все мои рекомендации и подключив этот обфускатор. Можно добиться хороших результатов и бесплатно.
    3. Куча других обфускаторов. (см. Гугл)
    Завершение
    Описанные методы, всего лишь начало обфускации. Когда вы займетесь этим плотно, вы найдёте еще массу идей. Этот материал лишь введение, чтобы ты, мой юный друг, понимал как это происходит.

    1ая часть:

Поделиться этой страницей

Top