Usando ADB para cambiar el bloqueo de pantalla

Estoy buscando una manera de cambiar el tipo de bloqueo de pantalla de deslizar a contraseña y configurar la contraseña a través de la línea de comando adb. Tengo un dispositivo con la configuración que quiero y uno que tiene bloqueo deslizante. Estoy bastante seguro de que esto se puede lograr a través de sqlite3 "copiar y pegar" de algunos campos, pero no estoy seguro de qué campos y cómo hacerlo. Estoy abierto a casi todas las ideas excepto usar adb shell inputcomandos para lograr esto. Significado: puedo/sé cómo/estoy usando comandos input swipe input text input tappara cambiar el desbloqueo por deslizamiento a desbloqueo por contraseña.

edit1: aclarado adb shell input, y sí, mi teléfono está rooteado.

edit2: enlaces relevantes:
Cómo cambiar el tipo de pantalla de bloqueo
Pasar cifrado en Android

De acuerdo con la publicación en el primer enlace, debería ser fácil cambiar el tipo de pantalla de bloqueo, el único problema es que no puedo encontrar el campo lockscreen.password_type en la base de datos se refieren a. ¿Se ha movido en 4.3? Después de leer el artículo en el segundo enlace, mi idea fue usar el número de sal almacenado en la base de datos para generar una nueva contraseña usando la sal específica del dispositivo y anular la contraseña existente (si la hay). Todavía estoy tratando de averiguar cómo hacer esto.

¿Estás rooteado?
excepto usar adb shell inputcomandos, y sí, mi dispositivo está rooteado

Respuestas (2)

Desde Android 8.0 Oreo , puede cambiar la pantalla de bloqueo usando los siguientes comandos adb

adb shell

athene_f:/ $ locksettings
usage: locksettings set-pattern [--old OLD_CREDENTIAL] NEW_PATTERN

   locksettings set-pin [--old OLD_CREDENTIAL] NEW_PIN
   locksettings set-password [--old OLD_CREDENTIAL] NEW_PASSWORD
   locksettings clear [--old OLD_CREDENTIAL]
   locksettings verify [--old OLD_CREDENTIAL]
   locksettings set-disabled DISABLED
   locksettings get-disabled

flags:
   --user USER_ID: specify the user, default value is current user
  1. locksettings set-pin: establece un PIN
  2. locksettings set-password: establece una contraseña
  3. locksettings clear: borra la credencial de desbloqueo
  4. locksettings verificar: verifica la credencial y desbloquea al usuario
  5. locksettings set-disabled: establece si la pantalla de bloqueo debe estar deshabilitada
  6. locksettings get-disabled: recupera si la pantalla de bloqueo está deshabilitada

Y si desea eliminar la contraseña, simplemente use el siguiente código:

$ locksettings clear --old old_password_put_here

Aquí está el enlace de referencia: The Android Soul: cómo cambiar o eliminar el patrón de la pantalla de bloqueo, el PIN o la contraseña a través de ADB en Android 8.0 Oreo

He probado en el dispositivo Android Oreo. Funciona bien.

Obtener respuesta como Request Throttled. ¿Qué significa eso?

No hay una función integrada para establecer la contraseña a través de la línea de comandos, ni desde un shell en el dispositivo ni desde adb. Ni siquiera puede lograr esto pegando la contraseña almacenada en el archivo de configuración segura desde otro dispositivo. La contraseña no se almacena como texto sin formato, sino que se almacena un hash criptográfico de la contraseña. Este hash se genera utilizando la contraseña y un valor salt : un número aleatorio generado una vez en el dispositivo.

Hashing la contraseña evita que alguien robe su teléfono y encuentre la contraseña. Esto es importante no solo para proteger la contraseña en sí (en caso de que use la misma contraseña para otras cosas), sino también porque la contraseña se usa para cifrar el almacén de claves del dispositivo y como parte de la función de cifrado del dispositivo completo. Saltar la contraseña con una sal específica del dispositivo garantiza que un atacante no pueda usar una tabla de arco iris para determinar la contraseña. (Una tabla arco iris es una lista de todas las contraseñas hash posibles, que se consulta para encontrar la contraseña original dada la contraseña hash. La técnica permite que las implementaciones de contraseñas ingenuas, como las de Windows 95, se rompan en menos de un segundo usando una computadora de escritorio normal. )

Además, el código que actualiza la contraseña almacenada cuando la cambia a través de la GUI tiene otros efectos secundarios. Como mencioné, la contraseña se usa para cifrar el almacén de claves del dispositivo, que pueden usar todas las aplicaciones en el dispositivo para almacenar las credenciales de forma segura. Si cambia la contraseña guardada sin actualizar el almacén de claves, se perderán las credenciales almacenadas. Además, si se usa el cifrado de dispositivo completo, cambiar la contraseña guardada sin actualizar la clave de cifrado del dispositivo provocaría que todo el almacenamiento se volviera inaccesible.

Para lograr la funcionalidad que desea, la forma más fácil sería parchear una ROM personalizada para exportar la funcionalidad que usa la aplicación de configuración para cambiar la contraseña y agregar un programa de línea de comandos que pueda cambiar la contraseña de la misma manera. Incluso podría ser posible piratear una aplicación que pueda hacer esto usando la reflexión para obtener acceso a las funciones no exportadas, pero la aplicación aún necesitaría root y sería específica para la ROM (y tal vez incluso la versión de la ROM) en el dispositivo.

El código relevante está aquí si está interesado.

Bueno, la cosa es que leí este artículo: [ forensics.spreitzenbarth.de/2012/02/28/… y esencialmente te dice cómo abrir una contraseña usando el archivo password.key (¿esta es la contraseña encriptada?) y settings.db (¿almacena la sal?) para atacar la contraseña por fuerza bruta de alguna manera (no sé lo suficiente sobre el cifrado para comprender completamente este artículo). Basado en este artículo, se me ocurrió la idea de usar potencialmente la sal específica del dispositivo para encriptar un nuevo pase y sobrescribir contraseña. clave ¿Lógica defectuosa o posible?