Чистка для Андроида
Привет, дорогой Друг. Давно не было материалов, это все последствия работы. Последнее время что-то очень много навалилось. Но думаю скоро все наладится. Очень часто спрашивают, как же сделать APK чистым?
Историю эту начнем с того, что антивирусы по большей части полагаются на сигнатурный анализ. А значит, они не смогут отследить последовательность выполнения кода в памяти. Давайте перечислим места куда AV любят ставить детект:
- Подпись
- Ресурсы
- Манифест
- Последовательность вызываемых функций (Самый сложный)
Чистка подписи
Ну начнем с самого простого, это цифровая подпись. Берёте и подписываете другим сертификатом. Сверяете детекты, если они пропали – значит вы справились. Сертификаты можно генерировать через встроенную утилиту подписи в Android Studio. Я бы даже сказал нужно, ведь неправильно созданный сертификат, это еще 1 детект к вашему зверю.
Чистка ресурсов
Тут уже начинаются сложности, но не такие большие как в след пунктах. Ваша задача сделать приложение совсем не похожее на другое. Что нужно для этого?
- Переименовываете все файлы в ресурсах. (не забывайте менять пути в остальных файлах)
- Если есть картинки, то желательно к ним применить сжатие, чтобы изменилась контрольная сумма.
- Содержимое файлов xml желательно тоже менять, но это не так критично.
Чистка манифеста
Всего 1 файл, а доставляет кучу проблем. Ведь это отправная точка на анализ вашего APK. Тут все пути и все важные классы. Далее делаем следующие шаги:
- Изменить имя пакета APK.
- Далее идет изменения названия классов указанных в манифесте, при этом не забывайте менять названия файлов и сами классы в файле. Android Studio делает это очень удобно.
- Изменение расположение элементов внутри 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; }