투케이2K

845. (Android/Java) [기능 보완] isRootingDevice : 휴대폰 루팅 상태 체크 수행 - Runtime exec , rootingFiles check 본문

Android

845. (Android/Java) [기능 보완] isRootingDevice : 휴대폰 루팅 상태 체크 수행 - Runtime exec , rootingFiles check

투케이2K 2024. 8. 22. 20:24

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : Java / Kotlin

 

[소스 코드]

    // -----------------------------------------------------------------------------------------
    // TODO [SEARCH FAST] : [isRootingDevice] : 휴대폰 루팅 상태 체크 수행
    // -----------------------------------------------------------------------------------------
    public static Boolean isRootingDevice(Context mContext){

        /**
         * // -----------------------------------------
         * [isRootingDevice 메소드 설명]
         * // -----------------------------------------
         * 1. 휴대폰 루팅 상태 체크 수행
         * // -----------------------------------------
         * 2. 호출 방법 :
         *
         * C_StateCheck.isRootingDevice(A_Main.this);
         * // -----------------------------------------
         * 3. 리턴 데이터 :
         *
         * 루팅 인 경우 true / 아니면 false
         * // -----------------------------------------
         * */


        // [리턴 변수 선언 실시]
        boolean returnData = false;


        // [su 명령이 실행 가능한지 확인]
        Process process = null;

        try {

            // [su 명령 수행]
            process = Runtime.getRuntime().exec("su");

            // [리턴 변수 삽입]
            returnData = true;

        } catch (Exception e) {
        } finally {

            // [Process 종료]
            if (process != null) {
                try {
                    process.destroy();
                } catch (Exception e) {
                }
            }

            // [내부 프로그램 파일 추가 체크]
            try {

                if (returnData == false){

                    String[] rootFilesPath = new String[]{
                            "/su/bin/su",
                            "/su/xbin/su",
                            "/su/bin/.user/.su",
                            "/system/xbin/su",
                            "/system/bin/su",
                            "/system/bin/.user/.su",
                            "/dev/com.noshufou.android.su",
                            "/data/data/com.tegrak.lagfix",
                            "/data/data/eu.chainfire.supersu",
                            "/data/data/com.noshufou.android.su",
                            "/data/data/com.jrummy.root.browserfree",
                            "/system/app/Superuser.apk",
                            "/data/app/com.tegrak.lagfix.apk",
                            "/data/app/eu.chainfire.supersu.apk",
                            "/data/app/com.noshufou.android.su.apk",
                            "/data/app/com.jrummy.root.browserfree.apk",
                            "/sbin/su",
                            "/system/su",
                            "/system/sbin/su",
                            "/system/xbin/mu",
                            "/system/bin/.ext/.su",
                            "/system/usr/su-backup",
                            "/system/app/su.apk",
                            "/system/bin/.ext",
                            "/system/xbin/.ext",
                            "/data/local/xbin/su",
                            "/data/local/bin/su",
                            "/system/sd/xbin/su",
                            "/system/bin/failsafe/su",
                            "/data/local/su"
                    };

                    File[] rootingFiles = new File[rootFilesPath.length];

                    for(int i=0; i < rootFilesPath.length; i++){
                        rootingFiles[i] = new File(rootFilesPath[i]);
                    }

                    for(File rootingFile : rootingFiles){
                        if(rootingFile != null && rootingFile.exists() && rootingFile.isFile()){

                            // [리턴 변수 삽입]
                            returnData = true;
                            break;

                        }
                    }

                }

            }
            catch (Exception ez){
                ez.printStackTrace();
            }

        }


        // [로그 출력 실시]
        //*
        // ===============================================================
        S_Log._F_(mContext, "휴대폰 루팅 상태 체크 수행", new String[]{
                "RETURN :: " + String.valueOf(returnData)
        });
        // ===============================================================
        // */


        // [리턴 반환 실시]
        return returnData;
    }
 

[결과 출력]

 

E///===========//: ================================================
I/: [LOG :: CLASS PLACE :: com.example.javaproject.C_StateCheck.isRootingDevice(C_StateCheck.java:1769)]
I/: ----------------------------------------------------
I/: [LOG :: NOW TIME :: 2024-08-21 16:15:52 수요일]
I/: ----------------------------------------------------
I/: [LOG :: DESCRIPTION :: 휴대폰 루팅 상태 체크 수행]
I/: ----------------------------------------------------
I/: [LOG :: RETURN :: false]
E///===========//: ================================================

 

반응형
Comments