add new Root utility for checking if root is possible
This commit is contained in:
parent
82fcea0dab
commit
cea338dab2
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue