Инструмент на Java, помогающий тестировать Android-приложения на проникновение быстрее, проще и эффективнее. AndroTickler предлагает множество функций сбора информации, статических и динамических проверок, охватывающих большинство аспектов тестирования Android-приложений. Он также предоставляет несколько функций, необходимых пентестерам во время работы. AndroTickler интегрируется с Frida для трассировки и манипуляции методами. Ранее был опубликован под именем **Tickler**.
AndroTickler требует хост с Linux и рутированное Android-устройство, подключенное через USB. Инструмент ничего не устанавливает на устройство, он только создает каталог _Tickler_ в /sdcard. AndroTickler использует Android SDK для выполнения команд на устройстве и копирования данных приложения в каталог _TicklerWorkspace_ на хосте для дальнейшего анализа. _TicklerWorkspace_ — это рабочий каталог AndroTickler, и каждое приложение имеет отдельный подкаталог в _TicklerWorkspace_ , который может содержать следующее (в зависимости от действий пользователя):
* DataDir: копия каталога данных приложения
* extracted: результат работы apktool с приложением, содержит smali-код, ресурсы, библиотеки и т.д.
* bgSnapshots: фоновые снимки, скопированные с устройства.
* images: любые сделанные скриншоты приложения.
* JavaCode: Java-код приложения, декомпилированный с помощью dex2jar и JD Tools.
* logs: файлы журналов, созданные с помощью -t -log, как описано ниже.
* transfers: файлы и каталоги, скопированные с устройства на хост с помощью -copy2host.
* AndroidManifest.xml: манифест приложения, полученный через apktool.
* base.apk: APK-файл приложения, установленный на устройстве.
* debuggable.apk: отладочная версия приложения, созданная с помощью -dbg.
Каталог _libs_ и файл конфигурации _Tickler.conf_ находятся в том же каталоге, что и jar-файл. Файл конфигурации задает расположение каталога _TicklerDir_ на хосте и _Tickler_ в /sdcard на Android-устройстве. Если файл конфигурации не существует или эти два каталога не заданы, используются значения по умолчанию (Tickler_workspace в текущем каталоге и /sdcard/Tickler соответственно). Каталог _Tickler_lib_ содержит некоторые Java-библиотеки и внешние инструменты, используемые AndroTickler, такие как apktool и dex2jar.
AndroTickler сильно зависит от следующих инструментов, поэтому они должны быть установлены на вашей машине перед использованием:
Другие инструменты требуются для некоторых функций, но AndroTickler может работать и без них:
2. Переместите AndroTickler.jar в тот же каталог, что и каталог Tickler_lib и файл Tickler.conf (автоматически создается в build/libs).
3. Сделайте dex2jar исполняемым (libs/notJars//dex2jar-2.1/d2j-dex2jar.sh и libs/notJars//dex2jar-2.1/d2j_invoke.sh)
4. Подключите ваше Android-устройство с установленным тестируемым приложением.
**Примечание** : Если сборка из исходников не удается, вы можете загрузить последнюю скомпилированную версию со вкладки релизы
Список установленных приложений на устройстве:
Поиск приложения (пакета), установленного на устройстве, имя пакета которого содержит searchKey:
java -jar AndroTickler.jar -findPkg
java -jar AndroTickler.jar -pkg [other options]
Любая команда с опцией -pkg (независимо от того, используется ли она с любыми из следующих опций) выполняет следующие действия, если они еще не были выполнены:
* Декомпилирует приложение в Java-код с помощью dex2jar и JD Tools
java -jar AndroTickler.jar -pkg -info
* Указывает ли код приложения на использование внешнего хранилища
* Каталоги приложения, уже существующие во внешнем хранилище
* Поддерживается ли резервное копирование приложения
java -jar AndroTickler.jar -pkg -squeeze [short | ]
Извлекает из декомпилированного Java-кода приложения:
* Любые признаки возможных учетных данных пользователя
* Распространенные компоненты, такие как OkHttp и WebView
Неудивительно, что его вывод обычно огромен, поэтому рекомендуется перенаправлять вывод команды в файл.
_short_ Сжимает только декомпилированный код, принадлежащий разработчику. Например, если приложение имеет имя пакета com.notEnaf.myapp, то _squeeze short_ сжимает только код в каталоге com/notEnaf.
__Сжимает код только в указанном каталоге _codeLocation_. Полезно для ограничения поиска или сжатия исходного кода, если он доступен.
java -jar AndroTickler.jar -pkg -l [-exp] [-v]
Выводит список всех компонентов приложения.
_-exp_ Показывает только экспортируемые компоненты.
_-v_ Предоставляет более подробную информацию для каждого компонента:
* Инструмент проверяет соответствующий Java-класс для каждого компонента и возвращает все возможные intent-дополнения (extras).
java -jar AndroTickler.jar -pkg -l [-act | -ser | -rec | -prov ] [-exp] [-v]
* -rec: приемники широковещательных сообщений
* -exp: показать только экспортируемые компоненты любого из вышеперечисленных типов
java -jar AndroTickler.jar -pkg -db [|e|l|d] [nu]
По умолчанию все команды -db обновляют каталог хранения данных приложения на хосте перед запуском проверки.
_нет атрибута ИЛИ e_ Проверяет, зашифрованы ли базы данных приложения. Это действие по умолчанию, если после флага -db не указана опция. _l_ Выводит список всех баз данных приложения. Зашифрованные базы данных могут не быть обнаружены. _d_ Выполняет дамп sqlite любой из незашифрованных баз данных. _nu_ noUpdate: выполняет любую из вышеперечисленных опций без обновления каталога данных приложения на хосте.
java -jar AndroTickler.jar -pkg -diff [d|detailed]
Копирует каталог хранения данных приложения (в DataDirOld), затем запрашивает у пользователя выполнить нужное действие и нажать Enter, когда он закончит. Затем снова копирует каталог хранения данных (в DataDir) и запускает diff между ними, чтобы показать, какие файлы были добавлены, удалены или изменены.
_d|detailed_ Делает то же самое, что и обычная команда -diff, а также показывает, что именно изменилось в текстовых файлах и незашифрованных базах данных.
java -jar AndroTickler.jar -pkg -sc [ ]
__Заменяет расположение декомпилированного Java-кода на пользовательское расположение.
java -jar AndroTickler.jar -pkg -sd
Ищет ключ в каталоге хранения данных приложения
Запускает компоненты приложения со всеми возможными комбинациями 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 -t [-all | -exp] [target] [-log]
_target_ , как описано в команде list, может быть:
* -act : активности. запускает активность(и) со всеми комбинациями intent, как описано выше
* -ser : службы. запускает службу(ы) со всеми комбинациями intent, как описано выше
* -rec: приемники широковещательных сообщений: отправляет все возможные широковещательные сообщения, которые соответствуют приемнику(ам)
* -prov: поставщики контента: выполняет запрос к поставщику(ам) контента
если значение не указано, то target включает всё вышеперечисленное
_[-comp] _ Указывает только один компонент. Вы также можете использовать _ _ напрямую без флага -comp. _-exp_ AndroTickler использует обычные привилегии для запуска только экспортируемых компонентов. _-all_ Опция по умолчанию. AndroTickler использует привилегии root для запуска экспортируемых компонентов. _-log_ Захватывает все сообщения logcat, сгенерированные во время сеанса запуска. Файл журнала сохраняется в подкаталоге logs.
Frida должна быть установлена на вашем хосте. Также расположение сервера Frida на Android-устройстве должно быть добавлено в файл _Tickler.conf_ в поле _Frida_server_path_
## Захват аргументов и возвращаемого значения
java -jar AndroTickler.jar -pkg -frida vals [-reuse]
Отображает аргументы и возвращаемое значение этого метода (только примитивные типы данных и String).
_reuse_ В случае опций vals и set Frida создает/обновляет Frida-скрипт этой функциональности. Вы можете изменить созданный скрипт по своему усмотрению, а затем, если хотите запустить его через AndroTickler, используйте опцию _-reuse_ , чтобы он не был перезаписан.
## Изменение аргументов или возвращаемого значения
java -jar AndroTickler.jar -pkg -frida set [-reuse]
Устанавливает аргумент с номером _NumberOfArgToModify_ в значение _newValue_ (только примитивные типы данных и String). _NumberOfArgToModify_ начинается с 0: Первый аргумент --> NumberOfArgToModify = 0, ... и т.д. Для изменения возвращаемого значения установите NumberOfArgToModify в _ret_
java -jar AndroTickler.jar -pkg -frida script
Запускает Frida JS-скрипт, расположенный по пути _scriptPath_ на вашем хосте
java -jar AndroTickler.jar -pkg -frida enum
java -jar AndroTickler.jar -pkg -dbg
Создает отладочную версию приложения, которая может быть установлена на устройство и отлажена с помощью любого внешнего инструмента. AndroTickler поставляется с хранилищем ключей для подписи отладочного APK, но требует инструмент _jarsigner_ на хосте.
java -jar AndroTickler.jar -pkg -apk
Собирает APK-файл из каталога, подписывает его и устанавливает.
java -jar AndroTickler.jar [-pkg ] [-bg|--bgSnapshots]
Копирует фоновые снимки, сделанные устройством (работает как с опцией -pkg, так и без нее), в подкаталог _bgSnapshots_.
java -jar AndroTickler.jar -pkg -dataDir [dest]
Копирует каталог хранения данных в DataDir. _dest_ Необязательное имя целевого каталога, который в любом случае будет расположен в подкаталоге _transfers_.
java -jar AndroTickler.jar -pkg -cp2host [dest]
Копирует файлы / каталоги с Android-устройства.
* source_path — абсолютный путь к тому, что нужно скопировать с Android-устройства.
* dest: необязательное имя целевого каталога, который в любом случае будет расположен в подкаталоге _transfers_.
Если опция dest не указана, имя каталога будет меткой времени транзакции.
java -jar AndroTickler.jar [-pkg ] -screen
* Захватывает текущий снимок экрана устройства и сохраняет его в подкаталоге _images_.
* Работает как с флагом пакета, так и без него.
Для опций, не требующих -pkg, их данные будут сохранены в _Tickler_Dir_ /NoPackage
java -jar AndroTickler.jar -pkg -t -act -exp
java -jar AndroTickler.jar -pkg -t -prov -log
Запрашивает всех поставщиков контента и сохраняет сообщения logcat до остановки выполнения инструмента.
java -jar AndroTickler.jar -pkg -t
Запускает компонент; тип запуска зависит от типа компонента.
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.
The full story
This article is one source in a clustered incident — the cluster page carries the summary, timeline and every other outlet covering it.
