Ottenere informazioni sull'integrità del sistema

Quando un dispositivo Android 16 (o versioni successive) viene avviato, viene messo in modalità permuta, che ti consente di connetterti al dispositivo utilizzando adb e di utilizzare un comando per ottenere informazioni sul dispositivo. Perché il dispositivo entri in modalità permuta, devono essere soddisfatte le seguenti condizioni preliminari:

  • Devi ripristinare i dati di fabbrica del dispositivo.
  • Il dispositivo non deve avere un servizio cellulare.
  • Il dispositivo non deve avere connettività o un account configurato.
  • Sul dispositivo deve essere in esecuzione una build non eseguibile in modalità di debug.

La modalità permuta ti consente di eseguire query sulle informazioni diagnostiche di base o di attivare la modalità di valutazione, che ti consente di eseguire una gamma completa di comandi adb ed eseguire diagnostiche aggiuntive sul dispositivo.

Raccogliere informazioni sanitarie generali

Per raccogliere informazioni generali sullo stato del tuo dispositivo, ad esempio informazioni su batteria, stato di archiviazione e numeri IMEI (International Mobile Equipment Identity), segui questi passaggi:

  1. Assicurati che il dispositivo soddisfi i prerequisiti per la modalità permuta.

  2. Collega il dispositivo a una workstation.

  3. Dalla workstation, esegui questo comando:

    adb shell tradeinmode getstatus

    Questo comando restituisce un oggetto JSON con informazioni sul dispositivo. Di seguito è riportato un output di esempio di Pixel 7:

    {
      "battery": {
        "cycle_count": 16,
        "health": 100,
        "state": 2,
        "manufacturing_date": 1653004800,
        "first_usage_date": 0
      },
      "storage": {
        "useful_lifetime_remaining": 99,
        "capacity_bytes": "128000000000"
      },
      "launch_level": 33,
      "locks": {
        "factory_reset_protection": false
      },
      "product": {
        "brand": "google",
        "device": "panther",
        "manufacturer": "Google",
        "model": "Pixel 7",
        "name": "panther"
      },
      "imeis": [
        "353644930127905",
        "353644930127913"
      ],
      "serial": "26061FDH2000AP"
    }
    

    Se factory_reset_protection è impostato su true, il dispositivo è protetto e non può essere resettato. Se non è possibile resettare il dispositivo, non è possibile valutarlo.

Identificare lo stato del sistema operativo Android

