안드로이드 코드단에서 루팅 기기를 확인하는 방법들

다수의 모바일 악성코드는 사용자 디바이스의 루팅 여부를 확인하는 경우가 많습니다. 추가적인 root exploit 없이 쉽게 root 권한을 사용할 수 있으며, root 권한을 통해 안드로이드 OS에서 통제하지 못하는 부분에 대해서도 작업이 가능하기 때문입니다.

su 명령 확인

루팅된 단말은 su(switch user) 명령을 사용할 수 있기 때문에 해당 명령을 검증하는 방법이 존재합니다.

try {
    Runtime.getRuntime().exec("su");
} catch ( Exception e) {
    Log.d("root", "not rooting");
}

Runtime.getRuntime().exec 명령을 통해 su 를 실행하였을 때 루팅이 되어있다면 에러가 없을것이고, 루팅이 되지 않았다면 Execption 으로 catch 문에 걸립니다.

su 파일 확인

또한 시스템 내 su 파일이 존재하는지 확인하는 방법도 있습니다.

/system/app/Superuser.apk
/sbin/su
/system/bin/su
/system/xbin/su
/system/usr/we-need-root/
/data/local/xbin/su
/data/local/bin/su
/system/sd/xbin/su
/system/bin/failsafe/su
/data/local/su
/su/bin/su
/su/bin
/system/xbin/daemonsu

위와 같이 su 파일이나 루팅 어플(superuser)에 대한 확인을 통해 루팅 여부 확인이 가능합니다.

루팅 관련 앱 확인

안드로이드 기기 내 루팅 관련 어플리케이션이 설치되었는지 확인합니다. kingroot 등 루팅에 사용되는 어플리케이션이 설치되어 있다면 루팅 기기일 확률이 높습니다.

com.devadvance.rootcloak
com.devadvance.rootcloakplus
com.koushikdutta.superuser
com.thirdparty.superuser
eu.chainfire.supersu
de.robv.android.xposed.installer
com.saurik.substrate
com.zachspong.temprootremovejb
com.amphoras.hidemyroot
com.amphoras.hidemyrootadfree
com.formyhm.hiderootPremium
com.formyhm.hideroot
com.noshufou.android.su
com.noshufou.android.su.elite
com.yellowes.su
com.topjohnwu.magisk
com.kingroot.kinguser
com.kingo.root
com.smedialink.oneclickroot
com.zhiqupk.root.global
com.alephzain.framaroot

한계점

다만 이러한 로직 또한 패키지나 su 바이너리 이름을 바꾸거나, Frida 등으로 후킹하여 코드가 조작되는 경우 검증하기 어렵습니다. 그래도 없는 것 보단 훨씬 좋긴 합니다 :D