AndroTickler – инструмент для аудита Android приложений
Этичный ХакерИнструмент Java, который помогает тестировать приложения Android быстрее, проще и эффективнее. AndroTickler предлагает множество функций сбора информации, статических и динамических проверок, которые охватывают большинство аспектов тестирования приложений Android. Он также предлагает несколько функций, которые нужны пентестерам во время их пентестов. AndroTickler также интегрируется с Frida для обеспечения отслеживания методов и манипуляций. Ранее он был опубликован под названием Tickler.
Для AndroTickler требуется хост Linux и корневое устройство Android, подключенное к его USB-порту. Инструмент ничего не устанавливает на устройство Android, он только создает каталог Tickler на / sdcard . AndroTickler зависит от Android SDK для запуска команд на устройстве и копирования данных приложения в каталог TicklerWorkspace на хосте для дальнейшего анализа. TicklerWorkspace - это рабочий каталог AndroTickler, и каждое приложение имеет отдельный подкаталог в TicklerWorkspace, который может содержать следующее (в зависимости от действий пользователя):
- Каталог DataDir: копия каталога данных приложения
- извлеченный каталог: вывод apktool в приложении, содержит код smali, ресурсы, библиотеки ... и т.д.
- Каталог bgSnapshots: содержит фоновые снимки, скопированные с устройства.
- каталог изображений: содержит любые скриншоты, сделанные для приложения.
- Каталог JavaCode: содержит Java-код приложения, декомпилированный инструментами dex2jar и JD
- каталог журналов: содержит файлы журналов, созданные -t -log, как описано ниже
- передача: файлы и каталоги, скопированные с устройства на хост с помощью -copy2host
- AndroidManifest.xml : Файл манифеста приложения в соответствии с apktool
- base.apk: APK-файл приложения, установленного на устройстве
- debuggable.apk: отладочная версия приложения, созданная -dbg
Каталог libs и файл конфигурации Tickler.conf находятся в том же каталоге, что и файл jar. Файл конфигурации задает местоположение каталога TicklerDir на хосте и Tickler на / sdcard устройства Android. Если файл конфигурации не существует или эти 2 каталога не заданы, то будут использоваться значения по умолчанию (Tickler_workspace в текущем каталоге и /sdcard/ Tickler соответственно). Каталог Tickler_lib содержит некоторые библиотеки Java и внешние инструменты, используемые AndroTickler, такие как apktool и dex2jar.
AndroTickler сильно зависит от следующих инструментов, поэтому они должны быть на вашем компьютере, прежде чем использовать его:
- Java 7 или выше
- Инструменты Android SDK (adb и друзья)
- sqlite3
Для некоторых функций требуются другие инструменты, но AndroTickler может работать и без них:
- Frida
- jarsigner
Как его использовать
- Создайте инструмент из кода
- Переместить AndroTickler.jar находится в том же каталоге, что и каталог Tickler_lib и файл Tickler.conf (автоматически создается в build/ libs)
- Подключите ваше Android-устройство к тестируемому приложению, установленному на
Текущая версия выполняет следующие действия:
Командная справка
java -jar AndroTickler.jar -h
Сбор информации / статический анализ:
Список установленных приложений на устройстве:
java -jar AndroTickler.jar -pkgs
Выполняет поиск приложения (пакета), установленного на устройстве, имя пакета которого содержит клавишу поиска
java -jar AndroTickler.jar -findPkg <searchKey>
Пакет без дополнительных атрибутов
java -jar AndroTickler.jar -pkg <package> [other options]
Любая команда с параметром -pkg (независимо от того, используется ли она с любым из следующих параметров или нет) выполняет следующие действия, если они не были выполнены ранее:
- Копирует приложение с устройства
- Извлекает файл манифеста приложения
- Декомпилирует приложение в код Java с помощью инструментов dex2jar и JD
Общая информация
java -jar AndroTickler.jar -pkg <package> -info
Возвращает следующую информацию:
- Идентификатор пользователя приложения
- Путь к каталогам приложения
- Если в коде приложения указано использование внешнего хранилища
- Каталоги приложений, которые уже существуют во внешнем хранилище
- URI содержимого в коде
- Если приложение поддерживает резервное копирование
- Если приложение можно отлаживать
- Схемы данных (например, iOS IPC)
- Разрешения, которые он использует
Сжатие кода
java -jar AndroTickler.jar -pkg <package> -squeeze [short | <codeLocation> ]
Извлекает следующее из декомпилированного Java-кода приложения:
- Сообщения журнала
- Любые указания на возможные учетные данные пользователя
- Комментарии Java
- Используемые библиотеки
- URL-адреса в коде
- Использование общих настроек
- Использование внешнего хранилища
- Общие компоненты, такие как OkHttp и WebView
Неудивительно, что его выходные данные обычно огромны, поэтому рекомендуется перенаправлять выходные данные команды в файл
short сжимает только декомпилированный код, который принадлежит разработчику. Например, если приложение имеет имя пакета com.notEnaf.myapp, то сжатие short сжимает только код в каталоге com / notEnaf.
Сжимает код только в каталоге codeLocation. Полезно ограничить поиск или сжать исходный код, если он доступен.
Список компонентов
java -jar AndroTickler.jar -pkg <package> -l [-exp] [-v]
Список всех компонентов приложения
-exp показывает только экспортированные компоненты
-v предоставляет более подробную информацию для каждого компонента:
- Тип компонента
- Экспортируется или нет
- Его фильтры намерений
- Инструмент проверяет соответствующий класс Java для каждого компонента и возвращает все возможные дополнительные функции intent
Список любых компонентов
java -jar AndroTickler.jar -pkg <package> -l [-act | -ser | -rec | -prov ] [-exp] [-v]
- -act: действия
- -ser: сервисы
- -rec: широковещательные приемники
- -prov: поставщики контента
- -exp: показывать только экспортированные компоненты любого из указанных выше типов
Базы данных
java -jar AndroTickler.jar -pkg <package> -db [|e|l|d] [nu]
По умолчанию команды all -db обновляют каталог хранилища данных приложения на хосте перед выполнением проверки.
ни один атрибут ИЛИ e не проверяет, зашифрованы ли базы данных приложения. Это действие по умолчанию в случае, если после -db флаг не указан. l Перечисляет все базы данных приложения. Возможно, зашифрованные базы данных не обнаружены. d принимает дамп sqlite любой из незашифрованных баз данных. nu noUpdate: запускает любой из вышеперечисленных параметров без обновления каталога данных приложения на хосте.
Сравнение каталогов хранилища данных
java -jar AndroTickler.jar -pkg <package> -diff [d|detailed]
Копирует каталог хранилища данных приложения (в DataDirOld), затем просит пользователя выполнить нужное ему действие и нажать Enter, когда он закончит. Затем он снова копирует каталог хранилища данных (в DataDir) и запускает diff между ними, чтобы показать, какие файлы были добавлены, удалены или изменены.
d | detailed выполняет то же самое, что и команда normal -diff, также показывает, что именно изменилось в текстовых файлах и незашифрованных базах данных.
Поиск
Код
java -jar AndroTickler.jar -pkg <package> -sc <key> [<customLocation>]
Поиск ключа осуществляется в следующих местах:
- Декомпилированный Java-код приложения
- res/values/strings.xml
- res/values/arrays.xml
Поиск не чувствителен к регистру.
Заменяет декомпилированное расположение кода Java пользовательским расположением.
Хранение
java -jar AndroTickler.jar -pkg <package> -sd <key>
Выполняет поиск в каталоге хранилища данных приложения для данного ключа
Запускает компоненты приложения всеми возможными комбинациями намерений. Например, если действие имеет фильтр намерений из 2 возможных действий и 3 схем URI данных, то AndroTickler запустит это действие со всеми возможными комбинациями этого намерения. Кроме того, AndroTickler фиксирует дополнительные функции intent, упомянутые в классе Java, соответствующем компоненту, присваивает им фиктивные значения и добавляет их к возможным комбинациям intent. Поддерживаются только дополнения типа boolean, string, int и float.
если используется опция -exp, то компоненты будут запускаться без привилегий root или каких-либо специальных разрешений. Если нет, то компоненты будут запущены с правами root. Это помогает протестировать приложение в 2 различных сценариях: против злоумышленников с обычными привилегиями или с высокими привилегиями.
Перед запуском компонентов AndroTickler печатает все команды, которые необходимо выполнить. Затем для каждой команды он запускает компонент, печатает команду, а затем ожидает пользователя. Это дает пользователю достаточно времени для выполнения дополнительных проверок после выполнения команды. Прежде чем пользователь перейдет к следующей команде, ему предоставляется возможность сделать снимок экрана устройства для документации PoC.
java -jar AndroTickler.jar -pkg <package> -t [-all | -exp] [target] [-log]
цель, как объясняется с помощью команды list, может быть:
- -act: действия. запускает (activity / activities) со всеми комбинациями намерений, как описано выше
- -ser : сервисы. запускает службы со всеми комбинациями намерений, как описано выше
- -rec: широковещательные приемники: отправляет все возможные широковещательные сообщения, которые соответствуют широковещательным приемникам
- -prov: поставщики контента: запрашивает поставщиков контента
если значение отсутствует, то целью является все вышеперечисленное
[-comp] <имя_компонента> Указывает только один компонент. Вы также можете использовать <имя_компонента> напрямую без флага -comp . -exp AndroTickler использует обычные привилегии для запуска только экспортированных целей. -все опции по умолчанию. AndroTickler использует права суперпользователя для запуска экспортированных целевых объектов - журнал фиксирует все сообщения logcat, сгенерированные во время сеанса запуска. Файл журнала сохраняется в подкаталоге logs.
Фрида:
На вашем хост-компьютере должна быть установлена программа Frida. Кроме того, местоположение сервера Frida на устройстве Android должно быть добавлено в файл Tickler.conf в записи Frida_server_path
Фиксируйте аргументы и возвращаемое значение
java -jar AndroTickler.jar -pkg <package> -frida vals <ClassName> <MethodName> <NumberOfArgs> [-reuse]
Отображает аргументы и возвращаемое значение этого метода (только примитивные типы данных и строка)
повторное использование В случае val и заданных параметров Frida создает / обновляет скрипт Frida для этой функциональности. Вы можете изменить созданный скрипт по своему усмотрению, затем, если вы хотите запустить его через AndroTickler, используйте опцию -повторно использовать, чтобы она не переопределялась.
Измените аргументы или возвращаемое значение
java -jar AndroTickler.jar -pkg <package> -frida set <ClassName> <MethodName> <NumberOfArgs> <NumberOfArgToModify> <newValue>[-reuse]
Устанавливает номер аргумента NumberOfArgToModify в значение newValue (только примитивные типы данных и строка) Если NumberOfArgToModify> NumberOfArgs: задает возвращаемое значение
Запустите скрипт JS Frida
java -jar AndroTickler.jar -pkg <package> -frida script <scriptPath>
Запускает скрипт frida JS, расположенный по адресу ScriptPath на вашем хосте
Перечислять загруженные классы:
java -jar AndroTickler.jar -pkg <package> -frida enum
Другие функции
Отладочная версия
java -jar AndroTickler.jar -pkg <package> -dbg
Создает отладочную версию приложения, которую можно установить на устройство и отладить с помощью любого внешнего инструмента. AndroTickler поставляется с хранилищем ключей для подписи отлаживаемого apk, но для этого требуется инструмент jarsigner на хосте.
Пользовательская версия
java -jar AndroTickler.jar -pkg <package> -apk <decompiledDirectory>
Создает apk-файл из каталога, подписывает его и устанавливает.
Фоновые снимки
java -jar AndroTickler.jar [-pkg <package>] [-bg|--bgSnapshots]
Копирует фоновые снимки, сделанные устройством (работает с опцией -pkg и без нее), в подкаталог bgSnapshots.
Копирование файлов / каталогов
Скопировать каталог хранилища данных:
java -jar AndroTickler.jar -pkg <package> -dataDir [dest]
Копирует каталог хранилища данных в DataDir dest Необязательное имя каталога назначения, который в любом случае будет расположен в sudirectory transfers.
Скопируйте любой файл / каталог:
java -jar AndroTickler.jar -pkg <package> -cp2host <source_path> [dest]
Копирует файлы / каталоги с устройств Android.
- source_path - это абсолютное местоположение того, что вы хотите скопировать с устройства Android
- dest: необязательное имя каталога назначения, которое в любом случае будет расположено в sudirectory transfers.
Если параметр dest не указан, то именем каталога будет временная метка транзакции.
Скриншот
java -jar AndroTickler.jar [-pkg <package>] -screen
- Захватывает текущий снимок экрана устройства и сохраняет его в подкаталоге images
- Работает с флагом пакета или без него
Примечание
Для параметров, которые не требуют опции -pkg, их данные будут сохранены в Tickler_Dir / NoPackage
Примеры:
java -jar AndroTickler.jar -pkg <package> -t -act -exp
Запускает экспортированные действия
java -jar AndroTickler.jar -pkg <package> -t -prov -log
Запрашивает всех поставщиков контента и сохраняет сообщения logcat до тех пор, пока инструмент не остановит выполнение
java -jar AndroTickler.jar -pkg <package> -t <component_name>
Запускает компонент, тип запуска зависит от типа компонента
Ссылка на GitHub