이 스크립트에 대한 도움이 필요합니다. 누군가 내가 뭘 잘못했는지 말해 줄 수 있나요? 시작시 루트 검사기를 만들려고합니다.
내가 만들고있는 정확한 Java 스 니펫은 다음과 같습니다.
{
Process p;
try
{
// Run root command
p = Runtime.getRuntime().exec("su");
// Attempt to write a file to system
DataOutputStream os = new DataOutputStream(p.getOutputStream());
os.writeBytes("echo \"Do I have root?\" >/system/temporary.txt\n");
// Close the stream
os.writeBytes("exit\n");
os.flush();
try
{
p.waitFor();
if (p.exitValue() != 255)
{
// Code to run on ROOTED
// NOTHING JUST GO FORWARD
}
else
{
// Code to run on NON ROOTED
}
}
catch (InterruptedException e)
{ {
// TODO Code to run with interrupted exception
}
}
}
catch (IOException e)
{
// TODO Code to run in input/output exception
}}}
여기 에서 테스터를 위해 APK 파일이 빌드 됩니다 .
루트 조각 소스 코멘트 여기
일반적으로 루트를 확인하려면 Linux 명령에서 "userid"를 확인해야합니다 id
.
그래서 대신 :
os.writeBytes("echo \"Do I have root?\" >/system/temporary.txt\n");
사용하다:
os.writeBytes("id\n"); os.flush();
그런 다음 다음과 같이 응답을 읽으십시오.
DataInputStream data = new DataInputStream(p.getInputStream());
그리고 다음으로 결과를 확인하십시오.
if (data .readLine().contains("uid=0"));
편집하다:
내 앱에서 다음 Root Privileges 클래스를 사용합니다.
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* Root related operations.
*/
public class RootPrivileges {
public static final String TAG = "RootPrivileges";
private RootPrivileges() {
Log.e(TAG, "RootPrivileges should not be instantiated");
}
/**
* Checks and asks for Root privileges
*
* @return true if has root privileges, false otherwise
*/
public static boolean hasRoot() {
boolean resp = false;
Process suProcess;
try {
suProcess = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(suProcess.getOutputStream());
DataInputStream osRes = new DataInputStream(suProcess.getInputStream());
if (os != null && osRes != null) {
os.writeBytes("id\n");
os.flush();
String currUid = osRes.readLine();
boolean exitSu;
if (null == currUid) {
resp = false;
exitSu = false;
Log.e(TAG, "No root privileges, or denied by user");
} else if (currUid.contains("uid=0")) {
resp = true;
exitSu = true;
Log.v(TAG, "Root privileges given");
} else {
resp = false;
exitSu = true;
Log.e(TAG, "Not enough privileges.\n Received: " + currUid + "\n Expected: 0");
}
if (exitSu) {
os.writeBytes("exit\n");
os.flush();
}
}
} catch (Exception e) {
resp = false;
Log.e(TAG, "Root privileges denied. [" + e.getClass().getName() + "] : " + e.getMessage());
}
return resp;
}
/**
* Executes a command as root.
*
* @param cmd the command.
* @return if code was sent to execute
*/
public static final boolean execute(String cmd) {
try {
if (cmd != null && cmd.length() > 0) {
Process suProcess = Runtime.getRuntime().exec("su");
DataOutputStream dataOutputStream = new DataOutputStream(suProcess.getOutputStream());
DataInputStream dataInputStream = new DataInputStream(suProcess.getInputStream());
DataInputStream dataErrorStream = new DataInputStream(suProcess.getErrorStream());
dataOutputStream.writeBytes(cmd);
dataOutputStream.writeBytes("\n");
dataOutputStream.flush();
dataOutputStream.writeBytes("exit\n");
BufferedReader reader = new BufferedReader(new InputStreamReader(dataInputStream));
BufferedReader err_reader = new BufferedReader(new InputStreamReader(dataErrorStream));
String resp;
while ((resp = reader.readLine()) != null) {
Log.v(TAG, "[resp]" + resp);
}
while ((resp = err_reader.readLine()) != null) {
Log.v(TAG, "[err_resp]" + resp);
}
reader.close();
err_reader.close();
dataOutputStream.flush();
try {
int suProcessRetval = suProcess.waitFor();
suProcess.destroy();
return (suProcessRetval != 255);
} catch (Exception ex) {
Log.e(TAG, "Error in Root command execution");
ex.printStackTrace();
}
} else {
Log.e(TAG, "command is null or empty");
}
} catch (IOException ex) {
Log.e(TAG, "IOException");
ex.printStackTrace();
} catch (SecurityException ex) {
Log.e(TAG, "SecurityException");
ex.printStackTrace();
} catch (Exception ex) {
Log.e(TAG, "Generic Exception");
ex.printStackTrace();
}
return false;
}
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다