2013-01-14 1 views
6

Ich habe ein Android-Telefon, das nur su binary installiert hat und es funktioniert, was bedeutet, dass ich Shell in das Telefon adb und einen 'su' Befehl ausführen kann und ich werde root sein.Ist es möglich, einen Shell-Befehl als root mit nur der su-Binärdatei auszuführen und keine SuperSU oder Superuser apk installiert?

Wenn ich versuche, einen Befehl über Code auszuführen, scheint es nicht egal zu arbeiten, die Art, wie ich versuche, es zu laufen. Ich habe viele verschiedene Varianten des folgenden Befehls ausprobiert.

Runtime.getRuntime().exec("su -c ps"); 

Wenn ich diesen Befehl auf einem anderen verwurzelt Telefon mit einem Superuser.apk oder SuperSU.apk App installiert laufen lasse, erhalte ich ein Dialog gefragt, ob ich es laufen mit Root-Rechten zulassen möchten. Wenn die apks nicht da sind, fragt es nie und der Befehl funktioniert nie.

Ich habe versucht, die APK-Dateien auf dem ersten Telefon zu installieren, aber sie scheinen nichts zu tun. So, wie die ursprüngliche Frage fragt -> Gibt es eine Möglichkeit, den erhöhten Befehl aus der App heraus zu starten, ohne dass die SU-Apps installiert sind?

+0

Dies ist im Grunde nicht zu beantworten, ohne zu wissen * die * su-Binary installiert - wenn es die Aktie Android ist, ist es nicht verwendbar ist * von einer App * überhaupt, unter jedem Umstände. –

+0

Bitte gehen Sie zur Kasse: http://stackoverflow.com/questions/17615412/android-write-failed-epipe-broken-pipe-error-on-write-file – benchuk

Antwort

6

Es könnte sein, dass Sie die Befehle su als Parameter wie diese passieren müssen:
su -c 'ls -l'
Oder Sie den vollständigen Pfad zum su, aber ich sehe nicht, warum es nicht funktionieren würde angeben müssen die Art und Weise haben Sie es: Runtime.exec("/system/bin/su -c ps")
Oder vielleicht
Runtime.exec("/system/bin/su -c \'ps\'")

Versuchen Sie, die Ausgabe dieses Befehls Überprüfung zu: System.getenv("PATH")

Eine weitere Variante könnte Runtime.exec("su -c \'ls -s \'")
sicher, dass Sie die einfachen Anführungszeichen zu entkommen nicht vergessen, da sie einen Teil der eigentlichen String sind.

Das ist der Weg, den ich gefunden habe funktioniert am konsequentesten, und es hat auch auf Geräten ohne Superuser oder SuperSU funktioniert, da diese Anwendungen nur auf die Sendung hören, die gesendet wird, wenn eine Anwendung versucht Führe einen Befehl als root aus. @Borley SuperSU und Superuser fangen die Übertragung ab und fungieren so als Mittler zwischen den App- und Root-Rechten, sind aber für ein gerootetes Gerät nicht erforderlich. Es ist notwendig, wenn Sie mehr Kontrolle über die Anwendungen haben möchten, die Befehle als root ausführen, aber selbst dann beschränkt es Sie immer noch auf die Entscheidung, welche Anwendungen, nicht welche Befehle, Root-Rechte erhalten.

Auch könnten Sie wollen auf RootTools einen Blick und genauer gesagt der RootTools.isAccessGiven() Befehl, die Root-Privilegien für Ihre Anwendung anfordert.

Quelle: Launch a script as root through ADB

+0

Ich habe die meisten der hier aufgeführten Vorschläge gemacht. Ich werde das System.getenv ausprobieren und auch die Single-Anführungszeichen ausprobieren (das ist ein toller Vorschlag und ich trete mich selbst um nicht früher zu versuchen!). Eine Sache, die ich sagen kann, ist, dass ich RootTools versucht habe, und es gibt false zurück, wenn ich isAccessGiven() aufruft, aber es zeigt true, wenn ich isRootAvailable() aufruft, vielleicht ist es nicht so einfach wie das Hinzufügen von einfachen Anführungszeichen. Das einzige Problem ist jetzt, dass ich im Moment keinen Zugriff auf das Gerät habe, daher wird es einige Zeit dauern, das zu testen. Danke für den Hinweis! – brianestey

+0

Kein Problem, sagen Sie mir, wenn es funktioniert – cnexus

1

Ich glaube, Sie würden die SU installierten Anwendungen haben müssen, wie sie sind, was dem Benutzer die Frage geben, ob die App als root erlaubt sein soll oder nicht laufen.

+0

Wissen Sie, was diese Apps tun oder wie sie funktionieren? Ist das ein Dialog, den ich aus meinem eigenen Code erstellen kann? Der Grund, warum ich frage, ist, dass ich beide Apps auf meinem Handy ausprobiert habe und den Dialog nicht wie erwartet aufrufe. – brianestey

+0

@brianestey Leider weiß ich nicht, wie sie funktionieren. Aber wenn das Gerät richtig verwurzelt ist, sollten die SU- oder SuperSU-Apps ein Popup-Fenster mit der Frage nach der Berechtigung zur Ausführung als root anzeigen. Verwenden Sie JellyBean 4.2, wo Google Multi-User-Unterstützung enthalten hat. Ich habe festgestellt, dass einige Root-Apps, die ich verwende, nicht mehr funktionieren, seit Google diese Funktion eingeführt hat. Wenn Sie beide Apps installiert haben, kann es einen Konflikt verursachen, aber nicht sicher wissen – Boardy

+0

Nein, das ist nicht die Antwort. Es ist durchaus möglich (wenn es riskant ist), ein einfaches "su" ohne eine verknüpfte Benutzerdialog-App zu haben, so dass der Effekt "immer zulassen" ist. Natürlich würde ein "su" -Binär, der mit solch einer App verwendet werden sollte, wahrscheinlich ohne es nicht funktionieren. –

2

Nicht alle Versionen eines ‚so‘ für Android einen Befehl akzeptieren von den Befehlszeilenparameter auszuführen.

Wo sie nicht, müssen Sie ‚su‘ Einführung eine privilegierte Shell, erhalten ihren Eingang Dateideskriptor und Pipe-Befehl (e) in dem lassen. Dies wurde auf Stackoverflow schon mehrfach besprochen.

+0

Könnten Sie bitte auf ein solches Beispiel auf Stackoverflow zeigen. Ich brauche ein Arbeitsbeispiel. – zeeshan

+0

Jede ernsthafte Suche wird sie finden. Aber es ist irgendwie neben dem Punkt, da dies nicht für mehrere Android-Versionen seit der Umstellung auf SELinux, die viel aufwändiger Workarounds erfordert, funktioniert, es sei denn, Sie haben eine benutzerdefinierte oder Engineering-Build ohne diese. –

-2

Sie sollten in der Lage sein, dies zu tun.

Versuch:

adb root shell ls -l

+1

Können Sie diese Antwort erweitern? So wie es jetzt aussieht, ist es keine qualitative Antwort, und es besteht die Gefahr, dass es abgelehnt oder gelöscht wird. –

Verwandte Themen