AutoRun in Windows R. Gallo ITIS “A. VOLTA” GUIDONIA Ottobre 2009 Abstract Costruire un Autorun in Windows. VERSIONE PRELIMINARE 1 Premessa Quando con l’uscita di Windows95 gli utenti inserendo un cd nel lettore, una procedura partiva per eseguire un programma registrato su cd, molta fu la meraviglia da parte degli utenti e molti cominciarono a studiare come il sistema operativo riuscisse in una impresa del genere. Fortunatamente realizzare un autorun non é un lavoro complesso, ma un utile esercizio per prendere contatto con le funzionalitá di questo. 2 Casa serve per costruire un Autorun Per realizzare la funzione descritta nella (1), non é sufficiente scrivere un programma. Si devono studiare alcuni componenti del sistema operativo come 1. valore del registro di sistema che abilitá funzione autorun sulle periferiche 2. script di sistema per scrivere istruzioni base contenute in un autorun 3. programma P che viene richiamato da autorun 4. file di supporto per far funzionare il programma P Molte di queste componenti, descrivono caratteristiche particolari di Windows e quindi questa guida é valida per gli autorun che funzionano solo sotto questo sistema. Per Linux o MacOSx non si applica. 2.1 Autorun su CDROM In fase di sviluppo di un autorun si deve risolvere un problema importante. Poiché la periferica che per default ha attivo l’autorun é il cdrom, come si puó fare il debug della nostra procedura senza dover ogni volta scrivere su un 1 cd che in caso di fallimento, risulterebbe poi inutilizzabile? La soluzione sta nell’abilitare la funzione autorun su periferiche diverse dal cdrom, ad esempio su floppy o su pen-drive usb, in modo da avere un supporto magnetico sul quale riscrivere piú volte senza sprecarlo. Per far questo si deve intervenire sul Registro di Sistema, come spiegato nel paragrafo successivo 3 Autorun e il registro di sistema Il sistema operativo Windows conserva tutti i suoi parametri di configurazione in un file registrato nella cartella \windows\system32. Questo file prende il nome di Registro di Sistema. Oltre a conservare i parametri di funzionamento di Windows, il registro conserva anche tutti i valori di configurazione delle applicazioni installate sul PC. Tra questi parametri di configurazione, ve ne sono molti che regolano il funzionamento delle periferiche, la visualizzazione del desktop, la gestione delle finestre etc. Per fare un esempio, i parametri di configurazione del desktop come lo sfondo, i colori, la dimensione dei caratteri, la distanza fra le varie icone, la dimensione dello schermo, sono tutti valori salvati nel registro di sistema. Come detto in (2) anche l’autorun registra i suoi valori nel registro di sistema. Due sono i valori di interesse 1. verificare che autorun sia abilitato nel sistema 2. verificare quale periferica ha l’autorun abilitato Per alcuni utenti la funzione di autorun é fastidiosa quindi non vuole che inserendo il cd nel drive o collegando una pen-drive parta in automatico il programma registrato. Disattivare questa funzione ha poi un peso molto importante per la sicurezza, in quanto il programma che parte potrebbe essere infetto da virus, con tutti i problemi che ció comporta. 3.1 Il Registro di Sistema Per accedere al registro di sistema si usa un programma chiamato regedit. Il registro si presenta sotto forma gerarchica con cinque categorie principali. Alcune categorie sottendono al funzionamento dell’interfaccia con l’utente. Altre forniscono valori per il kernel, la rete, la gestione della memoria e del file system. Il registro di sistema contiene dati molto importanti e sensibili, é quindi ottima norma fare una copia di backup prima di procedere a modifiche. Errate impostazioni del registro portano al malfunzionamento del sistema e, con molta probabilitá, porta alla riformattazione del PC. Ciascuna delle categorie del registro a sua volta si suddivide in altre sezioni e ogni sezione contiene varie chiavi. Le chiavi sono valori binari, esadecimali o stringhe. Le chiavi che ci interessano per l’autorun sono 1. \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Cdrom\AutoRun 2. \HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ \Policies\Explorer\NoDriveTypeAutoRun\ 2 DRIVE-TYPE DRIVE_UNKNOWN DRIVE_NO_ROOT_DIR DRIVE_REMOVABLE DRIVE_FIXED DRIVE_REMOTE DRIVE_CDROM DRIVE_RAMDISK BIT-MASK 1 2 4 8 16 32 64 BIT 0 1 2 3 4 5 6 Table 1: Drive Type Autorun Il valore della prima chiave (AutoRun) indica se é attiva la partenza automatica per il cdrom. La seconda chiave (NoDriveTypeAutoRun) indica quali periferiche hanno autorun attivo. La chiave é di tipo REG_BINARY ed é grande 4 byte. Ogni bit del primo byte formano la cosiddetta maschera (bit-mask) che indica quali periferiche hanno attivo autorun, secondo la tabella (1) Il valore di default é 145d = 91h . Ogni bit posto a 1 indica che quella periferica ha l’autorun disabilitato. Il bit 7 é sempre posto a 1. Si lascia come esercizio stabilire con il valore di 145d quale periferiche hanno l’autorun abilitato 4 Autorun.inf Dopo aver controllato le chiavi di sistema ed esserci assicurati che una periferica magnetica abbia abilitato l’autorun, passiamo ad analizzare il 2 punto del paragrafo (2). Quando il sistema si accorge che una periferica é stata inserita nel drive (ad esempio una pen-drive usb) comunica con questa e poiché l’autorun é attivo, cerca un file particolare che si chiama autorun.inf. In questo file sono scritte poche istruzioni che servono per far partire l’applicazione di nostro interesse. Il file é composto da queste parti 1. defaulticon: percorso e nome file dell’icona da mostrare nel caso icon non sia presente 2. icon: nome file icona presente nulla stessa directory 3. open: percorso e nomefile del programma da far partire 4. shell: percorso e nome file da far partire se si preme il tasto destro del mouse sull’icona della periferica per avere aiuto 5. shell/comm: collegamento, presente nel menu contestuale, al comando shell precedente Un esempio di script per autorun.inf puó essere il seguente. Il file si puó scrivere con editor di testo come notepad, ma quando si salva ricordarsi di dare esattamente il nome autorun.inf (l’estensione é importante). 3 [autorun] icon = readme.bmp OPEN=word documento.doc shell\readit\command=notepad readme.txt shell\readit=Read &Me La periferica con questo autorun mostra l’icona definita nella sezione icon, fa partire il programma word che apre documento.doc e se si preme sul tasto destro sull’icona del drive, viene mostrato il menu ReadMe che se premuto apre il file Readme.txt per dare indicazioni di aiuto. Il file icon.bmp, readme.txt sono registrati sulla periferica; word e notepad sono sul disco rigido, ma il sistema deve conoscere il percorso dove rintracciare i programmi e farli partire. E’ consigliabile, per le prime volte, tenere tutti i file sulla periferica e non complicare la gestione dell’autorun. Un altro esempio di autorun puǿessere [autorun] icon = icon.ico OPEN=index.html In questo caso la sezione open contiene un file html. Il file poiché possiede l’associazione con Internet Explorer o Firefox viene aperto nel browser. Per concludere l’ultimo esempio [autorun] icon = myapp.ico OPEN=.\exe\myapp.exe shell\readit\command=notepad readme.txt shell\readit=Read &Me In questo caso l’autorun fa partire l’applicazione proprietaria presente nella cartella exe della periferica. Se si preme il tasto destro parte notepad che apre readme.txt. In questo caso tutti i file: myapp.ico, myapp.exe, readme.txt sono sviluppati dal programmatore e copiati sulla periferica 5 Programma di partenza L’utente che voglia scrivere una propria applicazione richiamata in autorun, deve gestire diversi aspetti: 1. il programma o il file che parte trova applicazione associata cercando nel pathname 2. l’applicazione associata é giá installata su hard disk 3. l’applicazione é stand-alone su cdrom 4. l’autorun deve funzionare da qualsiasi supporto sul quale é abilitato 4 Nel caso l’intera applicazione possa essere contenuta sul cd, si preferisce scrivere un programma stand-alone che trova sul supporto, tutti i file di dipendenza che servono. Se per altro motivo, come applicazione troppo grande per essere contenuto su un solo cd, file giá installati su hard-disk, specifiche richieste dal prodotto oppure si vuole rendere la procedura piú flessibile, si ricorre a una soluzione diversa. Un piccolo programma sviluppato in VC++ (ma qualunque altro linguaggio va bene) viene richiamato durante l’autorun. Questa applicazione fa da filtro e si occupa di: 1. verifichi quante e quali periferiche sono collegate al sistema (floppies, porte usb, lettori-masterizzatori cdrom/dvd) tramite la API (Application Program Interface) GetDriveType 2. se si deve aprire un file che non sia un exe, trovi l’applicazione associata al file in questione, per esempio (a) index.ppt file di prowerpoint (b) index.htm file aperto in browser (c) index.doc file aperto da word La funzione API usata é FindExecute 3. attivi l’applicazione associata con API ShellExecute passandogli come parametro il file da aprire Per la spiegazione delle API si rimanda all’help MSDN associato al sistema di sviluppo. 5.1 Osservazioni Scrivere il programma-filtro in VC++ offre questi vantaggi. L’applicazione parte su tutti i PC indifferentemente, in quanto i file di dipendenza (ad esempio le API viste in precedenza) sono installate per default nella dir \windows\system32. Al contrario usare un linguaggio diverso puó comportare prima, l’installazione di file di supporto. La funzione ShellExecute accetta in ingresso anche un URL, (collegamento Inet) con relativa azione di apertura della pagina nel browser. 5