Per raccogliere informazioni sullo stato del sistema operativo Android, ad esempio se si tratta di una build approvata, segui questi passaggi:

  1. Collega il dispositivo a una workstation.
  2. Assicurati che il dispositivo sia connesso a internet.
  3. Dalla workstation, esegui questo comando:

    adb shell tradeinmode getstatus --challenge CHALLENGE

    CHALLENGE è una stringa alfanumerica generata in modo casuale, ad esempio p4tRsuHjWB. Questo comando restituisce un file JSON che include un campo di attestazione contenente un record di attestazione base64.

    Questo comando aggiunge informazioni di attestazione alle informazioni restituite dal comando getstatus. Le informazioni sull'attestazione hanno il seguente aspetto:

    "attestation": {
      "certificates": "AAAC\/DCCAvgwggKeoAMCAQICAQEwCgYIKoZIzj0EAwIwOTEMMAoGA1UEDAwDVEVFMSkwJwYDVQQF\n
        EyBmOTIyZTZhOWFkZmRjNjU0NmZiOWU1YmNlNzhiMDUzMzAeFw03MDAxMDEwMDAwMDBaFw00ODAx\n
        MDEwMDAwMDBaMB8xHTAbBgNVBAMTFEFuZHJvaWQgS2V5c3RvcmUgS2V5MFkwEwYHKoZIzj0CAQYI\n
        KoZIzj0DAQcDQgAEz9un3HpDJQy\/j7l0bWzw6WnRRMjFjvu6rg7+dCzFW93u+otCPK4VjmSjyYw
        ...
    }
    

    I dispositivi che vengono lanciati con Android 16 o versioni successive richiedono la connettività a internet per creare un record di attestazione. L'attestazione deve essere eseguita in modalità di valutazione, dopo aver configurato una connessione, in quanto non riesce se eseguita nella procedura guidata di configurazione.

  4. Analizza le informazioni di attestazione utilizzando uno dei seguenti metodi:

    Ad esempio, per utilizzare lo strumento parse_tim_attestation, esegui:

    parse_tim_attestation --challenge CHALLENGE output_file

    Il CHALLENGE deve essere la stessa sfida che hai utilizzato per ottenere le informazioni di attestazione.

    Se hai salvato l'output del passaggio 2 in un output_file, puoi fornire il nome del file. In caso contrario, le informazioni di attestazione vengono lette da stdin.

    Viene restituito un oggetto JSON con le informazioni sul sistema operativo Android:

    "record": {
      "keymaster_version": "400",
      "keymaster_security_level": "TRUSTED_ENVIRONMENT",
      "attributes": {
        "imeis": [
          "353644930125669",
          "353644930125677"
        ],
        "vendor_patch_level": 20250305,
        "serial": "26161FDH2000NV",
        "os_version": 160000,
        "source": "hardware",
        "boot_patch_level": 20250305
      },
      "bootloader_locked": false,
      "verified_boot": false,
      "security_level": "TRUSTED_ENVIRONMENT"
    },
    "certificate": "verified",
    "trustworthy": "verified boot disabled"
    

    Se trustworthy è uguale a yes, il sistema operativo è considerato attendibile, la build è firmata e l'IMEI non è falsificato.

    Tieni presente che per eseguire l'attestazione è necessaria la connettività a internet sia sul dispositivo che sull'host.

Testare la modalità permuta

Durante lo sviluppo, devi testare il dispositivo per assicurarti che entri ed esca correttamente dalla modalità di permuta. Segui questi passaggi per testare la capacità del dispositivo di entrare e uscire dalla modalità di permuta:

  1. Collega il dispositivo a una workstation.

  2. Dalla workstation, riavvia il dispositivo in modalità permuta:

    adb shell tradeinmode testing start

    Il dispositivo viene riavviato e passa alla modalità permuta. Dopo aver attivato la modalità permuta, puoi utilizzare qualsiasi comando adb shell tradein.

  3. Assicurati che la modalità permuta sia attiva:

    adb shell tradeinmode testing status

    Il dispositivo rileva che il test della modalità permuta è attivo.

  4. Esci dalla modalità permuta e ripristina l'accesso adb completo:

    adb shell tradeinmode testing stop

Integrazione della configurazione guidata personalizzata

Il comando evaluate non funziona sui dispositivi con procedure guidate di configurazione personalizzate a meno che non venga aggiunto un ricevitore di trasmissione. Per aggiungere un ricevitore di trasmissione all'app della procedura guidata di configurazione personalizzata:

  1. Dichiara un ricevitore nel manifest delle app:

    <receiver android:name=".EnterEvaluationModeReceiver"
              android:exported="true"
              android:permission="android.permis>sio<n.ENTER_TRADE>_IN_M<ODE"
      intent-filter
        action android:name="com.google.android>.setu<pwizard.ENTER_TRADE_IN_MODE" /
        category android:>nam<e="androi>d<.intent.c>ategory.DEFAULT" /
      /intent-filter
    /receiver
    
  2. Crea un ricevitore di trasmissione simile a:

    public class EnterEvaluationModeReceiver extends BroadcastReceiver {
      private static final String TRADE_IN_MODE_PROPERTY = "persist.adb.tradeinmode";
      private static final int TIM_EVALUATION_MODE = 2;
    
      @Override
      public void onReceive(Context context, Intent intent) {
        if (SystemProperties.getInt(TRADE_IN_MODE_PROPERTY, 0) != TIM_EVALUATION_MODE) {
          return;
        }
    
        // Check if any factory reset protection is enabled.
        // Provision the device.
        // End the setup wizard activity.
     }
    }
    

