코더코더123
292
2021-03-09 11:00:17 작성 2021-03-09 11:16:54 수정됨
1
328

안드로이드 Manifest에서 MainActivity에 exported=


안드로이드 Manifest에서 MainActivity 혹은 Launcher 액티비티에 exported="false"설정을 주었을 경우 exception 에러가 발생하는 이유가 무엇인가요?


취약점 진단 시 Manifest에 android:exported="true"로 되어있으면 외부 애플리케이션에서 해당 컴포넌트가 실행될 수 있기 때문에 보안 취약점으로 잡는데요, 

왜 예외적으로 MainActivity는 android:exported="false"가 되어있으면 exception 에러가 발생하여 MainActivity의 exported 설정을 취약점으로 볼 수 없는지 궁금합니다.


exception 에러는 다음과 같습니다 : 


ERROR/Rosie(255): 
Launcher does not have the permission to launch Intent 
{ action=android.intent.action.MAIN categories={android.intent.category.LAUNCHER}
flags=0x10200000 comp={kr.vizpei.blog/kr.vizpei.blog.TestActivity} }. 
Make sure to create a MAIN intent-filter for the corresponding activity or use the exported attribute for this activity.

ERROR/Rosie(255): 
java.lang.SecurityException: Permission Denial: 
starting Intent { action=android.intent.action.MAIN categories=
{android.intent.category.LAUNCHER} flags=0x10200000 
comp={kr.vizpei.blog/kr.vizpei.blog.TestActivity} } 
from ProcessRecord{43851f00 255:com.htc.launcher/9999} (pid=255, uid=9999) 
requires null


0
  • 답변 1

  • OkkyActivity
    418
    2021-03-09 14:50:06

    모든 Activity 를 exported=false 로 만들수는 없습니다


    안드로이드는 외부에서 진입하기 위해 최소 1개의 intent-filter 가 필요하고

    이 intent-filter 는 [외부에서 나를 실행하는것을 허용한다] 라는 뜻입니다~


    따라서, exported=false 와는 서로 상충되는 개념입니다


    질문자님의 MainActivity, LauncherActivity 에 보시면 Intent-filter 가 각각 Main, Launcher 로 걸려있으실 거에여


    만일 Intent-filter 가 없다면(없으면 빌드조차 안되지만)

    안드로이드 시스템조차 질문자님의 앱을 실행시키지 못합니다.

  • 로그인을 하시면 답변을 등록할 수 있습니다.