Персистентные Frida-скрипты¶
FIRERPA предоставляет возможность персистентного внедрения Frida-скриптов. Вы можете удобно внедрять скрипты через соответствующие API, а менеджер скриптов FIRERPA автоматически управляет внедрёнными скриптами. Даже если ваш скрипт аварийно завершится или процесс приложения завершится, FIRERPA автоматически внедрит скрипт заново при следующем запуске вашего приложения.
Установка скрипта¶
Установите скрипт в целевое приложение — после установки скрипт будет немедленно внедрён в это приложение. Установленный скрипт автоматически попадает в менеджер скриптов, который постоянно отслеживает состояние скрипта и при необходимости выполняет повторное внедрение.
Внимание
Менеджер скриптов позволяет одновременно внедрить только один скрипт для каждого приложения; нельзя внедрить несколько скриптов в одно и то же приложение за один раз.
app = d.application("com.android.settings")
app.attach_script(script, runtime=ScriptRuntime.RUNTIME_QJS, standup=5)
Параметр script — это содержимое Frida-скрипта, который вы хотите внедрить (поддерживается байт-код). Параметр runtime — соответствующая среда выполнения (по умолчанию qjs). Параметр standup задаёт задержку внедрения: внедрение выполняется только через 5 секунд после запуска процесса приложения (время отсчитывается с момента создания процесса). Минимальное значение — 1 секунда, максимальное — 300 секунд. Это позволяет избежать слишком раннего внедрения в процесс приложения, которое может вызвать сбои или другие состояния гонки. В режиме spawn этот параметр всегда должен быть равен 0.
Этот API также поддерживает внедрение в режиме spawn. Обратите внимание, что использование режима spawn может прервать ваш поток операций в интерфейсе: если скрипт завершится с ошибкой или приложение закроется, режим spawn автоматически перезапустит приложение, что может помешать вашим действиям в интерфейсе. Если вам нужен режим spawn, используйте следующие параметры.
app = d.application("com.android.settings")
app.attach_script(script, runtime=ScriptRuntime.RUNTIME_QJS, spawn=True, standup=0)
Следует учитывать разницу между режимом spawn и обычным режимом. В обычном режиме, если приложение по какой-либо причине завершится, обычный режим будет ждать запуска приложения и только потом выполнит внедрение; он не запускает приложение самостоятельно, поэтому вам, возможно, придётся запустить приложение вручную или с помощью кода, чтобы внедрение продолжилось. В режиме spawn, даже если приложение завершится, оно будет автоматически запущено, и внедрение будет выполнено.
Отмена установки¶
Удаляет уже установленный в приложении Frida-скрипт; скрипт также будет выгружен из процесса приложения. После этого менеджер скриптов FIRERPA больше не будет отслеживать состояние выполнения этого скрипта и не будет повторно внедрять его после сбоя.
app = d.application("com.android.settings")
app.detach_script()
Проверка установки¶
Определяет, установлен ли скрипт для приложения. На основе возвращаемого значения вы можете решить, нужно ли установить его заново.
app = d.application("com.android.settings")
app.is_attached_script()
Проверка внедрения¶
Проверяет, внедрён ли установленный вами скрипт в процесс приложения в данный момент. Даже после установки скрипт может не быть внедрён в процесс приложения, если приложение не запущено или в скрипте есть ошибки. На основе возвращаемого значения можно определить, нужно ли запустить соответствующее приложение или проверить внедряемый скрипт на синтаксические ошибки.
app = d.application("com.android.settings")
app.is_script_alive()
Просмотр журналов скрипта¶
Консольные сообщения вида console.log из вашего скрипта, а также сообщения об ошибках скрипта можно просматривать, но для этого необходимо заранее настроить ведение журнала при запуске FIRERPA. Подробнее о настройке файла журнала см. в разделе Просмотр журналов. Далее предполагается, что файл журнала настроен как /data/local/tmp/server.log. Чтобы просмотреть журналы скрипта, выполните следующую команду — она отфильтрует все записи журнала от внедрённых скриптов. Для непрерывного отслеживания журнала можно использовать команды вроде tail -f.
grep SCRIPT /data/local/tmp/server.log
Автономная персистентность¶
Автономная персистентность означает, что вы можете разместить Frida-скрипт на телефоне в виде файла конфигурации, и FIRERPA автоматически загрузит его после запуска. Вам не нужно использовать перечисленные выше API для внедрения, отмены и т.п. — достаточно записать файл скрипта в определённом формате и поместить его в фиксированный каталог. Эта функция отслеживает каталог в реальном времени, загружая, выгружая и обновляя скрипты на лету. Непосредственное редактирование файлов в каталоге скриптов также вступает в силу в реальном времени. Ниже приведён простой пример YAML-конфигурации; соответствующий скрипт содержит console.log("Hello From Yaml Script").
enable: true
application: "com.android.settings"
version: "2.10"
user: 0
runtime: "qjs"
script: !!binary "Y29uc29sZS5sb2coIkhlbGxvIEZyb20gWWFtbCBTY3JpcHQiKQ=="
emit: "http://myserver/reportData"
encode: "none"
standup: 10
spawn: false
Подсказка
Выше приведён полный пример автономного скрипта. После написания сохраните файл конфигурации с содержимым выше как {file_name}.yaml и поместите его в папку ~/modules/script на устройстве — система автоматически загрузит вашу конфигурацию. Система автоматически отслеживает изменения в каталоге ~/modules/script; если вы обновите или удалите YAML-конфигурацию, система соответственно автоматически обновит или отменит внедрение скрипта.
Описание полей¶
Подробнее о функции передачи данных через emit см. в разделе Передача данных с помощью Frida.