Android 루트 액세스 스크립트

가제트 전문가

이 스크립트에 대한 도움이 필요합니다. 누군가 내가 뭘 잘못했는지 말해 줄 수 있나요? 시작시 루트 검사기를 만들려고합니다.

  1. 쓰기 액세스 확인
  2. 루트가없는 ReturnaAlert
  3. 프레스 종료시 종료 (TO DO)

내가 만들고있는 정확한 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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

자바 스크립트에서 모델 속성에 액세스

분류에서Dev

Shadow DOM 스크립트에서 전역 문서에 액세스

분류에서Dev

네임 스페이스 스크립트 변수에 액세스

분류에서Dev

Lua 스크립트를 통해 REST API에 액세스

분류에서Dev

Azure 스크립트의 변수 액세스 btw Powershell in Dev Ops Pipeline

분류에서Dev

Azure 스크립트의 변수 액세스 btw Powershell in Dev Ops Pipeline

분류에서Dev

RISC-V 링커 스크립트의 액세스 권한

분류에서Dev

Terraform-하위 모듈에서 루트 모듈 스크립트에 액세스

분류에서Dev

Puppeteer에서 자바 스크립트 변수에 액세스

분류에서Dev

자바 스크립트 클래스 변수 액세스

분류에서Dev

자바 스크립트 파일의 json에 액세스

분류에서Dev

액션 스크립트 로더 세트 크기 이미지

분류에서Dev

자바 스크립트에서 JSON 데이터에 액세스

분류에서Dev

레일에서 자바 스크립트에 액세스

분류에서Dev

객체 자바 스크립트 내의 배열에 액세스

분류에서Dev

객체 자바 스크립트 getter 액세스 문제

분류에서Dev

자바 스크립트 HTMLCollection 액세스

분류에서Dev

다른 스크립트 소스에서 변수에 액세스

분류에서Dev

자바 스크립트 액세스 div

분류에서Dev

for 루프 자바 스크립트 외부에서 배열 변수에 액세스

분류에서Dev

루트 폴더 액세스

분류에서Dev

For 루프 리눅스 스크립트

분류에서Dev

쉘 스크립트 파일 액세스

분류에서Dev

루트 액세스없이 init.d 스크립트 시작 / 중지

분류에서Dev

루트 수준 시스템 폴더 Android에 액세스

분류에서Dev

Android의 자바 스크립트 및 HTML

분류에서Dev

Swift 3 스크립트-액세스 프로세스 인수

분류에서Dev

Android 4.3 adbd : 루트 액세스를 암호로 보호 할 수 있습니까?

분류에서Dev

스크립트 루핑

Related 관련 기사

  1. 1

    자바 스크립트에서 모델 속성에 액세스

  2. 2

    Shadow DOM 스크립트에서 전역 문서에 액세스

  3. 3

    네임 스페이스 스크립트 변수에 액세스

  4. 4

    Lua 스크립트를 통해 REST API에 액세스

  5. 5

    Azure 스크립트의 변수 액세스 btw Powershell in Dev Ops Pipeline

  6. 6

    Azure 스크립트의 변수 액세스 btw Powershell in Dev Ops Pipeline

  7. 7

    RISC-V 링커 스크립트의 액세스 권한

  8. 8

    Terraform-하위 모듈에서 루트 모듈 스크립트에 액세스

  9. 9

    Puppeteer에서 자바 스크립트 변수에 액세스

  10. 10

    자바 스크립트 클래스 변수 액세스

  11. 11

    자바 스크립트 파일의 json에 액세스

  12. 12

    액션 스크립트 로더 세트 크기 이미지

  13. 13

    자바 스크립트에서 JSON 데이터에 액세스

  14. 14

    레일에서 자바 스크립트에 액세스

  15. 15

    객체 자바 스크립트 내의 배열에 액세스

  16. 16

    객체 자바 스크립트 getter 액세스 문제

  17. 17

    자바 스크립트 HTMLCollection 액세스

  18. 18

    다른 스크립트 소스에서 변수에 액세스

  19. 19

    자바 스크립트 액세스 div

  20. 20

    for 루프 자바 스크립트 외부에서 배열 변수에 액세스

  21. 21

    루트 폴더 액세스

  22. 22

    For 루프 리눅스 스크립트

  23. 23

    쉘 스크립트 파일 액세스

  24. 24

    루트 액세스없이 init.d 스크립트 시작 / 중지

  25. 25

    루트 수준 시스템 폴더 Android에 액세스

  26. 26

    Android의 자바 스크립트 및 HTML

  27. 27

    Swift 3 스크립트-액세스 프로세스 인수

  28. 28

    Android 4.3 adbd : 루트 액세스를 암호로 보호 할 수 있습니까?

  29. 29

    스크립트 루핑

뜨겁다태그

보관