[GIOCO MUSICA] DAVID J. MALAN: Va bene. Questo è CS50, e questo è la fine della quarta settimana. E uno dei temi oggi è quello della digital forensics, l'arte di recuperare informazioni. E infatti, anche se siete nel bel mezzo in questo momento di pace a tre e Breakout, la prossima settimana, l'attenzione sarà focalizzata sulla Proprio questo dominio. Così uno dei lavori più cool che mai avuto era tornato a scuola di specializzazione, quando lavoravo per il locale Middlesex County procuratore distrettuale di ufficio, forensics fare il lavoro. Quindi, in sostanza, il Massachusetts Polizia di Stato, in occasione, quando si lavora su casi sarebbe portare a cose come hard disk e floppy disk e schede di memoria e simili. E li avrebbero portata di mano a me e il mio mentore, e il nostro obiettivo era quello di trovare le prove, se c'era, su questi terreni. Ora, potreste aver visto scorci di questo mondo di medicina legale nei media, TV e film. Ma il lavoro che ho avuto, e Oserei dire che il mondo, non è abbastanza come volete vederlo. Diamo un'occhiata a ciò che probabilmente avete visto. [RIPRODUZIONE VIDEO] -OK. Ora, mettiamoci una buona occhiata a voi. [GIOCO MUSICA] -hold Esso. Eseguire che indietro. -wait Un minuto. Andate a destra. -Ci. Congelare tale. Full-screen. -OK. Congelare tale. -Tighten Su quella, vero? -vector In esso ragazzo dalla ruota posteriore. -zoom In proprio qui su questo luogo. -Con La giusta attrezzatura, il l'immagine può essere ingrandita e affilata. -Che È? -È Un programma di miglioramento. -Puoi Chiaro che qualsiasi? -Non Lo so. Facciamo valorizzarlo. -e La valorizzazione Sezione A6. Ho migliorato il dettaglio, e-- -I Credo che ci sia sufficiente a migliorare. Rilasciare al mio schermo. -I Migliorato la riflessione nel suo occhio. -Let Gestito questo attraverso correzione video. -Edgar, Si può migliorare questo? -hang Su. -Ho Lavorato su questa riflessione. La riflessione di qualcun -Ci. -Reflection. -C'è Un riflesso del volto dell'uomo. Riflessione -Il! -C'è Una riflessione. -zoom In sullo specchio. Si può vedere un riflesso. -Can A migliorare l'immagine da qui? -Can A migliorare esso? -Can A migliorare esso? -Può Aumentiamo questo? -Can A migliorare esso? -hold Su un secondo. Io Migliora. -zoom In sulla porta. -Times 10. -Zoom. -Muovi In. -Più. -Aspetta, Stop. -Stop. -PAUSE Esso. Ci -rotate 75 gradi attorno alla verticale, per favore. -Stop. Torna alla parte sulla porta di nuovo. -Got Intensificatore di immagine che può bitmap? -Forse Possiamo usare il Pradeep Singh metodo per vedere le vetrine. -Il Software è lo stato dell'arte. -Il Autovalore è spento. -Con Destra combinazione di algorithms-- Preso l'illuminazione di -Lui algoritmi per il livello successivo, e io li posso usare per migliorare questa fotografia. -lock Su e ingrandire l'asse z. -e La valorizzazione. Migliora. -e La valorizzazione. -Freeze E migliorare. [FINE RIPRODUZIONE VIDEO] DAVID J. MALAN: Così quelli sono tutte le parole, ma non erano utilizzato in frasi correttamente. E infatti, in futuro, in qualsiasi momento, per favore, si sente qualcuno dire la parola, "Migliorare" risatina solo un po '. Perché quando si tenta di migliorare, per esempio, questo è ciò che accade. Quindi, ecco una foto bellissima. Questo è proprio Daven del CS50. E supponiamo che volevamo concentrarsi sulla scintillio negli occhi, o la riflessione della cattivo ragazzo che era chiaramente catturata dalla telecamera di sicurezza. Questo è ciò che accade quando si ingrandisce un'immagine che ha solo un numero finito di bit ad esso associati. Questo è ciò che si ottiene. E infatti, negli occhi di Daven è ma quattro, forse sei pixel che compongono esattamente quello è stato scintillante lì. Così Problema Set Quattro infine avrà esplorare questo mondo, in particolare dalla natura di qualcosa noi chiamiamo il file I / O, dove I / O è solo un modo elegante di dicendo ingresso e uscita. Quindi finora, tutte le interazioni abbiamo avuto con un computer sono stati in gran parte con il tastiera e lo schermo, ma non tanto con il disco rigido, o il salvataggio di file oltre quelli che te scrivere. I vostri programmi finora hanno non state creando e salvando, e aggiornare i propri file. Beh, che cosa è un file? Beh, qualcosa come un JPEG. Questa è l'immagine che si potrebbe avere o caricare su Facebook, o consultare ovunque sul web. In effetti, quella foto che abbiamo appena sega di Daven era un JPEG. E cosa c'è di interessante sui file come JPEG è che possono essere identificati, in genere, da certi schemi di bit. In altre parole, cos'è che distingue un JPEG da una GIF da un PING da un Word documento da un file di Excel? Beh, è ​​solo diverso pattern di bit. E quei diversi modelli sono solitamente all'inizio di tali file. In modo che quando il computer si apre una Parola doc, o quando un computer si apre un file JPEG, sembra tipicamente alla prime più bit nel file. E se riconosce un modello, si dice, oh, questa è l'immagine. Permettetemi lo mostro a l'utente come un grafico. In alternativa, oh, questo appare come un documento di Word. Mi permetta di mostrare all'utente come un saggio. Così, per esempio, JPEG, si scopre, sono abbastanza sofisticato sotto la cappa. Ma i primi tre byte in più ogni JPEG iniziare con questi tre numeri. Così byte zero, uno e due sono, in più ogni JPEG, 255, allora il numero 216, poi il numero 255. E che cosa sarete in grado per iniziare a fare la prossima settimana è in realtà frugando sotto la cappa di file come file JPEG e come file bitmap, e vedendo quello che è sempre stato lì per tutto il tempo come sei stato utilizzando un computer. Ma ciò che è non vi è in genere scritto come numeri decimali come questo. Gli informatici non lo fanno tendono a parlare in decimale. Essi in realtà non parlano in binario. In genere, quando vogliamo per esprimere i numeri, abbiamo effettivamente utilizziamo esadecimale, che si può ricordare da, diciamo, Problem Set Uno, che ha sfidato a pensare a un sistema diverso. Noi, naturalmente, conosciamo con decimali, da zero a nove. Abbiamo parlato di binario. E in realtà non abbiamo utilizzare più di tanto qui in avanti, perché i computer che utilizzeranno. Ma i programmatori sarà molto spesso, ma non sempre, utilizzare esadecimale, che significa semplicemente si hanno 16 lettere nel vostro alfabeto, al contrario di due o 10. Così come si conta di più alto di nove in esadecimale? Si va 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, solo per convenzione. Ma ciò che è fondamentale è che ogni di questi è un unico simbolo. Non esiste 10. Non c'è 11, di per sé, poiché ogni delle vostre cifre, proprio come in decimale e proprio come in binario, dovrebbe solo essere un singolo carattere, per convenzione. In modo che poi è l'alfabeto che abbiamo a nostra disposizione per esadecimale. Che cosa fa un JPEG apparire come se si dovevano scrivere quelle prime tre Non byte come decimale, ma, per esempio, come esadecimale? E perché è hex anche tutto ciò che è utile? Beh, un rapido sguardo a un esempio. Quindi se scrivo i bit che rappresentare questi numbers-- decimale questo potrebbe essere un po 'arrugginito ormai da un paio di settimane fa, ma la sinistra e la quello di destra è abbastanza facile. 255 era il numero più grande che potrebbe rappresentare con otto bit. Era tutti quelli. Quindi l'unico che è leggermente interessante è quella centrale. E se i tipi di fate fuori del matematica, si deduce che, in effetti, quel modello di uno e zeri rappresenta 216. Così facciamo solo per stipulare ora che questi sono corretti. Ma perché è interessante? Ebbene, un byte, naturalmente, è di otto bit. E si scopre che se si pensa di un byte come due blocchi di quattro bit, come questo. Vorrei solo aggiungere un po 'di spazio. Quindi, prima, dopo. Ho appena aggiunto un po 'di spazio bianco per l'amor di visualizzazione qui. Come possiamo ora rappresentare, per esempio, esadecimale ogni quad di bit, ogni serie di quattro bit? Così, per esempio, a sinistra Ora, noi abbiamo 1111 in binario. Qual è quel numero in decimale, se fate la matematica? Hai il posto quelli, il posto due, il posto a quattro zampe, e il luogo otto. PUBBLICO: 15. DAVID J. MALAN: E '15. Quindi, se facciamo otto più quattro più due più uno, otteniamo 15. Così ho potuto scrivere le 15 di seguito 1111, ma il punto qui è esadecimale, non decimale. Così, invece di scrivere 15, 1-5, Ho intenzione di scrivere che in esadecimale, che se si pensa di nuovo, se si dispone di zero a f, ciò che è 15 sarà? PUBBLICO: f. DAVID J. MALAN: Così si scopre che di f. E si può lavorare che col dire, bene, se a è 10, quindi OK, f è 15. Così in effetti, potremmo riscrivere la stessa serie di numeri come f f. E poi se facciamo un po 'di matematica, ci deduciamo che questo è d. Otto è abbastanza facile, perché noi avere uno nel posto otto. E poi, abbiamo un altro paio di f f. Così che cosa gli esseri umani tendono a fare per convenzione quando usano esadecimale è semplicemente scrivere questo un po 'più succintamente, sbarazzarsi della maggior parte di quello spazio bianco. E tanto per essere super chiaro a lettori che questa è esadecimale, la semplice convenzione tra esseri umani è che si scrivono a zero x, che non ha significato altro di un identificatore visivo di, ecco che arriva un numero esadecimale. E poi, mettete le due cifre, f f in questo caso, allora d un, allora f f. Quindi, per farla breve, esadecimale tende solo essere utile perché ciascuno dei suoi cifre, zero attraverso f, perfettamente linee con un pattern di quattro bit. Quindi, se avete due cifre esadecimali, zero a F, ancora e ancora, che ti dà perfettamente otto bit o un byte. Ecco perché esso tende a essere convenzionalmente utile. Non c'è intellettuale contenuto davvero oltre che, altro che la sua effettiva utilità. Ora JPEG non sono l'unica formati di file per la grafica. Si potrebbe ricordare che ci sono i file di questo tipo nel mondo, almeno da un paio di anni fa. Quindi questo era in realtà installato in Windows XP su milioni di PC in tutto il mondo. E questo era un file bitmap, BMP. E un file bitmap, come vedrete prossimo settimana, significa semplicemente un modello di punti, pixel come si chiamano, Una mappa in bit, davvero. Così che cosa interessante, però, su questo formato di file, BMP, è che sotto il cofano, ha più di soli tre byte che compongono la sua intestazione, in modo a parlare, i primi morsi. In realtà sembra un po ' complicato a prima vista. E vedrete questo nel set P. E ottenere qualcosa particolare da questa ora non è così importante, in quanto solo il fatto che all'inizio di ogni bitmap file, un formato grafico, c'è un sacco di numeri. Ora Microsoft, il autore di questo formato, tende a chiamare gli Le cose non interi e caratteri e carri, ma le parole e le d parole e anela e byte. Quindi sono solo diversi tipi di dati. Sono nomi diversi per la stessa cosa. Ma vedrai che in P Set Four. Ma questo è solo per dire che se un umano doppio-clic qualche file BMP sul suo o il suo hard disk, e una finestra si apre up che mostra lui o lei che l'immagine, quello che è successo perché il funzionamento sistema presumibilmente notato non solo l'estensione del file BMP nel nome del file, ma anche il fatto che c'è una certa convenzione per il modello di bit all'inizio di quel file bitmap. Ma andiamo ora concentriamoci su un file complicata, ma invece su qualcosa di simile. Supponiamo qui in gedit, I basta avere gli inizi di un programma che è abbastanza semplice. Ho avuto qualche intende cima. Ora ho #include "structs.h", ma Tornerò a che in un attimo. Ma questo è utile per ora. Quindi questo è un programma che sta per implementare come database del registrar. Quindi un database di studenti, e ogni studente nel mondo ha un nome e una casa e, probabilmente, un po ' altre cose, ma noi terremo le cose semplici. Ogni studente ha un nome e una casa. Quindi, se volessi scrivere un programma il cui scopo nella vita era solo per scorrere da zero, su un massimo di tre, se ci sono tre studenti presso la Harvard University. E voglio solo per ottenere, utilizzando GetString, il nome e la casa di ogni studente, e poi basta stampare quelli fuori. Questo è un po 'come Settimana One, Two Week roba adesso, dove voglio solo una per loop o qualcosa del genere. E voglio chiamare GetString alcuni tempi, e quindi stampare f un paio di volte. Quindi, come potrei fare questo, però, quando sia un nome e una casa sono coinvolti per ogni studente? Quindi il mio primo istinto potrebbe essere quello di fare qualcosa di simile. Potrei dire prima, bene, dammi, dire, un array di stringhe chiamati nomi. E io non voglio un hardcode tre qui. Cosa voglio mettere lì? Così gli studenti, perché questo è solo una costante dichiarata in alto, solo così io non devo hardcode tre in più luoghi. In questo modo, posso cambiarlo un unico luogo, e colpisce un cambiamento in tutto il mondo. E poi, potrei fare stringa ospita STUDENTI. E ora, potrei fare qualcosa di simile for (int i = 0; i