본문 바로가기
리버싱/Android

Android Root Detection Techniques in JNI

by 즉흥 2016. 8. 9.
728x90
반응형

참고 : https://blog.netspi.com/android-root-detection-techniques/



참고라기 보다는 거의 번역본.



1. Installed Files & Packages


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <cstdio>
#include <string>
 
std::string FindFileDir[6= {"/sbin/su""/system/su",
                         "/system/sbin/su""/system/xbin/su",
                         "/data/data/com.noshufou.android.su",
                          "/system/app/Superuser.apk",
                         "/system/bin/su""/system/bin/.ext/.su",
                         "/system/usr/we-need-root/su-backup",
                         "/system/xbin/mu"};
 
bool CheckFile(){
    int i;
    for( i = 0; i < 6 ; i++){
        if ( access(FindFileDir[i].c_str(), F_OK == 0 )
            return true;
    }
    return false;
}
cs


Superuser.apk 패키지는 루팅된 디바이스에서 가장 흔하게 발견되는 패키지이다.


그 외에도 위에 나열된 su 바이너리 역시 루팅된 디바이스에서 가장 흔하게 발견되는 바이너리이다.




2. Directory Permissions



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <unistd.h>
#include <string>
bool CheckDir(){
    int i;
    std::string CheckDir[] = {
            "/data""/",
            "/system""/system/bin",
            "/system/sbin""/system/xbin",
            "/vendor/bin""/sys""/sbin",
            "/etc""/proc""/dev"};
    for( i = 0 ; i< 12; i++) {
        LOGI("ky msg : (%d/12) %s", i + 1, CheckDir[i].c_str());
        if (0 == access(CheckDir[i].c_str(), F_OK)) {
            if (0 == access(CheckDir[i].c_str(), W_OK))
                return true;
            if (i == 0) {
                if (0 == access(CheckDir[i].c_str(), R_OK))
                    return true;
            }
        }
    }
    return false;
}
cs


일반적으로 루팅되지 않은 폰에서는 /bin 디렉토리를 읽을 수 없다. (읽기 권한이 없다)

그리고 위에 언급된 모든 디렉토리에는 쓰기 권한이 없다.



3. Commands



su 명령어, id 명령어 등을 통해 현재 권한을 확인할 수 있다.


일반적인 안드로이드 기기에는 su 명령어 자체가 없고, 만약 루팅된 기기라면 id 명령어를 입력했을 때 root id가 나올 것이다.



1
2
shell@android:/ # id
uid=0(root) gid=0(root) groups=1003(graphics),1004(input),1007(log),1009(mount),1011(adb),1015(sdcard_rw),1028(sdcard_r)
cs


728x90
반응형

'리버싱 > Android' 카테고리의 다른 글

adb 명령어 정리  (2) 2017.12.07
AndroidManifest.xml의 android:debuggable 수정하기  (0) 2016.11.02
JNINativeInterface JNIENV  (0) 2016.10.15
코드엔진 SmartApp 04 (작성중)  (0) 2016.08.18
코드엔진 SmartApp 03  (0) 2016.08.18
코드엔진 SmartApp 02  (0) 2016.08.18
안드로이드 Dex 디스어셈블러  (0) 2016.08.18
코드엔진 SmartApp 01  (0) 2016.08.18
apk 파일 리패키징  (3) 2016.08.16
apk 파일 디컴파일  (2) 2016.08.16

댓글