Пожалуйста, обратите внимание, что пользователь заблокирован
Добрый день, сегодня поговорим про написание малвари для GP и лоадеров. Как это делается и с чем хавается.
Небольшое введение
Решил я написать данную статейку, дабы подтвердить свою квалификацию. И стать мега крутым. Ахаха. Ладно приступим. Бывает два вида вредоносных приложений в Google Play. Это Лоадеры и полноценные боты. Но почему ботов реально так мало и все покупают лоадеры? Да потому что в Гугл плее жеская политика добавления и всеми любимая технология для "инжектов" , да простит меня господи за это слово, через сервис accessability, просто не проходит проверку. И боты там с более урезанным функционалом, для точечных атак. К примеру сбор CC, показ и скликивание рекламы, рассылки смс и так далее. А лоадеры в чем их прелесть, заставляют юзера обманным путем поставить вручную любой бот, и при этом приложение получает максимальные права. Просто СИ (социальная инженерия) и ловкость рук. Хах
Как проходит проверку приложение при добавлении в каталог Google Play
Я приведу список из своих личных наблюдейний, может кто-то что-то еще добавит.
1. приложение проверяется на антивирусе eset nod32.
2. Приложение проеряется на список прав в совокупности с privacy policy
3. Приложение запускается примерно на 5 тестовых устройствах, где анализируется сетевой трафик и экраны (можно спалиться по последовательности)
4. Приложение уходит на ручную модерацию по ключевым словам. К примеру если мы указали antivirus. То приложение будут еще вручном режиме проверять на тесты EICAR
https://en.wikipedia.org/wiki/EICAR_test_file
5. Так же приложение проверяется на энтропию нейронной сетью. Которое сверяет код и входные точки с манифеста с уже удаленными приложениями. То есть написал один лоадер и загрузив, может получиться так что на раз 5й вы его уже не сможете загрузить. Вас спалит нейронка.
И так начнем с простого давай-те напишем простой лоадер.
Шаги работы лоадера
1. Скачать, хотя файл можно пронести в assets или других местах apk
2. Дропнуть на диск. Так как сейчас запрещено запускать файл из памяти.
3. Теперь тут есть два варианта. Так как у нас ввели специальные права android.permission.REQUEST_INSTALL_PACKAGES в android 8 и выше. Можно сделать по отдельности, сначало запросить права, потом через время кидать файл на установку через Intent. Либо кидать сразу на установку через intent и оно автоматом будет кидать на запрос этих прав. Только в первом случае у нас есть место для маневров. Как-то подготовить пользователя через социальную инженерию.
4. Ну и все, наш софт стоит)
Код запроса прав
Код запуска инстала
PATH_TO_FILE - полный путь до файла на карте памяти. Не забываем что для записи нам потребуется получить права на чтение и запись с жеского диска. А так же у нас могут возникнуть проблемы с совместимостью.
Выполняем при старте первой активити, для настройки политики работы с путями.
Код запуска установки.
Собственно это и есть код всего лоадера. Ну сохранение файла на диск или чтение из assets, я думаю это уже очень тупо постить. Этот гуглится прям как 2+2. Не хочу постить "скачать кусок хлеба"
Надо немного развиваться.
Теперь мы с вами сделаем кое что посложнее. Вдруг у нас нет исходников и мы захотим взять готовое приложение и вставить туда наш лоадер или еще другую хурму.
Сидим, исходников нету, но все равно желание не угасает. Тут на самом деле все просто, главное ни где не запутаться.
1. Создаем пустой проект и отказываемся от всех библиотек. А самое главное это ActivityCompact
2. Пишем нашу логику. К примеру будем показывать Aler или еще что) И после компиляции файла в релиз с подписью, у вас там должен получиться очень мелки размер. Ни каких там мегабайт быть не должно. Иначе вы сделали хрень) Смотрите пункт 1.
3. Скачиваем ApkTool (https://ibotpeaches.github.io/Apktool/install/)
4. Докомпилируем наш файл и файл донор APK
5. Заходим в декомпилированную папку нашего файла в раздел smali и должны увидеть там одну папку, которая назвается как начало имени пакета. Копируем ее в туже папку в донора.
6. В обоих папках декомпиляции есть manifest. мы должны перенести все недостающие данные с нашего файла в донор.
7. Самый сложный этап, это перенести ресурсы. ВАЖНЫЙ МОМЕНТ. В стали файлах лучше не использовать ресурсы, а только статичные переменные. Заходим в папку res. Копируем недостающие layout и обязательно их добавляем в public.xml донора по аналогии. Важно эти же айди изменить в папке в smali что мы скопировали. Они там прописаны статично.
8. В манифесте заменяем входное активити и собираем апк
9. Подписываем
10. Ура мы у цели)
Немного итога
Итак зная теорию и два этих метода, можно неплохо развернуться в Google Play. Конечно я описал довольно простые примитивы. И нужно еще использовать крипт, морфинг и так далее. Всем спасибо за прочтение. Если интересуют технические вопросы, пишите я всем все расскажу, мне не жалко. Расписывать более подробно техническую часть не имеет смысла. Так как половина вопросов гуглятся, а что не гуглится, зависит прям от донора и нужно использовать чуток смекалки
Так же не откажусь на пиво)
btc
Небольшое введение
Решил я написать данную статейку, дабы подтвердить свою квалификацию. И стать мега крутым. Ахаха. Ладно приступим. Бывает два вида вредоносных приложений в Google Play. Это Лоадеры и полноценные боты. Но почему ботов реально так мало и все покупают лоадеры? Да потому что в Гугл плее жеская политика добавления и всеми любимая технология для "инжектов" , да простит меня господи за это слово, через сервис accessability, просто не проходит проверку. И боты там с более урезанным функционалом, для точечных атак. К примеру сбор CC, показ и скликивание рекламы, рассылки смс и так далее. А лоадеры в чем их прелесть, заставляют юзера обманным путем поставить вручную любой бот, и при этом приложение получает максимальные права. Просто СИ (социальная инженерия) и ловкость рук. Хах
Как проходит проверку приложение при добавлении в каталог Google Play
Я приведу список из своих личных наблюдейний, может кто-то что-то еще добавит.
1. приложение проверяется на антивирусе eset nod32.
2. Приложение проеряется на список прав в совокупности с privacy policy
3. Приложение запускается примерно на 5 тестовых устройствах, где анализируется сетевой трафик и экраны (можно спалиться по последовательности)
4. Приложение уходит на ручную модерацию по ключевым словам. К примеру если мы указали antivirus. То приложение будут еще вручном режиме проверять на тесты EICAR
https://en.wikipedia.org/wiki/EICAR_test_file
5. Так же приложение проверяется на энтропию нейронной сетью. Которое сверяет код и входные точки с манифеста с уже удаленными приложениями. То есть написал один лоадер и загрузив, может получиться так что на раз 5й вы его уже не сможете загрузить. Вас спалит нейронка.
И так начнем с простого давай-те напишем простой лоадер.
Шаги работы лоадера
1. Скачать, хотя файл можно пронести в assets или других местах apk
2. Дропнуть на диск. Так как сейчас запрещено запускать файл из памяти.
3. Теперь тут есть два варианта. Так как у нас ввели специальные права android.permission.REQUEST_INSTALL_PACKAGES в android 8 и выше. Можно сделать по отдельности, сначало запросить права, потом через время кидать файл на установку через Intent. Либо кидать сразу на установку через intent и оно автоматом будет кидать на запрос этих прав. Только в первом случае у нас есть место для маневров. Как-то подготовить пользователя через социальную инженерию.
4. Ну и все, наш софт стоит)
Код запроса прав
Intent intent = null;
intent =new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES);
startActivity(intent);
Код запуска инстала
PATH_TO_FILE - полный путь до файла на карте памяти. Не забываем что для записи нам потребуется получить права на чтение и запись с жеского диска. А так же у нас могут возникнуть проблемы с совместимостью.
Выполняем при старте первой активити, для настройки политики работы с путями.
if(Build.VERSION.SDK_INT>=24){
try{
Method m = StrictMode.class.getMethod("disableDeathOnFileUriExposure");
m.invoke(null);
}catch(Exception e){
e.printStackTrace();
}
}
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
Код запуска установки.
Intent intent = null;
intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(PATH_TO_FILE)), "application/vnd.android.package-archive");
startActivity(intent);
Собственно это и есть код всего лоадера. Ну сохранение файла на диск или чтение из assets, я думаю это уже очень тупо постить. Этот гуглится прям как 2+2. Не хочу постить "скачать кусок хлеба"
Теперь мы с вами сделаем кое что посложнее. Вдруг у нас нет исходников и мы захотим взять готовое приложение и вставить туда наш лоадер или еще другую хурму.
Сидим, исходников нету, но все равно желание не угасает. Тут на самом деле все просто, главное ни где не запутаться.
1. Создаем пустой проект и отказываемся от всех библиотек. А самое главное это ActivityCompact
2. Пишем нашу логику. К примеру будем показывать Aler или еще что) И после компиляции файла в релиз с подписью, у вас там должен получиться очень мелки размер. Ни каких там мегабайт быть не должно. Иначе вы сделали хрень) Смотрите пункт 1.
3. Скачиваем ApkTool (https://ibotpeaches.github.io/Apktool/install/)
4. Докомпилируем наш файл и файл донор APK
5. Заходим в декомпилированную папку нашего файла в раздел smali и должны увидеть там одну папку, которая назвается как начало имени пакета. Копируем ее в туже папку в донора.
6. В обоих папках декомпиляции есть manifest. мы должны перенести все недостающие данные с нашего файла в донор.
7. Самый сложный этап, это перенести ресурсы. ВАЖНЫЙ МОМЕНТ. В стали файлах лучше не использовать ресурсы, а только статичные переменные. Заходим в папку res. Копируем недостающие layout и обязательно их добавляем в public.xml донора по аналогии. Важно эти же айди изменить в папке в smali что мы скопировали. Они там прописаны статично.
8. В манифесте заменяем входное активити и собираем апк
9. Подписываем
10. Ура мы у цели)
Немного итога
Итак зная теорию и два этих метода, можно неплохо развернуться в Google Play. Конечно я описал довольно простые примитивы. И нужно еще использовать крипт, морфинг и так далее. Всем спасибо за прочтение. Если интересуют технические вопросы, пишите я всем все расскажу, мне не жалко. Расписывать более подробно техническую часть не имеет смысла. Так как половина вопросов гуглятся, а что не гуглится, зависит прям от донора и нужно использовать чуток смекалки
Так же не откажусь на пиво)
btc
1293C9maaXnyugWeSyJmcJzMDn5tmX5RpT