Application prevents taking screenshots
La aplicación impide tomar capturas de pantalla
Descripción
La aplicación está impidiendo las capturas de pantalla de forma programática, lo que impide que el AI Monkey Tester (el rastreador móvil automatizado de Ostorlab) calcule la cobertura.
Las aplicaciones de Android pueden bloquear de forma programática la toma de capturas de pantalla:
- Uso de la bandera de ventana
FLAG_SECURE:
Al establecer la bandera de ventana FLAG_SECURE, puede evitar que el contenido de la ventana de su aplicación aparezca en capturas de pantalla o se vea en pantallas no seguras.
Para establecer la bandera de ventana FLAG_SECURE, puede llamar a setFlags() en su objeto Window y pasar la bandera FLAG_SECURE. Por ejemplo:
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE,
WindowManager.LayoutParams.FLAG_SECURE);
Tenga en cuenta que esto también evitará que el contenido de la ventana de su aplicación sea grabado por aplicaciones de grabación de pantalla.
- Uso de la API
MediaProjection:
La API MediaProjection le permite capturar el contenido de la pantalla del dispositivo en tiempo real. Al usar esta API, puede bloquear programáticamente la toma de capturas de pantalla simplemente no iniciando la sesión de captura de pantalla cuando el usuario intenta tomar una captura de pantalla.
Para utilizar la API MediaProjection, deberá solicitar el permiso CAPTURE_SCREENSHOT o CAPTURE_VIDEO_OUTPUT, dependiendo de su caso de uso. Luego puede crear un objeto MediaProjection y llamar a start() para comenzar la sesión de captura de pantalla.
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();
}
}
}
Luego puede detener la sesión de captura de pantalla llamando a stop() en el objeto MediaProjection.
- Uso de la API
MediaProjectionManager:
La API MediaProjectionManager proporciona un servicio del sistema que le permite administrar sesiones de captura de pantalla. Puede usar esta API para bloquear programáticamente la toma de capturas de pantalla verificando si una sesión de captura de pantalla está activa antes de permitir al usuario tomar una captura de pantalla.
Para usar la API MediaProjectionManager, puede llamar a isProjectionActive() para verificar si una sesión de captura de pantalla está actualmente activa. Si una sesión de captura de pantalla está activa, puede evitar que el usuario tome una captura de pantalla.
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
}
Recomendación
Esta entrada es informativa, no hay recomendaciones aplicables.
Enlaces
- Android Developer FLAG_SECURE
- Android Developer MediaProjection
- Android Developer MediaProjectionManager
Estándares
- OWASP_MASVS_L1:
- MSTG_PLATFORM_4
- OWASP_MASVS_L2:
- MSTG_PLATFORM_4
- OWASP_MASVS_v2_1:
- MASVS_PLATFORM_1
- HIPAA_CONTROLS:
- SECURITY212
- SECURITY215