Persistencia de Scripts de Frida

FIRERPA le proporciona la capacidad de hacer persistentes los scripts de Frida. Puede inyectar scripts cómodamente a través de las interfaces correspondientes, y el gestor de scripts de FIRERPA administrará automáticamente los scripts inyectados por usted. Incluso si su script se cierra inesperadamente o el proceso de la aplicación finaliza, FIRERPA reinyectará automáticamente el script la próxima vez que abra la aplicación. Esta función se introdujo en la versión 7.80.

Instalar Script

Puede usar esta interfaz para instalar su script en la aplicación correspondiente. El script que instale en la aplicación se inyectará inmediatamente después de la instalación. El script instalado entrará automáticamente en el gestor de scripts, que lo monitoreará y reinyectará constantemente por usted.

Atención

El gestor de scripts solo permite inyectar un script por aplicación a la vez; no puede inyectar múltiples scripts en la misma aplicación simultáneamente.
app = d.application("com.android.settings")
app.attach_script(script, runtime=ScriptRuntime.RUNTIME_QJS, standup=5)

El parámetro script es el contenido del script de Frida que necesita inyectar (soporta bytecode), runtime es el runtime correspondiente, por defecto es qjs. El significado del parámetro standup es inyectar solo después de que el proceso de la aplicación haya estado en ejecución durante 5 segundos (el tiempo se calcula desde la creación del proceso). El valor mínimo para este parámetro es 1 segundo y el máximo es 300 segundos, para evitar problemas de condiciones de carrera como bloqueos causados por una inyección demasiado temprana en el proceso de la aplicación. En modo spawn, este parámetro siempre debe ser 0.

Esta interfaz también admite la inyección en modo spawn, pero tenga en cuenta que usar el modo spawn puede interrumpir su flujo de operaciones de UI (si necesita operar la UI al mismo tiempo). Esto se debe a que, una vez que usa el modo spawn, en caso de que el script inyectado falle o la aplicación se cierre, este modo reiniciará automáticamente la aplicación, lo que interferirá con sus operaciones en la interfaz. Si necesita usar el modo spawn, utilice los siguientes parámetros.

app = d.application("com.android.settings")
app.attach_script(script, runtime=ScriptRuntime.RUNTIME_QJS, spawn=True, standup=0)

Es necesario tener en cuenta que el modo spawn es diferente del modo normal. En el modo normal, si la aplicación se cierra por alguna razón, el modo normal esperará hasta que la aplicación se inicie para realizar la inyección y no la iniciará por su cuenta. Por lo tanto, es posible que deba iniciar la aplicación usted mismo, ya sea mediante código o manualmente, para que la inyección continúe. En cambio, en el modo spawn, incluso si la aplicación se cierra, se iniciará automáticamente y se realizará la inyección.

Desinstalar Script

Esta interfaz eliminará el script de Frida que ya ha sido instalado en la aplicación. El script también se desvinculará del proceso de la aplicación, y el gestor de scripts de FIRERPA dejará de monitorear el estado de salud de dicho script y no realizará operaciones de reinyección en caso de que el script falle.

app = d.application("com.android.settings")
app.detach_script()

Verificar si está Instalado

Esta interfaz se utiliza para verificar si ya se ha instalado un script en la aplicación. Puede usar este estado para determinar si es necesario reinstalarlo.

app = d.application("com.android.settings")
app.is_attached_script()

Verificar si está Inyectado

Esta interfaz se utiliza para verificar si el script que instaló está actualmente inyectado en el proceso de la aplicación. Incluso si ha instalado el script, es posible que no se haya inyectado en el proceso de la aplicación porque la aplicación no se ha iniciado o porque hay un error en el script. Puede usar el valor de retorno para determinar si necesita iniciar la aplicación correspondiente o verificar si hay errores de sintaxis en el script inyectado.

app = d.application("com.android.settings")
app.is_script_alive()

Ver Registros del Script

Los registros de la consola de su script, como los de console.log, así como los mensajes de error del script, se pueden visualizar. Sin embargo, debe configurarlo previamente al iniciar; consulte el capítulo Ver Registros para saber cómo configurar el archivo de registro. A continuación, supondremos que ha configurado correctamente el archivo de registro en /data/local/tmp/server.log. De esta manera, cuando necesite ver los registros del script, ejecute el siguiente comando. Esto filtrará toda la información de registro de los scripts inyectados. También puede usar otros comandos como tail -f para seguir los registros continuamente.

grep SCRIPT /data/local/tmp/server.log

Persistencia sin Conexión

La persistencia sin conexión significa que puede colocar su script de FRIDA en el teléfono como un archivo de configuración, y FIRERPA lo cargará automáticamente al iniciarse. No necesita usar las interfaces API mencionadas anteriormente para realizar operaciones como la inyección o la desinstalación; simplemente escriba el archivo de script en un formato específico y colóquelo en el directorio designado. Esta función admite la monitorización de directorios, la carga en tiempo real, así como la desinstalación y actualización de scripts. Las modificaciones y ediciones directas en el directorio de scripts también se aplicarán en tiempo real. A continuación se muestra una configuración simple de persistencia de script en YAML. El contenido del script en esta configuración es console.log("Hola desde el Script Yaml").

enable: true
application: "com.android.settings"
version: "2.10"
user: 0
runtime: "qjs"
script: !!binary "Y29uc29sZS5sb2coIkhvbGEgZGVzZGUgZWwgU2NyaXB0IFlhbWwiKQ=="
emit: "http://myserver/reportData"
encode: "none"
standup: 10
spawn: false

Explicación detallada de cada opción de configuración en el script de ejemplo anterior

CampoDescripción
enableHabilitar este script
applicationID de la aplicación para inyectar el script (ej. com.android.setting)
versionVersión de la aplicación compatible con el script ("N/A" significa sin límite de versión)
userSi es una aplicación clonada, especifique el ID de usuario de la aplicación clonada (normalmente 999)
scriptContenido del script en base64, soporta texto o binario (por favor, escriba según la plantilla)
runtimeRuntime del script (qjs, v8)
standupTiempo de retraso para la inyección (calculado desde el inicio del proceso)
spawnUsar modo spawn (ignorará standup)
encodeSi el script reporta datos, especifique la codificación aquí (zlib/none)
emitSi el script reporta datos, especifique el destino aquí

Para más información sobre la función de reporte de datos emit, consulte el capítulo Usar Frida para Reportar Datos.

Lo anterior es un ejemplo completo de un script sin conexión. Una vez que haya terminado de escribirlo, guarde el archivo de configuración con el nombre {file_name}.yaml y colóquelo en la carpeta /data/usr/modules/script del dispositivo. El sistema cargará automáticamente su configuración. El sistema detectará automáticamente los cambios en el directorio /data/usr/modules/script; si actualiza o elimina la configuración yaml, el sistema también actualizará o cancelará automáticamente la inyección de su script.