
Инструментарий для тестирования на проникновение и аудита Android-приложений.
Инструмент на Java, помогающий тестировать Android-приложения на проникновение быстрее, проще и эффективнее. AndroTickler предлагает множество функций сбора информации, статических и динамических проверок, охватывающих большинство аспектов тестирования Android-приложений. Он также предоставляет несколько функций, необходимых пентестерам во время работы. AndroTickler интегрируется с Frida для трассировки и манипуляции методами. Ранее был опубликован под именем Tickler.
AndroTickler требует хост с Linux и рутированное Android-устройство, подключенное через USB. Инструмент ничего не устанавливает на устройство, он только создает каталог Tickler в /sdcard. AndroTickler использует Android SDK для выполнения команд на устройстве и копирования данных приложения в каталог TicklerWorkspace на хосте для дальнейшего анализа. TicklerWorkspace — это рабочий каталог AndroTickler, и каждое приложение имеет отдельный подкаталог в TicklerWorkspace, который может содержать следующее (в зависимости от действий пользователя):
Каталог libs и файл конфигурации Tickler.conf находятся в том же каталоге, что и jar-файл. Файл конфигурации задает расположение каталога TicklerDir на хосте и Tickler в /sdcard на Android-устройстве. Если файл конфигурации не существует или эти два каталога не заданы, используются значения по умолчанию (Tickler_workspace в текущем каталоге и /sdcard/Tickler соответственно). Каталог Tickler_lib содержит некоторые Java-библиотеки и внешние инструменты, используемые AndroTickler, такие как apktool и dex2jar.
AndroTickler сильно зависит от следующих инструментов, поэтому они должны быть установлены на вашей машине перед использованием:
Другие инструменты требуются для некоторых функций, но AndroTickler может работать и без них:
Сборка инструмента из исходников
gradle build
Переместите AndroTickler.jar в тот же каталог, что и каталог Tickler_lib и файл Tickler.conf (автоматически создается в build/libs).
Сделайте dex2jar исполняемым (libs/notJars//dex2jar-2.1/d2j-dex2jar.sh и libs/notJars//dex2jar-2.1/d2j_invoke.sh)
Подключите ваше Android-устройство с установленным тестируемым приложением.
Примечание: Если сборка из исходников не удается, вы можете загрузить последнюю скомпилированную версию со вкладки релизы
Текущая версия делает следующее:
java -jar AndroTickler.jar -h
Список установленных приложений на устройстве:
java -jar AndroTickler.jar -pkgs
Поиск приложения (пакета), установленного на устройстве, имя пакета которого содержит searchKey:
java -jar AndroTickler.jar -findPkg <searchKey>
java -jar AndroTickler.jar -pkg <package> [other options]
Любая команда с опцией -pkg (независимо от того, используется ли она с любыми из следующих опций) выполняет следующие действия, если они еще не были выполнены:
java -jar AndroTickler.jar -pkg <package> -info
Возвращает следующую информацию:
java -jar AndroTickler.jar -pkg <package> -squeeze [short | <codeLocation> ]
Извлекает из декомпилированного Java-кода приложения:
Неудивительно, что его вывод обычно огромен, поэтому рекомендуется перенаправлять вывод команды в файл.
short Сжимает только декомпилированный код, принадлежащий разработчику. Например, если приложение имеет имя пакета com.notEnaf.myapp, то squeeze short сжимает только код в каталоге com/notEnaf.
Сжимает код только в указанном каталоге codeLocation. Полезно для ограничения поиска или сжатия исходного кода, если он доступен.
java -jar AndroTickler.jar -pkg <package> -l [-exp] [-v]
Выводит список всех компонентов приложения.
-exp Показывает только экспортируемые компоненты.
-v Предоставляет более подробную информацию для каждого компонента:
java -jar AndroTickler.jar -pkg <package> -l [-act | -ser | -rec | -prov ] [-exp] [-v]
java -jar AndroTickler.jar -pkg <package> -db [|e|l|d] [nu]
По умолчанию все команды -db обновляют каталог хранения данных приложения на хосте перед запуском проверки.
нет атрибута ИЛИ e Проверяет, зашифрованы ли базы данных приложения. Это действие по умолчанию, если после флага -db не указана опция. l Выводит список всех баз данных приложения. Зашифрованные базы данных могут не быть обнаружены. d Выполняет дамп sqlite любой из незашифрованных баз данных. nu noUpdate: выполняет любую из вышеперечисленных опций без обновления каталога данных приложения на хосте.
java -jar AndroTickler.jar -pkg <package> -diff [d|detailed]
Копирует каталог хранения данных приложения (в DataDirOld), затем запрашивает у пользователя выполнить нужное действие и нажать Enter, когда он закончит. Затем снова копирует каталог хранения данных (в DataDir) и запускает diff между ними, чтобы показать, какие файлы были добавлены, удалены или изменены.
d|detailed Делает то же самое, что и обычная команда -diff, а также показывает, что именно изменилось в текстовых файлах и незашифрованных базах данных.
java -jar AndroTickler.jar -pkg <package> -sc <key> [<customLocation>]
Ищет key в следующих местах:
Поиск нечувствителен к регистру.
Заменяет расположение декомпилированного Java-кода на пользовательское расположение.
java -jar AndroTickler.jar -pkg <package> -sd <key>
Ищет ключ в каталоге хранения данных приложения
Запускает компоненты приложения со всеми возможными комбинациями intent. Например, если активность имеет intent-фильтр с 2 возможными действиями и 3 схемами URI данных, то AndroTickler запустит эту активность со всеми возможными комбинациями этого intent. Кроме того, AndroTickler перехватывает intent-дополнения (extras), упомянутые в соответствующем Java-классе компонента, присваивает им фиктивные значения и добавляет их в возможные комбинации intent. Поддерживаются только дополнения типов boolean, string, int и float.
Если используется опция -exp, то компоненты будут запускаться без привилегий root или специальных разрешений. Если нет, то компоненты будут запускаться с привилегиями root. Это помогает тестировать приложение в двух разных сценариях: против атакующих с обычными или высокими привилегиями.
Перед запуском компонентов AndroTickler выводит все команды, которые будут выполнены. Затем для каждой команды он запускает компонент, выводит команду и ожидает действий пользователя. Это дает пользователю достаточно времени для выполнения дополнительных проверок после выполнения команды. Перед переходом к следующей команде пользователю предоставляется возможность сделать скриншот устройства для документирования PoC.
java -jar AndroTickler.jar -pkg <package> -t [-all | -exp] [target] [-log]
target, как описано в команде list, может быть:
если значение не указано, то target включает всё вышеперечисленное
[-comp] <component_name> Указывает только один компонент. Вы также можете использовать <component_name> напрямую без флага -comp. -exp AndroTickler использует обычные привилегии для запуска только экспортируемых компонентов. -all Опция по умолчанию. AndroTickler использует привилегии root для запуска экспортируемых компонентов. -log Захватывает все сообщения logcat, сгенерированные во время сеанса запуска. Файл журнала сохраняется в подкаталоге logs.
Frida должна быть установлена на вашем хосте. Также расположение сервера Frida на Android-устройстве должно быть добавлено в файл Tickler.conf в поле Frida_server_path
java -jar AndroTickler.jar -pkg <package> -frida vals <ClassName> <MethodName> <NumberOfArgs> [-reuse]
Отображает аргументы и возвращаемое значение этого метода (только примитивные типы данных и String).
reuse В случае опций vals и set Frida создает/обновляет Frida-скрипт этой функциональности. Вы можете изменить созданный скрипт по своему усмотрению, а затем, если хотите запустить его через AndroTickler, используйте опцию -reuse, чтобы он не был перезаписан.
java -jar AndroTickler.jar -pkg <package> -frida set <ClassName> <MethodName> <NumberOfArgs> <NumberOfArgToModify> <newValue>[-reuse]
Устанавливает аргумент с номером NumberOfArgToModify в значение newValue (только примитивные типы данных и String). NumberOfArgToModify начинается с 0: Первый аргумент --> NumberOfArgToModify = 0, ... и т.д. Для изменения возвращаемого значения установите NumberOfArgToModify в ret
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 Необязательное имя целевого каталога, который в любом случае будет расположен в подкаталоге transfers.
Копирование любого файла / каталога:
java -jar AndroTickler.jar -pkg <package> -cp2host <source_path> [dest]
Копирует файлы / каталоги с Android-устройства.
Если опция dest не указана, имя каталога будет меткой времени транзакции.
java -jar AndroTickler.jar [-pkg <package>] -screen
Для опций, не требующих -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>
Запускает компонент; тип запуска зависит от типа компонента.
java -jar AndroTickler.jar -pkg de.not3naf.myApp -frida set de.not3naf.myApp.myActivity myMethod 2 0 "newValue"
Хукирует метод "myMethod", который имеет 2 аргумента, и изменяет значение первого аргумента (args[0]) на "newValue".
java -jar AndroTickler.jar -pkg de.not3naf.myApp -frida set de.not3naf.myApp.myActivity myMethod 2 2 false
Хукирует метод "myMethod", который имеет 2 аргумента, и изменяет возвращаемое значение на логическое false.