Ottenere informazioni sull'integrità del sistema

Quando un dispositivo Android 16 (o versioni successive) si avvia, viene messo in modalità permuta, che ti consente di connetterti al dispositivo utilizzando adb e di utilizzare un comando per ottenere informazioni sul dispositivo. Affinché il dispositivo entri in modalità permuta, devono essere soddisfatti i seguenti prerequisiti:

  • È necessario ripristinare i dati di fabbrica del dispositivo.
  • Il dispositivo non deve avere un servizio di telefonia cellulare.
  • Il dispositivo non deve avere connettività o un account.
  • Sul dispositivo deve essere in esecuzione una build non debbugabile.

Dopo aver eseguito la configurazione guidata, il dispositivo viene inserito in modalità di valutazione, che ti consente di eseguire una gamma completa di comandi adb ed eseguire diagnostica aggiuntiva sul dispositivo.

Raccogliere informazioni sanitarie generali

Per raccogliere informazioni generali sullo stato del tuo dispositivo, ad esempio informazioni sulla batteria, sullo stato dello spazio di archiviazione e sui 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 il seguente comando:

    adb shell tradeinmode getstatus

    Questo comando restituisce un oggetto JSON con informazioni sul dispositivo. Di seguito è riportato un esempio di output 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 abbia una connessione a internet.
  3. Dalla workstation, esegui il seguente comando:

    adb shell tradeinmode getstatus --challenge CHALLENGE

    CHALLENGE è una stringa alfanumerica generata in modo casuale, ad esempio p4tRsuHjWB. Questo comando restituisce un file JSON contenente 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 lanciati con Android 16 o versioni successive richiedono una connessione a internet per creare un record di attestazione. L'attestazione deve essere eseguita in modalità di valutazione, dopo aver configurato una connessione, poiché non va a buon fine se eseguita nella configurazione guidata.

  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

    CHALLENGE deve essere la stessa verifica che hai utilizzato per ottenere le informazioni sull'attestazione.

    Se hai salvato l'output del passaggio 2 in un file output_file, puoi fornire il nome 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 è contraffatto.

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

Testare la modalità permuta

Durante lo sviluppo, devi testare il dispositivo per assicurarti che acceda ed esca correttamente dalla modalità permuta. Segui questi passaggi per verificare la capacità del dispositivo di entrare ed uscire dalla modalità 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 ed entra in 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 identifica che i test della modalità permuta sono attivi.

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

    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'app di ricezione di annunci all'app wizard di configurazione personalizzata:

  1. Dichiara un ricevitore nel file manifest dell'app:

    <receiver android:name=".EnterEvaluationModeReceiver"
              android:exported="true"
              android:permission="android.permission.ENTER_TRADE_IN_MODE">
      <intent-filter>
        <action android:name="com.google.android.setupwizard.ENTER_TRADE_IN_MODE" />
        <category android:name="android.intent.category.DEFAULT" />
      </intent-filter>
    </receiver>
    
  2. Crea un'entità BroadcastReceiver 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 protezioni di ripristino dei dati di fabbrica o serrature antifurto.
  3. Esegui il provisioning del dispositivo, assicurandoti che Settings.Secure.USER_SETUP_COMPLETE e Settings.Global.DEVICE_PROVISIONED siano 1.
  4. Escludi l'attività della procedura guidata di configurazione in modo che il dispositivo sia nella schermata Home.

Riferimento alla modalità permuta

Questa sezione spiega tutti i comandi in modalità permuta.

valutare

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 di funzionalità sul dispositivo.

Quando esci dalla modalità di valutazione, viene eseguito un ripristino dei dati di fabbrica per assicurarti che nessun elemento del test venga trasferito accidentalmente ai clienti.

getstatus

adb shell tradeinmode getstatus [--challenge CHALLENGE]

Restituisce una stringa JSON con le informazioni di sistema, incluse le informazioni 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 quando il dispositivo non è in fase di test o valutazione attiva.

fai ripartire

adb shell tradeinmode reboot

Riavvia il dispositivo.

inizio 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 emesso 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 compilazione user deve avere ro=debuggable=1 impostato.

stato del test

adb shell tradeinmode testing status

Indica se i test della modalità permuta sono attivi.

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

fermata di prova

adb shell tradeinmode testing stop

Ripristina il dispositivo nella modalità in cui si trovava prima di emettere il comandoadb shell tradeinmode testing start.

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

test 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 compilazione user deve avere ro=debuggable=1 impostato.

wait-until-ready

adb shell tradeinmode wait-until-ready

Attende che i servizi di sistema siano pronti per consentire il funzionamento completo della modalità permuta. 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 agganciato a getstatus:

adb shell tradeinmode wait-until-ready getstatus