Carlo's profileBlog semiserio di CarloPhotosBlogListsMore Tools Help

Blog


    December 27

    Winsock API Hooking in User Mode

     

    Nel post precedente riguardante Orbit Downaloder si è visto come il Grabber di Orbit vada a mappare GrabDll.dll nello spazio di memoria dei processi relativi ad applicativi da monitare con l'obiettivo di porre degli Hook sulle principali api Winsock e quindi sniffare il traffico di rete ed in particolare i download. Bene, in questo post andremo ad analizzare un buon applicativo Open Source in Delphi che fa la stessa cosa: AppSniff. L'autore è tale Blad3 che inizialmente aveva pure un suo spazio sul web (www.blad3.ro) ma ormai purtroppo non ve ne è più traccia. L'applicativo consiste in un eseguibile con interfaccia grafica sul quale verranno visualizzate le connessionin corso (e per ognuna di esse i dati) ed una dll che verrà mappata nello spazio di memoria di tutti i processi (o di un solo precesso a scelta) con l'obiettivo di Hookare le Winsock API e quindi intercettare il traffico di rete di un determinato processo (o eventualmente di tutti quanti ma ci focalizzeremo su un singolo processo giusto per rendere più chiare le questioni che altrimenti si andrebbero ad incasinare a causa dell'insana mole di dati che verrebbe catturata). L'applicativo utilizza come Hook Engine l'ottima MadCodeHook di Mathias Rauen (aka Madshi) : il programma è nato appunto tempa fà nell'ambito di uno dei topic del forum relativo a MadCodeHook 

    Winsock Example Code

    Dico subito che la MadCodeHook è Open Source ma non freeware : in parole povere è a pagamento , le informazioni sulla licenza attualmente in vigore sono reperibili nel topic "Non-commercial MadCodeHook edition dropped" ; in breve

    If you install madCodeHook without having a license, the
    latest installer will give you a special evaluation version,
    which is fully functional, but which only works if you run
    a specific evaluation executable file.

    Di AppSniff ho sia i sorgenti sia gli eseguibili (.exe del programma principale e .dll): tali eseguibili son stati creati con una versione precedente di MadCodeHook che non richiede licenze particolari o presenza di file specifici per la propria esecuzione, quindi un .exe nudo e crudo che prende e và senza vincoli di alcun tipo. Naturalmente per la compilazione dei sorgenti occorre quella specifica versione della MadCodeHook: non sarebbe un problema visto che ce l'ho salvata ma visto che le condizioni son cambiate e visto che mi son creato in proprio una semplicissima Hook Engine allora stavo pensando di riscrivere i sorgenti con la mia Hook Engine e rendere quindi il progetto AppSniff totalmente Open Source; vabè questi però son discorsi che vedremo prossimamente, per adesso consieriamo quello che abbiamo. AppSniff usa anche alcuni pacchetti di componenti Open Source liberamente scaricabili dal web (e con questo ho detto tutto, tradotto diventa "cercate e downloadate").

    Dunque , detto questo facciamo una cosa: vi passo il link all'applicativo (sorgenti e binari)

    AppSniff (Src + Bin)  (copia ed incolla nel Browser)

    apriamo una piccola parentesi tecnica prima di andare ad esaminare una demo di utilizzo di AppSniff: abbiamo i seguenti file

     

    • AppSniff.exe  (programma principale)
    • AppSniffDll.dll  (dll da mappare nello spazio di memoria di un processo per eseguire l'hook sulle winsock nell'ambito del processo in questione)

    AppSniffDll.dll setta Hooks sulle seguenti Winsock api

    • dll: ws2_32.dll ; funzione esportata: listen
    • dll: ws2_32.dll ; funzione esportata: gethostbyname
    • dll: ws2_32.dll ; funzione esportata: closesocket
    • dll: ws2_32.dll ; funzione esportata: send
    • dll: ws2_32.dll ; funzione esportata: WSASend
    • dll: ws2_32.dll ; funzione esportata: recv
    • dll: ws2_32.dll ; funzione esportata: WSARecv
    • dll: ws2_32.dll ; funzione esportata: sendto
    • dll: ws2_32.dll ; funzione esportata: recvfrom

    Bene, ora passiamo ad un esempio pratico e per l'occasione ho deciso di prendere in esame una pagina di YouTube per avvicinarmi il più possibile al meccanismo di funzionamento di Orbit Downloader: più precisamente considereremo il seguente indirizzo

    Compiz Fusion Ubuntu Gutsy 7.10 Cool Effects

    Come Browser ho usato il fedele K-Meleon.

    Procediamo nel modo seguente:

    1) Lanciamo K-Meleon : di default visualizzerà la sua pagina interna di info (quindi nessuna connessione)

    2) Lanciamo AppSniff.exe : menù File -> Inject into Process;
    nella finestra che si apre,selezionare K-Meleon e click sul pulsante Inject. Bene, a questo punto AppSniffDll.dll è mappata nello spazio di memoria di K-Meleon ed ha settato gli Hook sulle Winsock

    3) Digitiamo in K-Meleon l'indirizzo sopra e lanciamo la navigazione: cominceremo a vedere l'aggiunta di voci di connessione nella finestra di AppSniff.exe. Una volta che parte il filmato , possiamo anche stoppare lo sniffing e pure chiudere K-Meleon perchè tanto abbiamo già quello che ci serve.

    Di seguito un pò di immagini per rendere meglio l'idea di quello che ci troviamo davanti (per opportunità di spazio ho tagliato in 2 sottoimmagini ridotte la finestra di AppSniff (che altrimenti non ci sarebbe stata qui sul Blog)

     

     Img1: lista connessioni

     

    Img2: dettagli connessione selezionata in Img1

    Le prime 2 righe di Img2 ci danno le informazioni che ci servono relativamente all'indirizzo del filmato

    GET /get_video?video_id=bvnQE1EAEZY HTTP/1.1

    Host: chi-v225.chi.youtube.com

    L'indirizzo del filmato è quindi:

    http://chi-v225.chi.youtube.com/get_video?video_id=bvnQE1EAEZY

    FLV (binary data) in fondo ci restituisce anche la tipologia di dato scambiato, in questo caso appunto un file FLV (il formato dei video di YouTube)

    Ora facciamo una prova: apriamo K-Meleon e scriviamo l'indirizzo

    Come si può vedere dall'immagine , si apre la finestra di download: settiamo i parametri nel modo seguente

    Nome file --> get_video.flv
    Salva come --> All Files

    Bene, a questo punto parte il download ed alla fine su disco ci ritroveremo il file FLV che è appunto il filmato riprodotto da YouTube. Per riprodurre localmente un file .FLV si può usare il freeware FLVPlayer

    December 25

    Servizi di condivisione: condivisione di presentazioni PowerPoint (slideshows)

     

    Oramai ci sono servizi web di condisione di qualsiasi cosa: sono centinaia i siti che offrono la possibilità di uploadare dei file (rapidshare, divshare, mediafire, filefactory, etc...) diversi sono anche i siti che consentono di uploadare filmati per la loro visione in streaming all'interno della pagine web (Youtube e così via) per non paralre della condivisione di immagini (Tinypic, etc...). Ed in questo contesto di amorosa condivisione si inserisce anche un sito che consente di mettere in condivisione presentazioni Powerpoint da sfogliare direttamente all'interno della pagina web con l'apposito viewer: si tratta di

    http://www.slideshare.net

    Va detto a priori che non è necessario registrarsi e si puà uploadare direttamente da guest ma la registrazione che non costa proprio nulla in termini di tempo (email, username e password ed il gioco è fatto, niente attivazioni dall'indirizzo email, etc...) consente di avere il proprio spazio e quindi trovarsi davanti tutti i documenti uploadati, modificarne le caratteristiche (titolo, descrizione, tags, etc...), in sostanza la propria cartella con le proprie presentazioni. Si possono uploadare file nei seguenti formati

    • ppt, pps: Microsoft PowerPoint
    • odp: OpenOffice Impress 
    • pdf: hmmm ... lo consociamo tutti

    La dimensione massima consentita è di 30 mega. Che dire, ho uploadato per prova un buon documento di recente realizzazione ed inerente Windows Vista. Trattasi di "First Looks: Basic Investigations of Windows Vista", uno slideshow presentato da Lance Mueller al CEIC (Computer and Enterprise Investigations Conference) del 2007. Una volta uploadato, viene anche fornito il codice HTML per poter inserire quel documento all'interno del Viewer (e quindi sfogliabile online) nella propria pagina web. Ed è proprio questo che ho voluto fare: di seguito il documento

     

     Si tratta quindi di un ottimo servizio per pubblicare sul proprio sito o blog (o altro) presentazioni PowerPoint (o equivalentemente OpenOffice Impress).

    December 23

    Download Manager: il mio attaccamento ad OrbitDownloader ed una analisi del suo utilissimo Grabber

    Quando internet era quella del modem a 56K tutto era molto più lento, c'era sicuramente anche molto meno materiale ma la necessità di scaricarsi qualche file era sempre dietro l'angolo. Con una linea che ti và al massimo a 5k al secondo un file dell'ordine di 3 o 4 mega richiede un pò di tempo, figuriamoci file di dimensioni maggiori. La cosa che faceva più arrabbiare era iniziare un download e vedere ad un certo punto la linea che comincia a far cilecca o la connessione al server che si interrompe obbligandoti a riscaricarti tutto da capo. C'era la necessità di un software che potesse gestire i nostri download in una coda e ne consentisse soprattutto il ripristino in caso di interruzione (sempre che il server http da cui si scaricava supportasse il resume). Il software di questo tipo per antonomasia era GetRight. GetRight è ancora uno dei più importanti Downalod Manager; è sempre stato ed è tuttora un software a pagamento (cifre dell'ordine di decine di dollari quindi niente di proibitivo che sia chiaro) anche se comunque è disponibile da scaricare una trial a tempo. Sempre in quei lontani tempi emergeva un'altro software dello stesso tipo che si chiamave Reget : anch'esso esiste tuttora, ha una interfaccia grafica piuttosto accattivante. Una caratteristica dei Download Manager è la loro integrazione con i Browser che si esplica soprattutto nell'estensione del menù di popup: in pratica vengono aggiunte delle voci al menù che si apre col click del pulsante destro del mouse all'interno della pagina web visitata; le voci aggiunte dal Download Manager consentono di aprire maschere piuttosto utili: ad esempio una maschera che raccoglie tutti i link presenti nella pagina in questione con particolare ai link a file. Da 6 mesi a questa parte mi sono affezionato ad un ottimo Download Manager che oltretutto è anche freeware (non Open Source però, .. vabè ci accontentiamo): OrbitDownloader . Ha un sacco di caratteristiche importanti e consente di scaricare tutti i tipi di contenuti multimediali in streaming come ad esempio i video di YouTube o di qualsiasi altro servizio di streaming video, oppure la musica di MySpace e tanto altro (basta andare nella homepage per avere i link a tutti gli esempi possibili ed immaginabili). Naturalmente si integra con tutti i Browser più famosi (Internet Explorer e Mozilla Firefox naturalmente rientrano tra questi).

    Una volta avviato (di default viene messo in autorun inserendo il link nella cartella di Esecuzione Automatica quindi parte in automatico al login) mette una iconcina a forma di cerchio blu con freccia bianca rivolta verso il basso nella System Tray (nei pressi dell'orologio tanto per capirci). La voce di menù Preferences consente di aprire una maschera con le caratteristiche principali di Orbit 

     

    In breve

    Monitor Clipboard consente di tenere sotto monitoraggio le variazioni della Clipboard (il magazzino dove vengono temporaneamente salvati i dati del Copia e Incolla) e se il dato appena inserito corrisponde ad un indirizzo web che punta ad un file allora apre la maschera principale di Orbit per avviare il Download: in pratica se seleziono il testo di un link e faccio copia (o Ctrl C) mi si apre la mascher principale di Orbit per lo scaricamento. Il resto non mi pare che necessiti di tante spiegazioni; si parla in pratica del Browser Monitoring ossia della capacità di Orbit di intercettare gli scaricamenti che si è in procinto di effettuare all'interno del proprio browser ed aprire la maschera principale di orbit per far gestire a lui lo scaircamento in questione. Associato a questo concetto è il concetto di tipologie di file da monitorare per lo scaricamente (Monitor File Types) e viceversa (Do NOT monitor file types): se non è selezioanto nulla allora verranno gestite da Orbit tutte le tipologie di file. Sempre legato a questo concetto è il fatto di disabilitare l'intervento di Orbit nello scaricamento di un file da Browser (allow IE to download if you press Cancel): in pratica tenendo premuto Cancel verrà disabilitato l'intervento di Orbit e tutto funzionerà come in assenza di Orbit (ossia sarà il Browser a scaricare). Sempre collegato a questo concetto è il fatto di definire dei siti sui quali disabilitare l'intervento di Orbit nel download: ad esempio può essere utile con Rapidshare et similia ... Infine c'è la possibilità di definire su quali browser prevedere l'integrazione di Orbit (ad esempio tramite l'aggiunta di voci al menù contestuale) oltre ad Internet Explorer (per il quale l'integrazione è fornita automaticamente): come si può vedere vengono supportati Firefox, Netscape, Opera e Maxthon. La seconda checkbox ossia "Flash/Streaming Media Catcher" equivale alla voce "Enable 'GetIt' button for catching media" nel menù della TrayIcon di Orbit : si tratta in soldoni della possibilità di esporre il pulsantino GetIt all'interno di una pagina web nell'area corrispondente ad un filmato o altro contenuto multimediale: una volta premuto apre il Grabber (eseguibile Grabber.exe):

    Vabè, non mi vorrei dilungare troppo in chiacchere inutili a descrivere funzionalità che sono poi sotto l'occhio di chiunque si installa il programma. Quello che vorrei fare nel seguito è descrivere passo dopo passo la piccola analisi che ho fatto sul Grabber di Orbit: mi piace fare questo tipo di analisi perchè poi un determinato programma diventa il punto di riferimento di una analisi che coinvolge tanti altri concetti interessanti (della serie da cosa nasce cosa). Del resto ho voglia di scrivere un pò e non mi pare il caso di consumare la tastiera per scrivere cose che sono già abbondantemente trattate sul sito di Orbit, tanto meno intasare la Clipboard di Windows in seguito a furiosi copia ed incolla (anche perchè il Copia ed Incolla preferisco lasciarlo a siti ben più blasonati del mio che trascrivono di sana pianta quello detto da altri e così via ...).

    Bene cominciamo anzitutto a dare un'occhiata al contenuto della cartella di installazione di Orbit

    Orbitdm.exe è l'eseguibile prinicipale (quello in Esecuzione Automatica) 

    Orbitnet.exe è l'eseguibile che implementa il servizio p2p di Orbit che consente di cercare il file che si vuole scaricare, anche nella rete di tutti coloro che stanno eseguendo Orbit in quel momento e scaricarlo proprio come in qualsiasi altro sistema p2p (ad esempio Emule, Ares o altro)

    Grab.exe è l'eseguibile che ci interessa di più: è colui che in pratica ci consente di individuare i file corrispondenti a musica o video in streaming per poi scaricarli

    Partiremo da un semplice esempio di utilizzo del Grabber e poi andremo a cercare di capire come funziona.

    Prenderò come esempio un filmato su YouTube e precisamente il seguente

    http://it.youtube.com/watch?v=I8z3IarLAuc

    Niente di trascendentale, si tratta di un demo di utilizzo del grande Altiris Software Virtualization Solution (Altiris SVS) : nel video viene mostrato come installare la Alpha della versione 3 di Mozilla Firefox virtualizzandola su un layer di Altiris SVS (ricordo che si tratta anche di un filmato che risale ad un anno fà). Mi collego con Internet Explorer tanto per cominciare e, una volta aperto il link in questione, se passo col mouse nella finestra che contiene il video mi ritrovo il pulsantino GetIt: lo premo e si apre un Hint (una finestrella con avvertimento)  

    In pratica mi viene detto di fare un refresh della pagina nel browser una volta avviato il Grabber

    premo OK e mi si apre la finestra principale

    a questo punto faccio il refresh della pagina in Internet Explore ed effettivamente il Grabber mi restituisce tra gli altri anche il link diretto al filmato visibile nel player

    seleziono il filmato (get_video.flv) e facendo click su Download mi si apre la pagina principale di Orbit con maschera di salvataggio file.

    Ahh, che bello ho scaricato il filmato. Si tratta di un file .flv riproducibile ad esempio tramite il freeware FLVPlayer.

    A questo punto comincio ad investigare un pò.

    Prima di tutto noto che il Grabber ha la sua iconcina nella System Tray e che è identica a quella associata all'eseguibile principale di Orbit (Orbitdm.exe) solo che il cerchio invece di essere blu è nero. Il menù associato contiene le voci Show (che visualizza la finestra del Grabber) ed Exit (che, come dice il nome, chiude il Grabber). Bene; la prima cosa che mi sono chiesto è se il Grabber fosse implementato in un eseguible differente da Orbitdm.exe, ossia fosse in pratica un programma a se stante. Del resto quell'eseguibile Grab.exe nella cartella di installazione di Orbit è piuttosto esplicito. Togliermi la curiosità è stato un gioco da pivellini. Basta scaricarsi Process Explorer: la barra in alto contiene in fondo un pulsante con un a icona a forma di bersaglio; si preme il mouse sul pulsante in questione e si trascina sopra la finestra del Grabber: al rilascio, Process Explorer avrà selezionato, nella sua lista dei processi, il processo associato. E si tratta infatti del processo Grab.exe creato come processo figlio di Orbitdm.exe. A questo punto chiudo il processo in questione (click su Exit nel menù associato alla TrayIcon corrispondente) e apro il menù dalla Tray Icon di Orbitdm.exe

    uhmmm ... Grab++ mi piace : lo clicko e si apre nuovamente il Grabber. Behh ... sto prendendo pian piano familiarità con Orbit.

    A questo punto mi chiedo una cosa: sarà possibile che il Grabber funzioni anche con altri programmi oltre che con Internet Explorer? basta poco per rendersi conto che il Grabber può funzionare con qualsiasi programma. Dalla sua finestra principale del Grabber basta clickare sul pulsante Action e poi, nel menù che si apre, fare click su Preferences

    fantastico , è possibile selezionare dove consentire al Grabber di fare monitoraggio ed anche soprattutto specificare un programma qualsiasi; visto che uso quasi sempre K-Meleon perchè molto leggero, la scelta è obbligata. Ok, d'ora in poi il Grabber funzionerà anche col fedele K-Meleon.

    A questo punto è arrivato il momento di cercare di capire come funziona il Grabber ossia come fa a raccogliere i link ai file. In passato avevo realizzato un dll che andava ad eseguire api hooking sulle principali API Winsock (api win32 implementate nella dll ws2_32.dll). Le versioni personalizzate delle funzioni in questione , andavano a loggare su file il nome della funzione chiamata ed i valori dei parametri e poi chiamavano la funzione originale. Poi m'ero anche sbizzarrito un pò facendo eseguire delle modifiche ai valori dei parametri, etc... Di pari passo avevo anche realizzato un sistema che bloccava il tentativo di navigazione a determinati siti semplicemente omettendo la chiamata alla funzione originale e facendo restituire codice di errore come output. Questa dll la mappavo nello spazio di memoria del processo di cui volevo analizzare e/o modificare il traffico di rete (tecnica dll injection) ed il gioco era fatto. Per l'API Hooking avevo usato la mia semplice Hook Engine in User Mode all'indirizzo

    http://pasotech.altervista.org/delphi/articolo60.htm

    mentre per la Dll Injection, la teoria esposta agli indirizzi

    http://pasotech.altervista.org/delphi/articolo62.htm

    http://pasotech.altervista.org/delphi/articolo63.htm

    Tornando a noi e tenendo conto di queste esperienze passate, la prima cosa che ho fatto è stata quella di andare a vedere se il Grabber va a mappare una dll nello spazio di memoria dei processi corrispondenti ai programmi da monitorare (vedi figura sopra). Sempre guardando nella cartella di installazione di Orbit ho visto GrabDll.dll: hmmm nome interessante. Ed infatti guardate un pò cosa succede una volta avviato il Grabber

    ebbene si: ci ritroviamo con la GrabDll.dll mappata nello spazio di memoria di K-Meleon; lo stesso vale per qualsiasi altro processo basato su uno dei programmi da monitorare. Provo a chiudere il Grabber (voce Exit dal menù della sua TrayIcon) ed ecco che la GrabDll.dll non risulta più caricata nello sapzio di memoria di K-Meleon e di tutti gli altri processi interessati.

    Abbiamo quindi capito che Grab.exe mappa GrabDll.dll nello spazio di memoria di tutti i processi relativi ai programmi da monitorare; è poi doveroso osservare che GrabDll.dll verrà mappata anche in tutti i processi dello stesso tipo che verranno creati in futuro mentre Grab.exe è in esecuzione.  

    A questo punto il secondo passaggio obbligato era quello di andare a vedere se, come ipotizzato, la dll mette degli hook sulle Winsock. Ho chiuso tutti gli applicativi ed ho lanciato K-Meleon. Per l'analisi ho usato l'ottimo programma GMer: selezionare il Tab Rootkit e premere il pulsante Scan; ho eseguito l'operazione con e senza Grab.exe in esecuzione ed ho notato le seguenti differenze su K-Meleon

    Bellissimo, adesso sappiamo con certezza che la GrabDll.dll mette un hook sulle seguenti funzioni di WS2_32.dll nello spazio di memoria dei processi corrispondenti ai programmi da monitorare

    • connect
    • send
    • WSARecv
    • recv
    • WSASend
    • closesocket
    • WSAConnect

    intercettando queste funzioni, nel momento in cui il Browser monitorato inizia un download (ivi inclusi file video o audio in streaming tipo ad esempio YouTube o MySpace) , GrabDll.dll rileva l'indirizzo web in questione e lo comunica a Grab.exe il quale a sua volta lo inserisce nella lista all'interno della sua finestra principale.

    Bene, a questo punto rimaneva solo un apiccolissima questione: vada per i processi già in esecuzione, ma in che modo Grab.exe rileva la creazione di nuovi processi per poi mappargli GrabDll.dll nel caso in cui corrispondano ai programmi da monitorare? Behh sostanzialmente i casi sono 2: la dll viene mappata in real time usando una delle tante tecniche documentate e stra-documentate, oppure ogni tot secondi Grab.exe scansiona i processi in esecuzione. Nell'articolo Mappare una Dll automaticamente in tutti i processi, ho esposto 2 tecniche semplici ed efficaci per far si che la nostra dll venga mappata in automatico alla creazione di un processo (ivi inclusa la possibilità di effettuare o meno il mapping in relazione al processo); il Grabber potrebbe usare una di queste tecniche, ... bahh... può essere. Hmmmm .... dunque .... sarebbe bello avere un Api Monitor e testarlo sul Grabber: mi metto a ricercare sui motori e cosa ti trovo? Un programma formidabile e Freeware: KaKeeWare Application Monitor . Lo scarico e decido subito di provarlo; il programma è semplicissimo ed efficacissimo: tramite il menù Monitor->Apis (o alternativamente il pulsante con l'icona ad imbuto nella ToolBar) si apre una finestra che consente di selezionare una dll e una o più funzioni esportate dalla dll selezionata; a questo punto il programma ti consente di selezionare un eseguibile ed il gioco è fatto: l'eseguibile varrà lanciato e verrà monitorato l'accesso alle varie dll e le chiamate alle funzioni selezionate in precedenza. La prima cosa che ho voluto fare è stata quella di monitorare le chiamate all'api win32 CreatRemoteThread esportata da Kernel32.dll; questa funzione è il cardine della tecnica di dll injection (anche se è sicura solo nel caso di processi già totalmente inizializzati; ad esempio mappare una dll nello spazio di memoria di un processo creato con la flag CREATE_SUSPENDED conduce spesso e volentieri al crash del processo una volta che viene fatto il Resume del Main thread di quest'ultimo). Anche questa volta ho deciso di mandare in esecuzione solo K-Meleon e di lanciarlo solo dopo l'esecuzione di Grab.exe da parte di KaKeeWare Application Monitor. Risultato? behh, strabiliante ... dopo aver lanciato K-Meleon, grab.exe va a chiamare CreateRemoteThread come documentato dallo screenshot a seguire

     

    Non chiedetemi perchè chiama CreteRemoteThread 2 volte perchè non l'ho capito: in ogni caso è un dato di fatto che dopo l'avvio di K-Meleon chiama CreateRemoteThread e , tenuto conto che questa funzione viene usata spesso e volentieri per Dll Injection, è quindi probabilissimo che venga chiamata appunto per caricare GrabDll.dll nello sapzio di memoria di K-Meleon. Il fatto che sia quindi Grab.exe a mappare GrabDll.dll nei processi relativi ai programmi sotto monitoraggio, esclude a priori che vengano usate le tecniche di cui si è parlato precedentemente. Ora l'unico mio dubbio è: come rileva la creazione del nuovo processo? Ci son tanti modi per rilevare la creazione di procesi sotto Windows ma penso che il buon Orbit non ricorra a nessuno di essi: ho come il presentimento che ogni tot secondi vada a farsi l'elenco dei processi attivi. Nell'articolo Enumerare i processi con l'API Nativa NtQuerysystemInformation sono andato a descrivere come l'API Native (esportata da NtDll.dll) NtQuerySystemInformation sia la funzione chiamata sempre e comunque dal Task Manager di Windows per enumerare i processi in esecuzione. Detto per esteso, questa funzione consente di ottenere tante tipologie di informazione: il primo parametro consente infatti di definire la tipologia di informazione che si vuole ottenere e , nel caso si voglia ottenee l'elenco dei processi in esecuzione, va settato a 5. Bene, facciamo una prova sempre con KaKeeWare Application Monitor di intercettazione delle chiamate a NtQuerySystemInformation da parte di Grab.exe. Risultato? Behh formidabile anche questa volta: si vede chiaramente che Grab.exe chiama NtQuerySystemInformation con il primo parametro settato a 5 (quindi richiesta dell'elenco dei processi in escuzione) ogni 5 secondi.

    Behh a questo punto è chiaro tutto: ogni 5 secondi il Grab.exe ottiene l'elenco dei processi , per ognuno di essi guarda se corrisponde ad uno dei programmi da monitorare ed in caso affermativo gli mappa la GrabDll.dll chiamando l'API Win32 CreateRemoteThread.

    Behh, adesso devo andare a mangiare.

    December 18

    Creazione di Mind Maps: la soluzione Open Source fornita da FreeMind ed il catalogo FireCat (catalogo di plugin "security oriented" per Firefox) come esempio.

     

    Chiunque almeno una volta nella propria vita ha realizzato una Mind Map: una Mind Map come dice il nome è una rappresentazione grafica di concetti vari; si vogliono esprime concetti ed allora si disegna su carta un diagramma con i vari concetti ed i collegamenti tra loro. Ad esempio

    Parlando di diagrammi su carta non può non venirmi in mente il mazzo di diagrammi che m'ero realizzato in 5° Liceo per rappresentare il modello filosofico di Hegel (ricordo tra l'altro che ero anche andato volontario all'interrogazione).

    Per un buon articolo sulle Mind Map e sui concetti annessi e connessi (ivi inclusi software vari) rimando al seguente indirizzo in WikiPedia

    http://en.wikipedia.org/wiki/Mind_map

    Un buon software per la realizzazione di Mind Map è FreeMind; è Open Source in Java e liberamente scaricabile. Son venuto a conoscenza di FreeMind mentre ero in cerca di un pò di plugin per Firefox (più per diletto che per necessità impellente); sono incappato in FireCat (Firefox Catalog of Auditing Extensions) : si tratta di un catalogo di tutti i Plugin per Firefox orientati alla sicurezza (plugin che forniscono informazioni di rete, memorizzazioni di password nelle web form, etc...); il catalogo in questione è stato appunto realizzato con FreeMind: si apre il catalogo con FreeMind ed ecco apparire il diagramma che raggruppa per tipologie e sotto-tipologie i vari plugin; facendo click su un nodo foglia, viene aperto il Browser di default e si viene indirizzati alla pagina web del plugin in questione. FireCat (attualmente alla versione 1.3) è scaricabile all'indirizzo

    http://www.security-database.com/toolswatch/FireCAT-Firefox-Catalog-of,302.html

    come si può notare, oltre ai sorgenti FreeMind (file .mm) è possibile scaricare il diagramma anche nei nei formati PDF, HTML. Il file .mm realizzato con FreeMind non è altro che un semplice file di testo che contiene la struttura del diagramma espressa tramite il formato XML. E' possibile esportare il diagramma anche sotto forma di immagine (JPEG e PNG) oppure in HTML o in altri formati (rimando all'utilizzo diretto del programma per approfondimenti). Il PDF può essere realizzato tranquillamente tramite una stampante virtuale tipo ad esempio PrimoPDF che è liberamente scaricabile dal web.

    Direi che con questo post ho preso 2 piccioni con una fava avendo parlato sia di FreeMind e del mondo dei Mind Map software sia di FireCat che è appunto un interessante catalogo che raccoglie numerosi Plugin "Security Oriented" per Firefox.

    December 17

    Virtualizzazione di sistemi operativi: la strategia rivoluzionaria di MojoPac ossia come lanciare Windows da Windows esattamente come qualsiasi altro applicativo

     

    Che mi interesso di virtualizzazione lo avrete già capito leggendo alcuni miei post: in particolare nel post su VMManager avevo un pò approfitato del contesto per parlare un pò dei vari software di virtualizzazione di sistemi operativi come ad esempio VMWare e Virtual Box. In questo post voglio continuare sulla medesima strada proponendo un applicativo che consente di avere un sistema della famiglia Windows in esecuzione come se fosse un normale eseguibile all'interno della sessione corrente di Windows. So che è un pò difficile capire così in cosa possa consistere ed allora farò un esempio pratico per dimostrare l'utilità di questa specifica situazione. Quante volte sarà capitato a qualcuno che fa il programmatore di trovarsi di fronte ad uno dei suoi programmi sul pc di un'altra persona (ad esempio un cliente) e di rilevare un errore la cui correzione richiede la presenza di sorgenti e compilatore. Bisognerebbe avere dietro un portatile con sopra tutto l'occorrente (ambiente di sviluppo, sorgenti, etc...) per poter effettuare le modifiche e creare l'eseguibile corretto. Poi mi son messo a pensare: magari posso crearmi una Virtual Machine con VMWare, al suo interno installare il software necessario (ad esempio Visual Studio, Delphi, C++ Builder e altro) , i file della Virtual Machine me li copio su un Hard Disk esterno; mi porto dietro l'Hard Disk esterno, lo collego al pc del cliente e lancio la Virtual Machine sul pc in questione tramite VMPlayer; behh, diciamo che non c'è male , bisogna installare VMPlayer (freeware e liberamente scaricabile dal sito di VMWare) sul pc in questione e poi il gioco è fatto. Un'altra soluzione è quella fornita da MojoPac ; è possibile scaricarsi una versione totalmente freeware denominata MojoPac Freedom : si tratta di un eseguibile di 13 Mega quindi niente di problematico. In soldoni il programma prende come riferimento l'installazione di Windows del sistema corrente e crea una nuova installazione in una cartella specifica o più in generale su una periferica di memorizzazione di massa (mass storage drive tipo ad esempio Hard Disk esterno USB oppure una memoria Flash o un IPod) collegata al computer. Nella destinazione verrà creato l'insieme di cartelle e file tipico di una installazione di Windows ossia la cartella "Windows", la cartella "Program Files", etc... Potranno essere copiate impostazioni varie dall'installazione corrente di Windows come ad esempio i preferite di Internet Explorer e Firefox ed anche cartelle e file specifici. In aggiunta a tutta la struttura di cartelle e file tipica di una installazione di Windows, nella cartella di base della destinazione ci ritroveremo anche un piccolo eseguibile di 50 K circa e denominato Start.exe: questo è il fulcro di tutto in quanto lanciando questo eseguibile si aprirà una maschera di login in cui andremo ad inserire username e password (valori precedentemente inseriti in fase di installazione) e clickando poi su login andremo ad avviare l'installazione di Windows appena creata esattamente come se fosse un qualsiasi programma; si potrà passare rapidamente dal sistema guest (ossia l'installazione di Windows creata da MojoPac) ed il sistema host (ossia il sistema Windows già presente) e viceversa con l'ausilio di un semplice tasto di switch presente in una toolbar in alto oppure tramite il menù della TrayIcon di Start.exe presente sia nel sistema Guest e sistema Host. Dal sistema guest si vede il medesimo file system del sistema host e questa è un'altra differenza rispetto ai sistemi classici di virtualizzazione quali VMWare et similia dove il sistema guest è totalmente separato dal sistema host. Sempre sul sito di MojoPac ci sono le sezioni in cui vengono definiti i requisiti di base sia nell'ambito dei sistemi operativi (versioni dalle quali è possibile creare installazioni Windows per MojoPac e da cui è possibile eseguire le medesime) sia dal punto di vista dell'hardware delle periferiche di memorizzazione di massa da usare come destinazione. Se si usa Windows XP (Home/Pro) o Media Center Edition si va sul sicuro: io ad esempio ho fatto la prova con Windows XP Home Edition in Italiano presente sul mio portatile: il risultato è stato un Windows XP Home Edition in Italiano perfettamente funzionante; è da notare il fatto che in ogni caso a prescindere dalla lingua, le cartelle del sistema operativo creato hanno i nomi tipici dell'installazione Inglese ("Program Files", etc...). Un' altra cosa importantissima da sottolineare è che l'hard disk esterno destinazione (o la generica periferica di mass storage collegata via USB come ad esempio un iPod o una memoria flsh) non viene modificato in alcun modo se non tramite l'aggiunta del nuovo sistema operativo: non viene cancellato il materiale già presente oppure formattato, etc... quindi andate ultra-tranquilli. A questo punto si può prendere l'hard disk esterno , portarselo con se, collegarlo a qualsiasi PC con Windows XP (Home/Pro) o Media Center Edition e lanciare Start.exe per loggarsi ed avviare il sistema guest come una qualsiasi altra applicazione. Avrei voluto anche postare un pò di Screenshot poi non trovavo mai la combinazione ideale ed allora ho deciso di lasciare a voi il semplice compito di provare di persona MojoPac anche perchè non vorrei perdere troppo tempo nel delineare quelli che sono dei semplici passaggi di installazione che non richiedono un elevato quoziente intellettivo. Un programma che consiglio vivamente a tutti.