Ok.
Questo è esattamente il punto in cui ci siamo fermati e ora diamo un'occhiata al fornitore di contenuti.
Cosa possiamo fare con questo?
Ok, chiudiamo il discorso.
E poi vediamo.
Fornitore di contenuti, questo qui.
Quindi abbiamo questo fornitore di contenuti utente Trek ed è stato esportato, il che significa che è accessibile
dal mondo esterno.
Questo è il nome della nostra autorità e credo che sia esattamente lo stesso, giusto?
No.
Oh, ok.
È lo stesso.
Sì.
Ok.
Diamo quindi un'occhiata a questo.
Creare la tabella nomi id integer chiave primaria come incrementare.
Abbiamo i nomi delle tabelle, i campi e gli ID, che vengono conteggiati.
Quindi forse, forse, scriviamo questo.
Abbiamo un ID, questa è la prima riga.
Poi abbiamo questo nome, che è la seconda riga.
Ok, bel nome.
Trascinare con il mouse è un po' difficile, ma sì, questa è la nostra tabella.
E la tabella si chiama nomi.
Ok.
Questo è il nome del nostro fornitore.
Perfetto.
E questo è il nostro.
Questo è il nostro database completo.
Va bene.
Abbiamo già tutte queste informazioni elencate in queste poche righe.
Ora, vediamo.
Ci sono partite.
Abbiamo tracciato gli utenti e tracciato gli utenti all'interno di una sorta di rack X.
Quindi dovrebbe funzionare per entrambi.
Questo non ci interessa.
E poi vediamo, abbiamo la cancellazione del tipo get insert sulla query create.
Quindi, queste sono tutte le cose che abbiamo a disposizione: il content resolver chiede l'accesso
a questo e le API vengono restituite.
Ecco la nostra query del cursore.
Questo è il nostro ingresso nel database.
Quindi possiamo eseguire aggiornamenti, cancellazioni, inserimenti e cose del genere.
Quindi sembra che abbiamo il pieno controllo di questa situazione.
Sì.
Bello.
Allora suggerirei.
Diamo un'occhiata.
Cosa si pensa lì dentro?
Vediamo.
Quindi, adb shell.
E poi mettiamo questo a destra e questo a sinistra.
Ok, quindi abbiamo il nostro contenuto.
Sì.
Rendiamolo un po' più grande.
Mi dispiace.
Più piccolo.
Ok.
E ora iniziamo con una semplice query per vedere se ci sono già dei dati.
Quindi vediamo.
Eccolo qui.
Ok.
Guscio ADB.
Non è necessario in questo momento.
Ma poi la domanda di contenuto.
Poi dobbiamo fornire l'URI e l'URI è l'URL che abbiamo visto qui.
Quindi mettiamo questo punto più a sinistra.
Questo è l'URL.
Vogliamo recuperare le informazioni e tracciare gli utenti.
Ok, allora vediamo cosa c'è dopo.
Ok.
E poi possiamo definire e proiettare e altre cose.
Ma se non forniamo nulla, ci limitiamo a restituire i dati memorizzati
all'interno e questo va bene.
Chiudiamo questo, mettiamo questo a sinistra e vediamo che non è stato trovato alcun risultato perché non
siamo ancora entrati in questa applicazione.
Ok.
Ora è il momento in cui abbiamo bisogno di alcune credenziali e l'ho pianificato in questo modo per
mostrarvi che fa un'enorme differenza se testate un'applicazione, se siete partiti dall'inizio o
se state testando un'applicazione che ha già un certo contesto nel caso delle nostre attività, forse volete
ricapitolare alcune cose.
Se queste funzioni non funzionano davvero, forse non c'è stato un contesto all'interno di questa applicazione.
Questo è il motivo di tutti questi messaggi di errore, il che significa che se disponiamo di un'applicazione personalizzata
in esecuzione su un dispositivo reale e abbiamo accesso a questi provider di contenuti di attività tramite
la nostra applicazione, allora forse potremmo leggere o eseguire determinate transazioni.
Va bene.
Ok.
Abbiamo quindi imparato a nostre spese che se dovete testare qualcosa, fatelo senza contenuti, ma anche
ripetendo gli stessi passi con dei contenuti.
Va bene.
Le credenziali di questa applicazione sono mostrate qui e possono essere utilizzate per accedere subito a questa applicazione.
Quindi, facciamo così.
Ok?
Insomma, siamo hacker, quindi facciamo così.
Immettere quindi il testo.
Quindi non è una D maiuscola, ma una D minuscola.
E ora inserite il testo.
Questa è la parola d'ordine.
Ok.
Premiamo login.
Credenziali non valide.
Interessante.
Quindi queste non sono le credenziali corrette.
Allora facciamolo con il controllo.
Ops.
Non qui.
Controllo dell'imposta a monte.
Ed eccoci qui ad avere.
Controllare e 123..
Va bene, funziona.
Quindi non sono sicuro di cosa stia accadendo con questi.
Forse devono essere attivati o cose del genere, ma dobbiamo usare il controllo.
Ok.
Lo farò.
Riprenderò le mie animazioni e stamperò solo quelle corrette.
Quindi ora siamo bloccati.
Quindi vediamo.
Trasferimento dal conto.
Abbiamo semplicemente premuto get accounts.
Poi abbiamo l'importo.
Supponiamo di voler trasferire 100.
E vediamo.
Trasferimento riuscito.
Abbiamo una certa visione.
Credo che l'interfaccia sia ancora la stessa.
Ok, allora torniamo indietro.
Visualizza la dichiarazione.
Messaggio di successo da a importo.
Qui si possono vedere le transazioni e forse cambiare la password.
Facciamo anche questo.
Dobbiamo rimanere nella politica delle password.
Quindi sto utilizzando un test di input text da 1 a 3 dollari.
Sì.
Password riuscita e riavvio per eseguire questo OC.
E possiamo anche vedere la password aggiornata da due.
Quindi riceviamo un SMS che contiene la nostra vecchia password e anche quella nuova, il che sembra assolutamente
ridicolo, vero?
Sì.
Ma è così che stanno le cose al momento.
Ora facciamo clic su Riavvia.
E abbiamo anche le credenziali auto.
E ora possiamo premere il tasto di accesso.
E le credenziali non valide, perché è interessante che le credenziali non
valide siano le vecchie o le nuove impostazioni.
Quindi vediamo e proviamo a fare così.
Guarda in.
Ok, possiamo vedere che le credenziali sono state modificate, ma sembra che le credenziali in queste preferenze condivise
vengano aggiornate solo dopo aver effettuato l'accesso.
Quindi, se cambiamo la password, l'opzione di riempimento automatico non funziona più perché contiene
la vecchia password.
Una scelta di design interessante, ma siamo qui per i fornitori di contenuti, quindi torniamo a loro.
Vediamo.
Premiamo semplicemente il tasto freccia in alto e vediamo se c'è qualcosa qui dentro e poi andiamo.
Si può notare che la riga zero è il controllo del nome e l'ID della riga uno.
Viene controllata anche la riga 182.
Quindi questa applicazione blocca ogni utente che si collega a questa applicazione, il che è sorprendente perché possiamo recuperare questa
applicazione, possiamo recuperare queste informazioni dalla nostra applicazione esterna
e poi possiamo combinarle per cambiare la password.
Ricordiamo ancora l'attività di cambio password?
Certo che sì.
Ora abbiamo il nome utente e il vettore di attacco sarebbe il seguente.
La nostra applicazione dannosa in questa qui sta usando questo content provider per recuperare il nome utente da questa
applicazione.
Quindi ora la nostra applicazione lo sa.
Ok, c'è un controllo del nome utente qui dentro e ora la nostra applicazione può lanciare la modifica della password.
La strana password si intende con questo nome utente per poter cambiare la password di questo utente senza
avere accesso alle credenziali originali dell'utente.
Proviamo a fare una prova veloce.
Cioè, ora è più legato alle attività, ma questo viene fatto abbastanza rapidamente.
Forse ce l'abbiamo ancora qui.
No.
Quindi vediamo.
È ancora aperto da qualche parte?
Hmm.
Ok.
Sì, è ancora aperto.
Quindi ora non stiamo usando l'amministrazione, ma il controllo.
E per rendere questo attacco non valido, resettiamo tutto.
Bene, ora apriamo il passaporto delle modifiche con l'intento.
Controllo.
Ok.
E ora vediamo se avete cambiato il vostro passaporto.
E poi usiamo aggiungere 1 a 3 dollari.
Passaporto di cambio riuscito.
Va bene.
E qui arriva l'SMS.
Ora sappiamo che possiamo cambiare il passaporto.
Se conoscessimo solo il nome utente, questo sarebbe un flusso assolutamente ridicolo.
Va bene.
Abbiamo ottenuto queste informazioni dal nostro fornitore di contenuti.
Quindi abbiamo semplicemente letto queste informazioni.
Ok, ora cerchiamo di nascondere le nostre tracce.
Diciamo quindi che stiamo inserendo l'applicazione.
Ops, dobbiamo prima riavviarlo.
Quindi stiamo controllando.
Deve essere stata violata la password e oops.
A uno, due o tre dollari.
Ok.
Ora non potevamo effettuare alcun trasferimento.
Per rendere conto.
Quindi stiamo facendo clic sui conti per ottenere il conto dell'assegno e non lo stiamo trasferendo a questo conto.
C'era già un messaggio di successo?
Sì.
Eccolo qui, ora.
Ok.
Abbiamo quindi due serrature.
Abbiamo il blocco per quanto riguarda l'utente.
Effettuando il login, abbiamo questa dichiarazione di vista.
Quindi, per essere assolutamente rock ninja, dobbiamo manipolare entrambi.
Ma ora ci concentreremo solo su questo, perché si tratta dell'interazione con il fornitore di contenuti.
Ok.
Quindi vediamo, come possiamo cancellare le nostre tracce se ora leggiamo ancora una volta questo?
Vogliamo eliminare questa parte qui.
E sì, facciamolo insieme adesso.
Quindi ingrandiamo un po' e poi conteniamo il contenuto.
L'assistenza qui è assolutamente straordinaria.
Quindi abbiamo bisogno di cancellare.
Vogliamo utilizzare l'eliminazione dei contenuti.
Quindi forniamo il nostro URI e poi dobbiamo usare questo binding con questo binding.
Questo è un po' complesso, ma c'è anche un esempio sotto.
Sì.
Non è necessario utilizzare la colonna vertebrale.
Si potrebbe anche usare semplicemente la clausola quadrata.
Ok, quindi stiamo semplicemente usando questa parte.
Riceviamo questo.
Ora stiamo inserendo i valori corretti per ingrandire un po' il tutto.
Ok.
E ancora una volta, forse, cerchiamo di ottenere queste informazioni.
Ok.
Quindi, ora vogliamo eliminare gli utenti dal tracciato.
Vogliamo cancellare.
Dove e ora l'ID.
È uguale.
Tre.
Non sono sicuro che sia necessario fornire questo dato in un'unica citazione, perché potrebbe riguardare le stringhe.
Ma proviamo semplicemente questo.
Ok.
Nessun messaggio di errore.
Vediamo se questa riga è stata eliminata.
Questo.
Questo qui.
Sì.
Perfetto.
Ecco come possiamo nascondere le cose che riguardano questo fornitore di contenuti, in modo da poter
cancellare le voci, selezionarle e inserirle.
Quindi forse sì, forse inseriamo una nuova voce.
Supponiamo che Dinesh sia l'utente che per ultimo ha consultato questa applicazione e ha effettuato il trasferimento.
Vediamo quindi come si può fare.
Ok.
Quindi i contenuti, dove abbiamo l'inserto?
Oh, lui all'inizio.
Ecco perché me lo sono perso.
È possibile navigare con questo utilizzo qui.
È possibile vedere l'utilizzo degli inserti, degli aggiornamenti, del nucleo di utilizzo delle query.
Ok.
Prendiamo quindi questa parte dell'inserto.
Vediamo.
Ok.
Prendiamo questo esempio e lo rinominiamo ancora una volta.
Sì, ecco che abbiamo questo, che è un po' più complesso per quanto riguarda queste cose da trovare.
Ma possiamo farcela.
Ok.
Questa è la nostra vecchia pista.
E ora vediamo, vogliamo usare questo fornitore di contenuti qui.
E ora dobbiamo usare la colonna vertebrale.
E ora dobbiamo dirlo alle donne.
Dobbiamo dire cosa dobbiamo aggiungere a questo.
Quindi vogliamo aggiungere una nuova voce in questa tabella qui.
Dobbiamo inserire una nuova riga.
In questa riga, il parametro che vogliamo inserire ha il nome di Dinesh.
Il primo parametro è un incremento automatico, il che significa che verrà assegnato automaticamente
all'ID tre.
Ciò significa che dobbiamo fornire solo il nome che vogliamo inserire nella tabella in questo momento.
Ciò significa che abbiamo bisogno di un solo binding.
Quindi il secondo dell'esempio può essere eliminato.
Ok.
E ora la struttura è relativamente semplice.
Per prima cosa abbiamo il nome della colonna.
Il nome della colonna è name.
Ok, perfetto.
Poi abbiamo TSS, che è la stringa del tipo e del significato.
Ed ecco la stringa che vogliamo inserire.
In questo caso, si tratta semplicemente di Dinesh.
Va bene?
Ed è così che possiamo aggiungere Dinesh a questo qui.
Nel caso in cui ci fossero più campi, sarebbe necessario creare più punti qui.
Bene, vediamo se funziona.
Nessun errore.
Questo è un bene.
E ora vediamo.
Utenti di crack.
Ok.
Interessante.
Possiamo vedere che la rete è stata inserita qui, ma non è più così rocciosa perché
il NASH ha ora l'ID ID per e questo è il motivo perché i tagli uno, due e tre sono stati eliminati e ora ci è stato assegnato il valore
quattro.
Quindi, se anche voi volete essere più rock, dobbiamo aggiornare questa voce, che è anche, ehm,
un buon esercizio perché poi abbiamo fatto tutto.
Ok, vediamo i contenuti.
Come possiamo aggiornare questo, inserire l'aggiornamento.
Quindi è... è semplice.
Già.
Ora si tratta di un misto di inserimento e cancellazione.
Bene, allora prendiamo questo esempio.
E questo qui.
E poi abbiamo ricontrollato tutto con i nostri fornitori di contenuti.
Quindi abbiamo l'URI di aggiornamento dei contenuti e poi prendiamo questo.
Ok.
E ora cancello rapidamente lo schermo.
Che abbiamo in modo pulito e ordinato.
Ok.
Quindi abbiamo la teoria dei contenuti, poi il nostro database, poi il nostro valore bind, la stringa, il
nuovo valore.
E poi abbiamo la nostra dichiarazione.
Ok.
Quindi questo può essere cancellato.
E ora approfondiamo questo aspetto.
Quindi il nostro valore per valore stringa nuovo valore.
Vogliamo aggiornare l'ID dell'autorità del nome dal tipo intero a tre.
Lì.
L'ID è uguale a quattro.
Vediamo.
Manca questo.
Non ci sono frecce.
Vediamo se ha funzionato.
Quindi interroghiamoci ancora una volta.
Sì.
Non c'è un piccolo problema per il ruolo, ma possiamo vedere che questa voce è stata aggiornata.
Quindi, all'interno del blocco che abbiamo ora, ID uno, due e tre e questo qui, che è il Nash.
È l'utente che ha effettuato l'ultimo accesso a questo sistema in base a questi ID.
Va bene.
Ok, perfetto.
Ecco quindi come possiamo fare confusione con questo.
Ok.
Ecco come cancellare voci, aggiornare voci, inserire voci o interrogare voci all'interno di un fornitore di contenuti.
Non ci sono molte altre opzioni.
E credo che questi siano assolutamente sufficienti per farlo.
Ok.
Questo è tutto per quanto riguarda il fornitore di contenuti.
Nel prossimo video esamineremo il ricevitore broadcast.
Quindi, come abusare di questa cosa.
Per eseguire alcune cose incredibili ci vediamo lì.