コンテンツにスキップ

Application prevents taking screenshots

アプリケーションによるスクリーンショットの防止

説明

アプリケーションはプログラムによってスクリーンショットを防止しています。これにより、AI Monkey Tester (Ostorlabの自動モバイルクローラー) がカバレッジを計算できなくなります。

Android アプリケーションは、プログラムによってスクリーンショットの撮影をブロックできます。

  • FLAG_SECURE ウィンドウ フラグを使用する:

FLAG_SECURE ウィンドウ フラグを設定することで、アプリのウィンドウのコンテンツがスクリーンショットに表示されたり、安全でないディスプレイに表示されたりするのを防ぐことができます。

FLAG_SECURE ウィンドウ フラグを設定するには、Window オブジェクトで setFlags() を呼び出し、FLAG_SECURE フラグを渡します。例:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE,
                     WindowManager.LayoutParams.FLAG_SECURE);

これにより、画面録画アプリによってアプリのウィンドウのコンテンツが録画されることも防止されることに注意してください。

  • MediaProjection API を使用する:

MediaProjection API を使用すると、デバイスの画面コンテンツをリアルタイムでキャプチャできます。このAPIを使用すると、ユーザーがスクリーンショットを撮ろうとしたときに画面キャプチャ セッションを開始しないようにするだけで、プログラムによってスクリーンショットの撮影をブロックできます。

MediaProjection API を使用するには、ユースケースに応じて CAPTURE_SCREENSHOT または CAPTURE_VIDEO_OUTPUT 権限をリクエストする必要があります。次に、MediaProjection オブジェクトを作成し、start() を呼び出して画面キャプチャ セッションを開始できます。

MediaProjectionManager mediaProjectionManager =
        (MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE);

Intent permissionIntent = mediaProjectionManager.createScreenCaptureIntent();
startActivityForResult(permissionIntent, REQUEST_SCREENSHOT);

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_SCREENSHOT) {
        if (resultCode == RESULT_OK) {
            // Start the screen capture session
            MediaProjection mediaProjection = mediaProjectionManager.getMediaProjection(resultCode, data);
            mediaProjection.start();
        }
    }
}

その後、MediaProjection オブジェクトで stop() を呼び出すことで、画面キャプチャ セッションを停止できます。

  • MediaProjectionManager API を使用する:

MediaProjectionManager API は、画面キャプチャ セッションを管理できるシステム サービスを提供します。このAPIを使用して、ユーザーにスクリーンショットの撮影を許可する前に、画面キャプチャ セッションがアクティブかどうかを確認することで、プログラムによってスクリーンショットの撮影をブロックできます。

MediaProjectionManager API を使用するには、isProjectionActive() を呼び出して、画面キャプチャ セッションが現在アクティブかどうかを確認できます。画面キャプチャ セッションがアクティブな場合、ユーザーがスクリーンショットを撮るのを防ぐことができます。

MediaProjectionManager mediaProjectionManager =
        (MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE);

if (mediaProjectionManager.isProjectionActive()) {
    // A screen capture session is active, so prevent the user from taking a screenshot
} else {
    // A screen capture session is not active, so allow the user to take a screenshot
}

推奨事項

このエントリは情報提供を目的としており、適用される推奨事項はありません。

リンク

基準

  • OWASP_MASVS_L1:
    • MSTG_PLATFORM_4
  • OWASP_MASVS_L2:
    • MSTG_PLATFORM_4
  • OWASP_MASVS_v2_1:
    • MASVS_PLATFORM_1
  • HIPAA_CONTROLS:
    • SECURITY212
    • SECURITY215