Содержание статьи
Почитать
Как обнаружить Frida
Detect Frida for Android — статья о том, как обнаружить, что приложение работает под управлением Frida (известный инструмент, позволяющий перехватить управление приложением и внедрить код). Автор приводит пять известных техник и три собственные:
- Поиск библиотек frida-agent и frida-gadget в файле
/proc/<pid>/maps
. Может закончиться неудачей, если взломщик изменит имена библиотек. - Поиск в памяти нативных библиотек особых строк (как рассказано в этой статье). Взломщик может перекомпилировать Frida с измененными строками.
- Пройти по всем открытым TCP-портам, отправить в них dbus-сообщение AUTH и дождаться ответа Frida. Метод хорошо работает при использовании frida-server (на рутованном устройстве), но бесполезен, если приложение было перепаковано с включением в него frida-gadget (способ обычно применяется, когда невозможно получить root на устройстве).
- Проверить наличие специфических для Frida файлов в каталоге
/data/local/tmp
. Опять же взломщик может переименовать эти файлы. - Проверить, открыты ли для записи исполняемые секции нативных библиотек. В нормальной ситуации это почти невозможно.
- Поиск потоков frida-server и frida-gadget, которые Frida запускает в рамках процесса подопытного приложения.
- Поиск специфичных для Frida именованных пайпов в каталоге
/proc/<pid>/fd
. - Сравнение кода нативных библиотек на диске и в памяти. При внедрении Frida изменяет секцию text нативных библиотек.
Примеры использования последних трех техник опубликованы в репозитории на GitHub.
Обход детекта root с помощью Frida
Android Root Detection Bypass Using Objection and Frida Scripts — рассказ о способах отключить проверку на права root в подопытном приложении с помощью Frida или тулкита Objection на базе Frida.
В большинстве случаев будет достаточно либо скачать уже готовый скрипт из репозитория Frida, либо воспользоваться тулкитом Objection для отключения проверки на root:
android root disable
Однако эти способы могут не сработать, и тогда придется писать свой собственный скрипт. Для этого необходимо декомпилировать/дизассемблировать подопытное приложение и найти в нем функцию, ответственную за проверку наличия прав root на устройстве. Обычно она выглядит примерно так:
private static boolean detectmethods() {
String[] arrayOfString = new String[10];
arrayOfString[0] = "/system/app/Superuser.apk";
arrayOfString[1] = "/sbin/su";
arrayOfString[2] = "/system/bin/su";
arrayOfString[3] = "/system/xbin/su";
arrayOfString[4] = "/data/local/xbin/su";
arrayOfString[5] = "/data/local/bin/su";
arrayOfString[6] = "/system/sd/xbin/su";
arrayOfString[7] = "/system/bin/failsafe/su";
arrayOfString[8] = "/data/local/su";
arrayOfString[9] = "/su/bin/su";
int a = arrayOfString.length;
int b = 0;
while (a < b) {
if (new File(arrayOfString[a]).exists()) {
return true;
}
a += 1;
}
return false;
}
Допустим, она находится внутри класса roottest
в Java-пакете com.test.test
. Все, что нам нужно сделать, — подменить эту функцию на заглушку, которая всегда возвращает false. Для этого понадобится такой скрипт:
Java.perform(function () {
var MainActivity = Java.use('com.test.test.roottest');
MainActivity.root.implementation = function (detectmethods) {
console.log('Done: bypassed');
return false;
};
}
Далее скармливаем наш скрипт Frida и запускаем под ее управлением приложение:
$ frida -l rootbypass.js -f имя.пакета.приложения
Как защитить нативную библиотеку
Security hardening of Android native code — статья, рассказывающая, как защитить от реверса нативные библиотеки в приложениях для Android.
Обычно разработчики выносят сенситивный код в нативные, написанные на языках C/C++ библиотеки, чтобы повысить производительность и затруднить реверс приложения (читать дизассемблерные листинги нативного кода гораздо сложнее, чем код smali, и тем более сложнее, чем декомпилированный с помощью того же jadx код на Java). Однако не стоит забывать, что одно лишь наличие нативного кода не остановит опытного и мотивированного взломщика, поэтому стоит использовать дополнительные средства, чтобы его запутать. Есть несколько несложных способов это сделать.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»