
Инструмент для автоматизации взаимодействия с устройствами Android, включая ADB, Androguard и Frida Interactivity.
Autodroid - это инструмент Python для программного сценаривания объемных взаимодействий с одним или несколькими устройствами Android. Возможное использование включает в себя:
Для использования AutoDroid вам нужно будет установить зависимости, они указаны в файле требований и могут быть установлены, выполнив следующую команду.
pip install -r REQUIREMENTS.txtAutoDroid должен быть предоставлен действительный файл конфигурации JSON в качестве аргумента командной строки. Ниже приведен простой пример файла конфигурации, который будет извлекать все приложения из всех подключенных устройств по одному и извлекать APK в ZIP, используя Androguard.
{
"devices" : [ " * " ],
"apps" : [ " * " ],
"commands" : [ " adb pull !app_path !app_id.apk " , " reverse: !app_id.apk " ]
} После того, как вы создали действительный файл конфигурации AutoDroid, вы можете начать взаимодействие устройства, запустив файл python AutoDroid.py с файлом конфигурации в качестве параметра командной строки.
python AutoDroid.py example_config.json Файл конфигурации Autodroid может быть предоставлен ряд команд для выполнения на целевых устройствах, эти команды выполняются локально на вашем компьютере, и поэтому должны присутствовать призывные программы и файлы. Эти команды могут быть в формате списка (как можно увидеть в примере выше), либо в виде карты пары значений ключей/ DICT. Эти пары значений ключей определяются как блоки команд, где ключом является имя блока, а значение - это список команд. Постоянный (описанный ниже) block:<block name> можно использовать для запуска блока и обеспечивает простую функцию петли/ обратной связи. Пример использования блоков можно увидеть ниже.
{
"devices" : [ " * " ],
"apps" : [ " * " ],
"commands" : {
"test_user_input" :[ " adb -s !device_id shell monkey -v 5 -p !app_id " ],
"retrieve_apk" :[ " adb -s !device_id pull !app_path !app_id.apk " , " sleep:5 " ]
}
} Два дополнительных поля, которые способствуют автодаиду, - это поля devices и apps . Эти поля определяют идентификатор устройства ADB для целевого устройства (ы) (список строк) и имени нотации обратного домена приложения (то есть com.example.application ) для приложений, направленных на устройство (список строк). Оба эти поля могут быть пустыми, список строк или определены как * , где будут целенаправленно все доступные устройства и приложения. В бэкэнд, как это работает, когда в этих полях предоставляется значение, программа будет проходить через все команды для каждого приложения на каждом устройстве. Ниже можно увидеть пример определения конкретного устройства и приложения:
{
"devices" : [ " 09261JEC216934 " ],
"apps" : [ " com.google.android.networkstack.tethering " ],
"commands" : [ " adb -s !device_id pull !app_path !app_id.apk " ]
} Когда поле устройства не пустое (то есть не "devices":[], ) переменная (см. Ниже) из !device_id создается. Эта переменная может использоваться в ваших командах для обозначения идентификатора устройства ADB для текущего целевого устройства. Точно так же переменные !app_id и !app_path добавляются, когда поле приложения не является пустым и может использоваться в командах для определения имени нотации обратного домена приложения и пути APK этого приложения.
Чтобы сэкономить время, Autodroid позволяет установить бесконечное количество переменных в сценарии. Эти переменные построены в формате пары значений. Когда ключ переменной находится в команде, он будет заменен для значения. Пример конфигурации, в которой используются переменные, можно увидеть ниже, в этом файле конфигурации тест !test был добавлен в качестве короткой руки для команды monkey ADB, а также используется встроенная переменная !app_id .
{
"devices" : [ " * " ],
"apps" : [ " * " ],
"variables" : { "!test" : " adb -s !device_id shell monkey -v 500 -p " },
"commands" : [ " !test !app_id " ]
} Предпочтительным стандартом для использования переменных является предшествующее им с помощью ! и использовать _ вместо пространств.
Переменные могут быть установлены во время выполнения, используя ? оператор. Если оператор, сопровождаемый именем переменной, устанавливается либо на то, что является выводом следующих команд, или если у команды нет вывода самой команды. Пример можно увидеть ниже:
{
"devices" : [],
"apps" : [],
"commands" : [ " ?!files dir " , " print: !files " ]
}Ниже приведен список зарезервированных переменных, которые уже используются в Autodroid и следует избегать добавления в файл конфигурации. Если эти переменные добавлены, они будут перезаписаны во время выполнения.
!device_id - Когда в конфигурации предоставляется один или несколько устройств, эта переменная заполнена во время выполнения. И установлен как идентификатор устройства ADB для текущего устройства. Каждое устройство зациклено, по очереди, с настройки, выполняемыми для каждого устройства.!adb_connect -это сокращенная переменная, которая переводится на adb -s !device_id , использование этого вместо adb обеспечит, чтобы все команды ADB выполнялись на правильном устройстве.!app_id - Когда в конфигурации представлены одно или несколько приложений, эта переменная заполнена во время выполнения. И установлено в качестве имени нотации приложения (то есть com.example.myapplication ) для текущего приложения. Каждое приложение зациклено, по очереди с настройки команд, выполняемых для каждого приложения.!app_path - похож на вышеизложенное. Когда одно или несколько приложений предоставляются в конфигурации, эта переменная заполняется во время выполнения. И устанавливается в качестве пути к текущему файлу APK приложения на целевом устройстве. Каждое приложение зациклено, по очереди с настройки команд, выполняемых для каждого приложения. Константы являются командами, специфичными для автоматического и относятся к конкретной функциональности. Обычно разбивается на ключевое слово, за которым следует : а затем один или несколько параметров, разделенных A ; Полем Эти константы должны использоваться в начале команды и всегда должны быть в нижнем случае. Примеры будут приведены в отдельных разделах.
Autodroid имеет встроенную функциональность для запуска файлов Frida JavaScript в рамках автодадного запуска. Эта константа определяется как frida: и должен быть предоставлен путь к используемому файлу JavaScript, за которым следует a ; и затем приложение обратное имя нотации целевого приложения. В дополнение к применению переменных к команде, переменные также применяются к содержанию предоставленного файла.
{
"devices" : [ " * " ],
"apps" : [ " * " ],
"commands" : [ " frida:myJavascript.js;!app_id " ]
}ПРИМЕЧАНИЕ , В то время как интеграция FRIDA реализована, в настоящее время она не проверена.
Autodroid поддерживает Apks Apks с помощью Androguard. Эта константа структурирована как reverse: и идет путь к локально хранимую APK. Использование этого сохранит незамеченную версию APK в качестве ZIP с именем <application name>.apk .
{
"devices" : [ " * " ],
"apps" : [ " * " ],
"commands" : [ " adb -s !device_id pull !app_path !app_id.apk " , " reverse: !app_id.apk " ]
} При использовании обратной константы в пути APK может следовать любое количество параметров (отделенных A ; ), в них, включая info (которая сохранит файл информации о приложении JSON, decompile (что на Linux сохранит краткую информацию о DeCompilled Methods), manifest (который сохранит манифест XML, а zip будет выполнять то же действие, что и для SavlOd, и Savk -AP -файл. Использование этих параметров можно увидеть ниже:
{
"devices" : [ " * " ],
"apps" : [ " * " ],
"commands" : {
"get_app" : [ " adb -s !device_id pull !app_path !app_id.apk " ],
"reverse_app" :[ " reverse: !app_id.apk;info " ,
" reverse: !app_id.apk;manifest;decompile " ]
}
} Эта константа обеспечивает простую функциональность для приостановки выполнения инструментов в течение определенного количества времени. Эта константа структурирована как sleep: с последующим количеством секунд, чтобы ждать.
{
"devices" : [ " * " ],
"apps" : [ " * " ],
"commands" : [ " adb pull !app_path !app_id.apk " , " sleep:5 " ]
} Константа блока обеспечивает простую функциональность зацикливания и обратной связи. Эта константа структурирована как block: с последующим именем блока команд для выполнения. Если блоки не было предоставлено (т.е. команды были предоставлены в формате списка), то команды добавляются в блок с именем main .
{
"devices" : [ " * " ],
"apps" : [ " * " ],
"commands" : {
"test_user_input" :[ " adb shell monkey -v 5 -p !app_id " ],
"retrieve_apk" :[ " adb pull !app_path !app_id.apk " ],
"test_again" : [ " block: test_user_input " , " sleep:5 " ]
}
}Ключевое слово «Найти», за которым следует путь к APK и строку режима, чтобы найти, как на консоли, чтобы на консоли путь к APK и строку, найденную, если они присутствуют в APK. Это можно использовать в сочетании с другими командами для запуска строк находки во всех обработанных приложениях. Пример этого можно увидеть ниже:
{
"devices" : [ " * " ],
"apps" : [ " * " ],
"commands" : [ " adb pull !app_path !app_id.apk " , " find: !app_id.apk;my_string " ]
} Еще одна простая константа. print: Constant можно использовать для печати сообщения на консоли. Пример использования этого можно увидеть ниже:
{
"devices" : [ " * " ],
"apps" : [ " * " ],
"commands" : [ " print: device id !device_id, app id !app_id, app path !app_path " ]
} Постоянная запись позволяет записать переменную или команду в файл. Используется с помощью write: строка, за которым следует файл для записи, за которым следует a ; , а затем команда или переменная для записи в файл.
{
"devices" : [ " * " ],
"apps" : [ " * " ],
"commands" : {
"get_stats" : [ " ?!stats device id !device_id, app id !app_id, app path !app_path " ],
"write_stats" : [ " write: !device_id-!app_id-stats.txt;!stats " ]
}
} read: Constant предоставляется путь к файлу для чтения, за которым следует A ; , а затем переменная для сохранения вывода. Эта переменная может быть недавно объявленной или существующей переменной.
{
"devices" : [],
"apps" : [],
"commands" : [ " read:test.txt;!data " , " print: !data " ]
} Похоже на написание. Постоянная приложение позволяет записать переменную или команду в файл. Используется с append: строка, за которой следует файл для записи, затем A ; , а затем команда или переменная для записи в файл. В отличие от записи, который будет создавать или записать существующий файл, добавит только существующий файл. Если файла не существует, Autodroid будет ошибкой.
{
"devices" : [ " * " ],
"apps" : [ " * " ],
"commands" : [ " append:test.txt;!app_id !app_path " ]
}Ниже приведен пример использования AutoDroid для тестирования потенциального вредоносного ПО на устройствах Android. Эта конфигурация устанавливает потенциальное вредоносное ПО, записывает экран, получает захват экрана и удаляет приложение.
{
"devices" : [ " * " ],
"apps" : [],
"commands" : {
"record_screen" : [ " adb shell screenrecord /data/local/tmp/test.mp4 --time-limit 120 " ],
"install_eicar" :[ " adb install com.fsecure.eicar.antivirus.test.apk " ],
"user_input" :[ " adb shell monkey -p com.fsecure.eicar.antivirus.test -v 1 " , " sleep: 20 " ],
"uninstall" : [ " adb uninstall com.fsecure.eicar.antivirus.test " ],
"get_video" : [ " adb pull /data/local/tmp/test.mp4 " , " sleep: 20 " , " adb shell rm /data/local/tmp/test.mp4 " ]
}
}Ниже приведен пример использования реализации Autodroid Androguard для обратной разработки APK с устройства и извлечения JSON информации о приложении, декомпилированном резюме методов, файла MANIFEST XML и разделенном молнии APK.
{
"devices" : [ " * " ],
"apps" : [ " me.jamesstevenson.onelist " ],
"commands" : {
"get_app" : [ " adb pull !app_path !app_id.apk " ],
"reverse_app" :[ " reverse: !app_id.apk;info;decompile;manifest;zip " ]
}
}GNU General Public License v3.0