[tor-commits] [orbot/master] add new Root utility for checking if root is possible

n8fr8 at torproject.org n8fr8 at torproject.org
Fri Aug 23 20:59:49 UTC 2013


commit cea338dab26ad4df684f0eb5c7789ea8363a95cf
Author: Nathan Freitas <nathan at freitas.net>
Date:   Tue Aug 20 13:26:04 2013 -0400

    add new Root utility for checking if root is possible
---
 src/org/torproject/android/service/Root.java |  107 ++++++++++++++++++++++++++
 1 file changed, 107 insertions(+)

diff --git a/src/org/torproject/android/service/Root.java b/src/org/torproject/android/service/Root.java
new file mode 100644
index 0000000..d41b48c
--- /dev/null
+++ b/src/org/torproject/android/service/Root.java
@@ -0,0 +1,107 @@
+package org.torproject.android.service;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.util.ArrayList;
+
+import org.torproject.android.service.ExecShell.SHELL_CMD;
+
+import android.util.Log;
+
+/**
+ * @author Kevin Kowalewski
+ * 
+ */
+public class Root {
+
+    private static String LOG_TAG = Root.class.getName();
+
+    public boolean isDeviceRooted() {
+        if (checkRootMethod1()){return true;}
+        if (checkRootMethod2()){return true;}
+        if (checkRootMethod3()){return true;}
+        return false;
+    }
+
+    public boolean checkRootMethod1(){
+        String buildTags = android.os.Build.TAGS;
+
+        if (buildTags != null && buildTags.contains("test-keys")) {
+            return true;
+        }
+        return false;
+    }
+
+    public boolean checkRootMethod2(){
+        try {
+            File file = new File("/system/app/Superuser.apk");
+            if (file.exists()) {
+                return true;
+            }
+        } catch (Exception e) { }
+
+        return false;
+    }
+
+    public boolean checkRootMethod3() {
+        if (new ExecShell().executeCommand(SHELL_CMD.check_su_binary) != null){
+            return true;
+        }else{
+            return false;
+        }
+    }
+}
+
+
+/**
+ * @author Kevin Kowalewski
+ *
+ */
+class ExecShell {
+
+    private static String LOG_TAG = ExecShell.class.getName();
+
+    public static enum SHELL_CMD {
+        check_su_binary(new String[] {"/system/xbin/which","su"}),
+        ;
+
+        String[] command;
+
+        SHELL_CMD(String[] command){
+            this.command = command;
+        }
+    }
+
+    public ArrayList<String> executeCommand(SHELL_CMD shellCmd){
+        String line = null;
+        ArrayList<String> fullResponse = new ArrayList<String>();
+        Process localProcess = null;
+
+        try {
+            localProcess = Runtime.getRuntime().exec(shellCmd.command);
+        } catch (Exception e) {
+            return null;
+            //e.printStackTrace();
+        }
+
+        BufferedWriter out = new BufferedWriter(new OutputStreamWriter(localProcess.getOutputStream()));
+        BufferedReader in = new BufferedReader(new InputStreamReader(localProcess.getInputStream()));
+
+        try {
+            while ((line = in.readLine()) != null) {
+                Log.d(LOG_TAG, "--> Line received: " + line);
+                fullResponse.add(line);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        Log.d(LOG_TAG, "--> Full response was: " + fullResponse);
+
+        return fullResponse;
+    }
+
+}
\ No newline at end of file





More information about the tor-commits mailing list