3 votes

Comment accorder un accès root à une application sans interaction GUI?

Je tente de mettre à jour mes paramètres APN en utilisant :

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

La première fois que j'exécute cette commande, je reçois une demande de superutilisateur du package : com.android.shell. Je peux accorder cela manuellement mais j'espère automatiser le processus pour la pratique et les connaissances.

J'ai essayé d'utiliser ce qui suit pour répertorier toutes les autorisations, mais je ne trouve pas de superutilisateur:

adb shell pm dump package com.android.shell 

J'ai tenté ce qui suit :

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

Mais je reçois une erreur :

    Exception s'est produite lors de l'exécution :
java.lang.IllegalArgumentException: Permission inconnue : 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)

Édition :

J'ai essayé :

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

Ce qui a donné :

    Format SQLite 3@  

                      .
       -d
Ntablehidelisthidelist
CREATE TABLE hidelist (process TEXT, PRIMARY KEY(process))/ Cindexsqlite_autoindex_hidelist_1hidelist
                             XtablestringsstringCREATE TABLE strings (key TEXT, value TEXT, PRIMARY KEY(key))-Aindexsqlite_autoindex_strings_1stringsZtablesettingssettingsCREATE 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_1polcom.android.shell
7/    )com.android.shellShellluR/system/bin/sh7 /    )com.an!id.shmagiskhidel?5/system/bin/sh
!magiskhide
6ucom.google.android.gms/.droidguard.DroidGuardService

C'est assez moche, alors j'ai essayé d'utiliser sqlite3 mais cela ne donne aucune table ? Je m'attendais à une liste de quelque chose au moins.

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

J'utilise Magisk Manager v18.

0 votes

Quelle est l'application de gestion des racines que vous utilisez ? (SuperSU, Superuser, ou une autre ?)

3voto

Irfan Latif Points 16863

android.permission.ACCESS_SUPERUSER a été défini par SuperSU mais :

En raison des changements dans Android 5.0 Lollipop, cette autorisation a été obsolète et est complètement ignorée à partir de SuperSU v2.30

Seule une application qui déclare une autorisation dans son fichier AndroidManifest.xml peut se voir accorder cette autorisation. Shell (com.android.shell) est une application factice de l'AOSP pour définir l'UID pour adbd, elle ne doit pas avoir une telle autorisation tierce dans son Manifeste.

Magisk n'utilise pas cette autorisation ou toute autre autorisation similaire du tout. Vous devez donc accorder l'autorisation via l'interface utilisateur. Ou tenter de modifier directement la base de données ou le fichier de configuration où les préférences d'autorisation sont stockées. Dans le cas de Magisk, il s'agit de la base de données sqlite3 (/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'
  • Pour obtenir de l'aide sur SQLite : sqlite.org
  • Les commandes ci-dessus fonctionnent actuellement mais Magisk peut changer à tout moment l'emplacement de la base de données, les noms de table, les structures de table, etc.
  • Les valeurs peuvent éventuellement être mises en cache dans les processus en cours d'exécution. Ainsi, vos modifications peuvent être ignorées ou écrasées. Dans ce cas, placer une base de données modifiée depuis le mode de récupération (avec les autorisations appropriées) peut fonctionner. Je n'ai pas essayé cependant.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X