투케이2K

523. (kotlin/코틀린) [기능 보완] isRootingDevice : 휴대폰 루팅 상태 체크 수행 - Runtime exec , rootingFiles check 본문

Kotlin

523. (kotlin/코틀린) [기능 보완] isRootingDevice : 휴대폰 루팅 상태 체크 수행 - Runtime exec , rootingFiles check

투케이2K 2024. 8. 27. 21:15

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : Kotlin

 

[소스 코드]

 

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

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


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


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

            try {

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

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

            } catch (e: Exception) {
            } finally {

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

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

                    if (returnData == false) {
                        val rootFilesPath = arrayOf(
                            "/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"
                        )

                        val rootingFiles = arrayOfNulls<File>(rootFilesPath.size)

                        for (i in rootFilesPath.indices) {
                            rootingFiles[i] = File(rootFilesPath[i])
                        }

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

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

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


            // [로그 출력 실시]
            //*
            // ===============================================================
            S_Log._F_(mContext!!, "휴대폰 루팅 상태 체크 수행", arrayOf(
                "RETURN :: $returnData"
            ))
            // ===============================================================
            // */


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

 

반응형
Comments