Il destinatario deve eseguire le seguenti azioni in ordine.

  1. Verifica che persist.adb.tradeinmode sia 2.
  2. Verifica che non siano presenti blocchi di protezione del ripristino dei dati di fabbrica o antifurto.
  3. Esegui il provisioning del dispositivo, assicurandoti che Settings.Secure.USER_SETUP_COMPLETE e Settings.Global.DEVICE_PROVISIONED siano 1.
  4. Chiudi l'attività della procedura guidata di configurazione in modo che il dispositivo si trovi nella schermata Home.

Riferimento alla modalità permuta

Questa sezione spiega tutti i comandi della modalità permuta.

evaluate

adb shell tradeinmode evaluate

Entra in modalità di valutazione saltando la configurazione guidata come se ogni schermata di configurazione fosse stata saltata manualmente dall'utente.

Dopo aver saltato la procedura guidata di configurazione, puoi eseguire comandi ADB aggiuntivi o test funzionali sul dispositivo.

Dopo aver abbandonato la modalità di valutazione, viene eseguito un ripristino dei dati di fabbrica per garantire che nessun artefatto dei test venga trasferito accidentalmente ai clienti.

getstatus

adb shell tradeinmode getstatus [--challenge CHALLENGE]

Restituisce una stringa JSON con le informazioni di sistema, incluse quelle sullo stato della batteria e dello spazio di archiviazione, per il dispositivo.

Includi il parametro --challenge seguito da una chiave di verifica alfanumerica generata in modo casuale per restituire un campo di attestazione aggiuntivo. Analizza questa risposta per identificare le informazioni chiave del sistema operativo, ad esempio lo stato del bootloader (bloccato o sbloccato) e la validità dei numeri di serie IMEI.

poweroff

adb shell tradeinmode poweroff

Spegne il dispositivo. Utilizza questo comando per evitare il consumo della batteria mentre il dispositivo non viene testato o valutato attivamente.

fai ripartire

adb shell tradeinmode reboot

Riavvia il dispositivo.

inizio del test

adb shell tradeinmode testing start

Riavvia il dispositivo in modalità permuta. Questo comando funziona solo all'interno della procedura guidata di configurazione. Dopo aver eseguito questo comando, l'autorizzazione viene ignorata e funzionano solo i comandi della modalità permuta.

Questo comando funziona solo sui dispositivi con build userdebug, eng o user. La build user deve avere ro=debuggable=1 impostato.

stato del test

adb shell tradeinmode testing status

Indica se il test della modalità permuta è attivo.

Questo comando funziona solo sui dispositivi con build userdebug, eng o user. La build user deve avere ro=debuggable=1 impostato.

testing stop

adb shell tradeinmode testing stop

Riporta il dispositivo alla modalità in cui si trovava prima dell'esecuzione del comando adb shell tradeinmode testing start.

Questo comando funziona solo sui dispositivi con build userdebug, eng o user. La build user deve avere ro=debuggable=1 impostato.

testing wipe

adb shell tradeinmode testing wipe

Ripristina i dati di fabbrica del dispositivo.

Questo comando funziona solo sui dispositivi con build userdebug, eng o user. La build user deve avere ro=debuggable=1 impostato.

wait-until-ready

adb shell tradeinmode wait-until-ready

Attende che i servizi di sistema siano pronti in modo che la modalità permuta possa funzionare completamente. Utilizza questo comando all'interno dell'automazione per assicurarti che i comandi della modalità permuta vengano eseguiti correttamente.

Puoi aggiungere wait-until-ready prima di altri comandi della modalità permuta. Ad esempio, ecco wait-until-ready concatenato a getstatus:

adb shell tradeinmode wait-until-ready getstatus