Сегодня в выпуске: восемь способов обнаружить внедрение Frida в приложение, три совета, как защитить нативные библиотеки от реверса, отключение проверки на root в подопытном приложении, защита от метарефлексии в Android 11, принцип работы Huawei Quick Apps, а также подборка инструментов пентестера и библиотек для разработчиков.
Detect Frida for Android — статья о том, как обнаружить, что приложение работает под управлением Frida (известный инструмент, позволяющий перехватить управление приложением и внедрить код). Автор приводит пять известных техник и три собственные:
/proc/<pid>/maps
. Может закончиться неудачей, если взломщик изменит имена библиотек./data/local/tmp
. Опять же взломщик может переименовать эти файлы./proc/<pid>/fd
.Примеры использования последних трех техник опубликованы в репозитории на GitHub.
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). Однако не стоит забывать, что одно лишь наличие нативного кода не остановит опытного и мотивированного взломщика, поэтому стоит использовать дополнительные средства, чтобы его запутать. Есть несколько несложных способов это сделать.
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score! Подробнее
1 год5380 р. |
1 месяц720 р. |
Я уже участник «Xakep.ru»
Читайте также
Последние новости