3 votos

¿Cómo conceder a una aplicación acceso a root sin interacción con la interfaz gráfica de usuario?

Estoy tratando de actualizar mi configuración de APN usando:

adb shell "su -c 'content update --uri content://telephony/carriers --bind name:s:\""SDR"\" --bind apn:s:"SDR-internet"'"

La primera vez que ejecuto este comando recibo una petición de superusuario del paquete: com.android.shell . Puedo conceder esto manualmente pero espero automatizar el proceso para practicar y conocer.

He intentado usar lo siguiente para listar todos los permisos, pero no puedo encontrar el de superusuario:

adb shell pm dump package com.android.shell 

Intenté lo siguiente:

adb shell pm grant com.android.shell android.permission.SUPERUSER
adb shell pm grant com.android.shell android.permission.REQUEST_SUPERUSER
adb shell pm grant com.android.shell android.permission.ACCESS_SUPERUSER

Pero recibe un error:

    Exception occurred while executing:
java.lang.IllegalArgumentException: Unknown permission: android.permission.REQUEST_SUPERUSER
    at com.android.server.pm.permission.PermissionManagerService.grantRuntimePermission(PermissionManagerService.java:1398)
    at com.android.server.pm.permission.PermissionManagerService.access$900(PermissionManagerService.java:89)
    at com.android.server.pm.permission.PermissionManagerService$PermissionManagerInternalImpl.grantRuntimePermission(PermissionManagerService.java:2093)
    at com.android.server.pm.PackageManagerService.grantRuntimePermission(PackageManagerService.java:5411)
    at com.android.server.pm.PackageManagerShellCommand.runGrantRevokePermission(PackageManagerShellCommand.java:1730)
    at com.android.server.pm.PackageManagerShellCommand.onCommand(PackageManagerShellCommand.java:217)
    at android.os.ShellCommand.exec(ShellCommand.java:103)
    at com.android.server.pm.PackageManagerService.onShellCommand(PackageManagerService.java:21330)
    at android.os.Binder.shellCommand(Binder.java:634)
    at android.os.Binder.onTransact(Binder.java:532)
    at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:2821)
    at com.android.server.pm.PackageManagerService.onTransact(PackageManagerService.java:3856)
    at android.os.Binder.execTransact(Binder.java:731)

Editar:

Lo intenté:

adb shell su cat /data/adb/magisk.db

Que dio:

    SQLite format 3@  

�                      .�
�       �-�d
N�tablehidelisthidelist
CREATE TABLE hidelist (process TEXT, PRIMARY KEY(process))/ Cindexsqlite_autoindex_hidelist_1hidelist
                             X�tablestringsstringCREATE TABLE strings (key TEXT, value TEXT, PRIMARY KEY(key))-Aindexsqlite_autoindex_strings_1stringsZ�tablesettingssettingsCREATE TABLE settings (key TEXT, value INT, PRIMARY tablelogslogsCREATE TABLE logs (from_uid INT, package_name TEXT, app_name TEXT, from_pid INT, to_uid INT, action INT, time INT, command TEXT)��tablepoliciespoliciesCREATE TABLE policies (uid INT, package_name TEXT, policy INT, until INT, logging INT, notification INT, PRIMARY KEY(uid))/Cindexsqlite_autoind��/ies_1pol�com.android.shell
���7�/    )�com.android.shellShell�l��uR/system/bin/sh7 /    )�com.an!�id.shmagiskhidel��?5/system/bin/sh
��!magiskhide
��6ucom.google.android.gms/.droidguard.DroidGuardService

Eso es bastante feo, así que intenté usar sqlite3 ¿pero no proporciona tablas? Esperaba una lista de algo como mínimo.

sqlite> .mode line
sqlite> .headers on
sqlite> .tables
sqlite> 

Estoy usando Magisk Manager v18.

0 votos

¿Cuál es la aplicación del gestor de root que utilizas? (¿SuperSU, Superuser, o alguna otra?)

3voto

Jack Wade Puntos 231

android.permission.ACCESS_SUPERUSER fue definida por SuperSU pero:

Debido a los cambios en Android 5.0 Lollipop, este permiso ha quedado obsoleto y se ignora completamente a partir de SuperSU v2.30

También sólo la aplicación que declara un permiso en su AndroidManifest.xml puede recibir ese permiso. Shell ( com.android.shell ) es una aplicación ficticia de AOSP para definir el UID para adbd no debe tener ningún permiso de terceros en su Manifiesto.

Magisk no utiliza este o cualquier otro permiso en absoluto. Así que tienes que conceder el permiso a través de la interfaz de usuario. O tratar de modificar la base de datos o el archivo de configuración directamente donde se almacenan las preferencias de permisos. En el caso de Magisk es sqlite3 base de datos ( /data/adb/magisk.db ):

~# sqlite3 /data/adb/magisk.db .tables
hidelist  logs      policies  settings  strings
~# sqlite3 /data/adb/magisk.db '.mode column' '.headers on' 'select * from policies'
uid         package_name  policy      until       logging     notification
----------  ------------  ----------  ----------  ----------  ------------
10146       com.termux    2           0           1           1    
~# sqlite3 /data/adb/magisk.db "INSERT INTO policies (uid,package_name,policy,until,logging,notification) VALUES(2000,'com.android.shell',2,0,1,1)"
~# sqlite3 /data/adb/magisk.db '.mode column' '.headers on' 'select * from policies'
uid         package_name  policy      until       logging     notification
----------  ------------  ----------  ----------  ----------  ------------
10146       com.termux    2           0           1           1           
2000        com.android.  2           0           1           1           
~# sqlite3 /data/adb/magisk.db 'DELETE FROM policies WHERE uid = 2000'
  • Para obtener ayuda sobre SQLite: sqlite.org
  • Los comandos anteriores funcionan por el momento, pero Magisk puede cambiar la ubicación de la base de datos, los nombres de las tablas, las estructuras de las tablas, etc. en cualquier momento.
  • Es posible que los valores se almacenen en la caché de los procesos en ejecución. Así que sus cambios pueden ser ignorados o sobrescritos. En ese caso, poner una base de datos modificada desde la recuperación (con los permisos adecuados) puede funcionar. Sin embargo, no lo he intentado.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X