AndroTickler – инструмент для аудита Android приложений

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

Как его использовать

  1. Создайте инструмент из кода
  2. Переместить AndroTickler.jar находится в том же каталоге, что и каталог Tickler_lib и файл Tickler.conf (автоматически создается в build/ libs)
  3. Подключите ваше 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 (только примитивные типы данных и строка) Если NumberOfArgToModifyNumberOfArgs: задает возвращаемое значение

Запустите скрипт 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

Report Page