Controllare i file con VirusTotal in AutoIt

In questa sezione del forum si parla di sicurezza, soluzioni antivirus, firewall, problematiche relative a malware in generale

Moderatore: Staff forum IlSoftware.it

wargus
Beginner Software
Beginner Software
Messaggi: 33
Iscritto il: 17 feb 2012 11:23

Controllare i file con VirusTotal in AutoIt

Messaggioda wargus » 17 feb 2012 11:41

Ciao a tutti,
apro questo topic in seguito a una richiesta di Michele conseguente un mio commento al suo articolo "Controllare automaticamente con VirusTotal tutti i file che vengono scaricati" (qui: http://www.ilsoftware.it/articoli.asp?id=8273).
Effettivamente non conoscevo la possibilità di interrogare il database di VirusTotal attraverso l'hash di un file (grazie Michele :approvato:) e devo dire che si tratta di una possibilità estremamente interessante, soprattutto per chi come me si trova spesso a smanettare con vari pacchetti di file dal contenuto a volte un po' ambiguo :oops:. Pur avendo un antivirus efficace, in questi casi è sempre opportuno avere un secondo parere e i servizi di VirusTotal in questo senso sono ottimi. Sfortunatamente, l'efficente script vbs presentato da Michele non si adeguava alle mie necessità, visto che più che di un programma che monitorasse costantemente una cartella avevo bisogno di qualcosa che mi permettesse di consultare il database di VirusTotal on-demand, sottoponendogli uno o più file da testare (o meglio ancora l'intero contenuto di una cartella, magari contenente proprio i file estratti da un archivio compresso). Così ho deciso di provare a scrivere con AutoIt (http://www.autoitscript.com/autoit3), un linguaggio di scripting simile al Visual Basic, il programmino che mi serviva.
Il risultato, per adesso ancora piuttosto grezzo e in fase di definizione e ottimizzazione, è quello che presento qui.

L'archivio zip allegato (vedere in fondo al messaggio) contiene una copia compilata di VirusTotal.exe, l'eseguibile del programma e all'interno della cartella source i file au3 con il sorgente diffusamente annotato (particolarmente: VirusTotal.au3 è il sorgente della routine principale del programma mentre SHA1.au3 e HASHES.au3 sono le librerie per l'hash del file; ho omesso solo il file IE.au3 che viene distribuito normalmente con qualunque pacchetto di AutoIt).

Che cosa si può fare con il programma e come utilizzarlo:
Fondamentalmente il programma lavora alla stessa maniera dello script presentato da Michele: esegue l'hash di uno o più file e lo sottopone a VirusTotal mostrando all'utente il risultato della scansione antivirus. La differenza sostanziale è che invece di lavorare in background e monitorare tutti i file che di volta in volta vengono salvati all'interno di una cartella specifica, il mio programma viene attivato manualmente dall'utente quando se ne presenta la necessità attraverso il menu contestuale di Windows (tasto destro del mouse > Invia a > VirusTotal).

Utilizzarlo è semplice: prima di tutto è necessario estrarre dal file zip l'eseguibile VirusTotal.exe e salvarlo in una cartella (per esempio C:\virustotal), poi occorre creare un collegamento a questo file (dopo aver selezionato il file VirusTotal.exe, bisogna fare clic col tasto destro del mouse e nel menu contestuale di Windows selezionare la voce "Crea collegamento"). Questo collegamento andrà posto all'interno della cartella C:\Users\<NOME UTENTE>\AppData\Roaming\Microsoft\Windows\SendTo (dove al posto di <NOME UTENTE> ovviamente ci sarà il nome dell'utente con cui si accede al computer) e rinominato in VirusTotal (o come più vi piace). In questo modo il programma VirusTotal sarà presente all'interno del menu contestuale di Windows alla voce "Invia a".
Per avviare l'analisi di uno più file si procede così: in una finestra di Esplora Risorse si selezionano i file da analizzare con VirusTotal, poi cliccando col tasto destro del mouse si attiva il menu contestuale e si seleziona la voce Invia a > Virus Total. Il programma si occuperà di produrre l'hash del/dei file, interrogherà VirusTotal e mostrerà una finestra col risultato per ogni file analizzato (il risultato potrà essere: positivo, quando uno o più motori di scansione hanno riconosciuto il file come nocivo; negativo, quando nessun motore di scansione ha riconosciuto il file come nocivo; oppure file non trovato nel caso in cui l'hash del file non sia presente nel database di VirusTotal).

Il programma gira su Windows 7, ma non dovrebbe aver problemi neanche su XP o Vista.

Ulteriori e successivi sviluppi a cui lavorerò prossimamente:
- ottimizzazione del codice
- autoscansione di una o più cartelle selezionate da una finestra di Esplora Risorse (tutti i file inseriti all'interno di una cartella passata al programma verranno listati e inviati a VirusTotal)
- una GUI per rendere più rapida e meno uggiosa la visualizzazione dei risultati (con numerosi file analizzati il continuo aprirsi di finestre può risultare fastidioso)

Vorrei precisare che lo sviluppo di questo programma è stato reso possibile soprattutto da coloro che frequentano i forum di AutoIt (http://www.autoitscript.com/forum) e che favoriscono lo sviluppo di questo linguaggio di scripting integrandolo coi loro contributi. Il mio codice utilizza vaste porzioni prese da numerosi esempi postati sul forum da svariati utenti. A tutti costoro, conosciuti e sconosciuti, va il mio grazie.

Nel caso in cui a qualcuno interessasse discutere dettagli del sorgente in questo forum posso postare il codice. Ovviamente resto disponibile per qualsiasi aiuto, chiarimento, suggerimento o altro.

L'archivio zip contenente l'eseguibile e il sorgente di VirusTotal è disponibile qui http://ifile.it/j8nuv1m (361 kb).

Grazie, Andrea

Avatar utente
wio
Active Software Plus
Active Software Plus
Messaggi: 875
Iscritto il: 05 gen 2010 19:32

Re: Controllare i file con VirusTotal in AutoIt

Messaggioda wio » 17 feb 2012 13:10

..ma non è la stessa cosa che fà questa applicazione di VirusTotal ?? > https://www.virustotal.com/documentatio ... lications/
....chi vuol esser lieto .... sia.

wargus
Beginner Software
Beginner Software
Messaggi: 33
Iscritto il: 17 feb 2012 11:23

Re: Controllare i file con VirusTotal in AutoIt

Messaggioda wargus » 17 feb 2012 13:50

Ciao, wio, grazie dell'interessamento.
..ma non è la stessa cosa che fà questa applicazione di VirusTotal ?? > https://www.virustotal.com/documentatio ... lications/
Beh, non proprio.
Intanto con VirusTotal Uploader tu puoi inviare un file (e non un hash) a VirusTotal, purché il file in questione sia inferiore a 32 MB, come puoi vedere anche dalla pagina che mi hai linkato (After installing it, you can simply right-click any file under 32MB and choose VirusTotal from the Send To Windows menu). In sostanza è esattamente la stessa cosa che puoi fare dal browser (qui: https://www.virustotal.com/) con la differenza di avere, invece del browser, una menu utility forse più comoda da usare. Ovviamente inviando la firma di hash di un file invece del file stesso, si ha il vantaggio di non dover sottostare a limitazioni relative alla dimensione del file.
Poi, last but not least, si trattava di mostrare come attraverso l'uso di linguaggi di scripting tutto sommato facili da apprendere e gestire, sia possibile automatizzare alcune semplici operazioni e scrivere dei pezzi di codice flessibili, che con alcune variazioni consentano di venire incontro alle diverse esigenze dei singoli.

Ciao, andrea

Avatar utente
Michele Nasi
Direttore IlSoftware.it
Direttore IlSoftware.it
Messaggi: 10122
Iscritto il: 26 ago 2000 15:35
Località: Arezzo
Contatta:

Re: Controllare i file con VirusTotal in AutoIt

Messaggioda Michele Nasi » 17 feb 2012 14:44

Intanto, i miei complimenti. Ti chiedo se fossi d'accordo a pubblicare il tuo lavoro, su IlSoftware.it, sotto forma di articolo.
Saresti così gentile da pubblicare anche il codice sorgente?

@wio: ti suggerisco di leggere anche l'articolo seguente: http://www.ilsoftware.it/articoli.asp?id=8273" onclick="window.open(this.href);return false; Come giustamente osservato anche da wargus, la mia idea era quella di creare un meccanismo che, velocemente, potesse controllare in background i file che vengono via a via salvati in una cartella su disco interpellando VirusTotal. L'uploader di VirusTotal non risolve questo problema ma si limita ad effettuare il caricamento di file sul servizio di controllo online.

wargus
Beginner Software
Beginner Software
Messaggi: 33
Iscritto il: 17 feb 2012 11:23

Re: Controllare i file con VirusTotal in AutoIt

Messaggioda wargus » 17 feb 2012 15:22

Intanto, i miei complimenti. Ti chiedo se fossi d'accordo a pubblicare il tuo lavoro, su IlSoftware.it, sotto forma di articolo.
Grazie. Certo, se vuoi.
Saresti così gentile da pubblicare anche il codice sorgente?
Ecco il codice (i testi preceduti da ; sono commenti):

Codice: Seleziona tutto

#include <IE.au3>
#include "HASHES.au3"
#include "SHA1.au3"

#NoTrayIcon

Global $sVTr = -2, $oIE, $sText, $srx, $sre, $msg, $aFile, $fHash

If $CMDLine[0] > 0 Then

For $i = 1 To $CMDLine[0] ;loop attraverso l'array dei file selezionati via menu contestuale

If Ping("www.virustotal.com") = 0 Then ;la connessione a internet è assente o il sito è irraggiungibile
_SetErrorMSG(0, "") ;ritorna un messaggio d'errore e esce dall'applicazione
Exit
Else

$aFile = FileGetLongName($CMDLine[$i]) ;percorso completo del file da analizzare
$fHash = _MakeHashFile($aFile) ;ritorna l'hash (SHA1) del file

If StringLen($fHash) <> 40 Then ;l'hash del file non è corretto
_SetErrorMSG(1, $aFile) ;ritorna un messaggio d'errore e passa al file successivo (se presente)
Else

;:::: CONTATTA IL SITO VIRUSTOTAL PER L'ANALISI DELL'HASH DEL FILE
$oIE = _IECreate("https://www.virustotal.com/latest-scan/" & $fHash, 0, 0) ;crea un'istanza di IE per l'interrogazione del database di VirusTotal
$sText = _IEBodyReadText($oIE) ;recupera il testo del report di VirusTotal

;:::: VERIFICA IL REPORT DI VIRUSTOTAL
If StringInStr($sText, "File not found") = 0 Then ;l'hash del file è presente nel database di VirusTotal
$srx = StringRegExp($sText, 'Detection ratio:(?:\r\n)+(.*?)(\r\n)', 1) ;recupera la stringa indicante la detection ratio (nn / nn)
$sre = StringRegExp($srx[0], '\d+', 1) ;stringa il numero dei report positivi (da xx / yy a xx)
$sVTr = Number($sre[0]) ;numero dei report positivi
Else ;l'hash del file non è presente nel database di VirusTotal
$sVTr = -1
EndIf

;::::: INFORMA L'UTENTE DEL RISULTATO DEL REPORT DI VIRUSTOTAL
If $sVTr > 0 Then ;report positivo
$msg = "Rapporti positivi: " & $srx[0]
If $sVTr = 1 then $msg = "È possibile che si tratti di un falso positivo dal momento che un solo motore di scansione antivirus ha indicato il file come potenzialmente dannoso."
MsgBox(0, "VIRUSTOTAL REPORT", $aFile & ": il file è stato rilevato da VirusTotal come nocivo." & @CRLF & $msg & @CRLF)
ElseIf $sVTr = -1 Then ;file non trovato
MsgBox(0, "VIRUSTOTAL REPORT", $aFile & ": file non trovato.")
ElseIf $sVTr = 0 Then ;report negativo
MsgBox(0, "VIRUSTOTAL REPORT", $aFile & ": nessun report per il file.")
Else
_SetErrorMSG(2, $aFile)
EndIf

_IEQuit($oIE) ;chiude l'istanza di IE precedentemente creata
$sVTr = -2
EndIf
EndIf

Next

EndIf

Func _MakeHashFile($Filename) ;provvede l'hash (SHA1) del file da analizzare
Local $BufferSize = 0x100000
If $Filename <> "" Then
Local $State = _HashInit(Eval('_HASH_SHA1'))
Local $FileHandle = FileOpen($Filename, 16)
For $i = 1 To Ceiling(FileGetSize($Filename) / $BufferSize)
_HashInput($State, FileRead($FileHandle, $BufferSize))
Next
Local $Hash = StringTrimLeft(_HashResult($State), 2)
FileClose($FileHandle)
Return $Hash
Else
Return 0
EndIf
EndFunc

Func _SetErrorMSG($n, $f) ;messaggi d'errore
Local $eMsg[3][2] = [[48, "Il sito di VirusTotal non risponde. Verificare la connessione internet o riprovare più tardi."], _
[16, $f & ": impossibile ottenere l'hash del file."],[16, $f & ": errore interno"]]
MsgBox($eMsg[$n][0], "VIRUSTOTAL ERRORE", $eMsg[$n][1])
EndFunc
Ometto HASHES.au3 e SHA1.au3 che sono frutto del lavoro di Ward, utente del forum di AutoIt (la discussione è qui: http://www.autoitscript.com/forum/topic ... %20%20code).

Avatar utente
Michele Nasi
Direttore IlSoftware.it
Direttore IlSoftware.it
Messaggi: 10122
Iscritto il: 26 ago 2000 15:35
Località: Arezzo
Contatta:

Re: Controllare i file con VirusTotal in AutoIt

Messaggioda Michele Nasi » 17 feb 2012 16:30

Bravo wargus! Sulla recensione della tua applicazione AutoIt lavorerò di sicuro nei prossimi giorni.
Ottimo lavoro... e pubblica pure qui tutti gli eventuali aggiornamenti :approvato:

wargus
Beginner Software
Beginner Software
Messaggi: 33
Iscritto il: 17 feb 2012 11:23

Re: Controllare i file con VirusTotal in AutoIt

Messaggioda wargus » 18 feb 2012 11:11

Due fix minimali e un cambiamento più grosso: ho deciso di non utilizzare più la libreria di hash di Ward e rimpiazzarla con le cryptlib native di Windows, che forniscono ugualmente il supporto agli algoritmi di hash MD5 e SHA1.
Per spiegare questa decisione dovrò parlare un attimo del funzionamento della libreria di hash di Ward e dunque sarò costretto a fare un discorso un po' più tecnico (cercherò di volgarizzare), che forse non interesserà a tutti, ma purtroppo è necessario.

La funzione di hash di Ward si basa sulla tecnica dell'embed dll, ossia di una libreria dinamica (http://it.wikipedia.org/wiki/Dynamic-link_library), come quelle utilizzate da Windows o da qualunque altro programma per svolgere funzioni di routine, inserita come codice binario all'interno del codice dello script au3.
Per far comprendere meglio quello di cui sto parlando inserisco qui una la parte del codice di SHA1.au3 relativa allo startup (e il buon Ward mi perdonerà per questo):

Codice: Seleziona tutto

Func _SHA1_Startup()
If Not IsDllStruct($_SHA1_CodeBuffer) Then
If @AutoItX64 Then
Local $Code = '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'
$Code &= 'NmTRWrw8RlcuZuyM9LrNJjgQiUoB50txBJnMGzH1khYYmBI4iZYYoqjr0uxqiKLMAquw4h9CY8xZPInlHwntUt9Rb6onNKi6YEbj5kjr2xSsL8XQsUtJ7kVpVc50cfWq/8txJNAwJJQc9ZmO91bcUGTnbOOhGdX/qRbLmChwfD3haZxBz6Rz1ZneUP1J3KlqM5Mc1pvQIaQmvrPucPYzQu+M95YXSP7E2YY0PFVKSUMbGRTTlJDm3YkYaWBAISC5UNolkgzWxDr8oTNAklkfIjA4ArQ0EUETIUQG9QmcdbWmENJQU8dknuMjTGU8N/yi4SjsGUo8dTZFFqwrI0b7ntqczGVFCUncGroMShj11DD2QksgSGznzQz3yV78xGKWjUIh3GTBfBiRVklLwkCOlomYDzIB5VrCRrLJEPqa4uMXLBbxOqs6Ge0a4pCm3Sf5ErzCD+sAaaTqKQbhSgyIqrQxz7Ii1VTLTWLeKrw6MVS275ndybDQKY/EO0HN9cg9PlGYp44FXdBWiiXPWwAG1aV8eE8oQDSa46wAZP0G6JR/RjwJ2BRP7kGjIfgxwWkUaAh2pmlCCeBQzP8lBJkPPE7DJiMk+GuyIwyQuwnoktSJavBy2kFfTFbgi7ViMfCp6egnCfjZl1TYIDoqhMsU/KWQSDLR4KnB5HApAcU0IpZa5SX0RSgJ8KWa+sTn1XoBmsGScijnL6DooSQ4CEW6FJK6JAHHLTraWQ0KTCUlp7sR/wne8qiEfJ6gQjH4RBiqEIpCDUo3a+IWmm56YEnsHDVFbRlr9N1VsDYVY2r1BuAg0oI0Avc8K8T1/kWZdhbNk8QcKVTql7/Uzc0yH0PoHWV4wtNGcv/SJoh2FFojLWsDBQxeWFmhoMSnkaW3LBZBTQco9mGWMZlSwd/JzwOyI+7T5H3LXPfqycZ+goYlhUCia5E7T0VF3wnwW9eAygLLeP9LVyB431LPwy0/Ol4IkhiS14G8Id9paco3Q5R0Hg3WCd6IzyzlAtlSelqUNsti7hlQPmlg0FAoMBWeae7SXoL8FmLKjGbThJz8zxlxO6ARiPk26EokKRo8Ens9iTHDxIqeZExelFETSlc/iUTCgRscixw8OhEqLEI+OJKieExaw2Y+m6hujAuiN2SjkNiOopCfWMpvijQ6CThBcg1oAx0TZXzJpZQKDB0sPJttRSQ996EgPERFoez2EyG5DybNqxAsCb7IGNnC0ePEUFxDDCgcOlBAKyyGsgzKq+oRPkJmq9pfUB9mSMi1CmihSLjoZGQ0fCyHlAwmITCQQUJiIeI/wj48w50haFjp6cI4RAXxSv4T/WL/MJhmyRuhGDyWhQKH5TXwCkcsoWsM4G1I7NiuM5jInhnLQSnp7fJXwLlLBWIn7pQRFEJAKzCRkihixjNGNYK4mmcxzgNGHUVCOCQ8rlP1cRM0Rl1UGUdIIzOTvrrVQRRUNZ9r+GxxlRKNkTDIOE6xt+kWAFY0Sk9XccOO6CcG5ozWDNjLBv6TbPrWuSwwc8RABM6Z0hQQbvI8OTQmkENun6ESMC3wBxzqE+I8R7xKRzglLJpbHEr9NschiyFKv1cTMjiVFjZcNOOKSE9t3UqSWe7RVokwPaKyrRVHosyO/JPhLgcsw6mxs+NA2t9U+Uqucu4dg3BTUMtp/6qFx17J3xQ/x0qucUWQlCqn2R+jEDDii25gTUDMn9JsYj44jwXrQpQt3U0raxNABgQsKWaaLf5BNwHNNergZt4GTPs1WMg9i++F1og5OPzrmjOVKWyJSWLazNNi8aqUJjLSStMgiWErTL3UsiRAIurb0bLuElLSkyVIrwxv5anQ5EZy2k/IUsAJr0HxlgP6jQQD7bW5Lwaq00z1WGBYpF+XTAHoUuO2iIuJx0GIGiimM0yjUBJGjAljIOEEQOkB+0igPmjFQhQRwSKJ3kawS8l4WIDvAo0MCjIB8Tq0ftxnDsqlP/C4tGAhBipIg8QBeFteX11BXMt4CO3lw2owbEmJ1fxUzwrMP5pM5H51QChNhcDBhHFYdF/w5j8XTI15'
$Code &= 'DmS+eJvrDS1JAUBMSIUZ/3RGFN1BifUpyo/G4Tn7dgTt/fe39vGKZ9iG6mqCOIAB7kgp3+iUQAKDDP5Adcgs+s8G4SAw9ugd6nH/rEYqdbqSRyiT8PhIGInXVgjOU99k6ow6IEkF+H92fgePQVjQ4D91R4FmMLLtzED5PuLNyOlE8/noyN98qpBUYCsa+D935MZEQ8A6g8F3XmxBZzJUUAeDJv4BMl5Y3yAww72k0SgpxbJm6DLvkHfrN/D+iGaisHrxNN4BNG0uCgsa6chRkyN9rnhAkKFuWI8d0gQDtSNFZ/SFyQYJq82ePIsU4BkI/ty6YJgRDHZUMrWGhlFeqMcIx+/w8OFj0qSJUN0k/iTyAa3NV7+AkpFWBlPGUzRSy/dC8WEewdP/ROpHxffZ6tIPIdFdDAEJHvgBOEKIDAN2c4o8QbjHSPEaY7iHdQvgKcAx0tR+eCotwqQf9tn2rftAr/bDATC6OFEPhZPPDUDmxwIURpcZBJAWnRTEF6izBekD9sIBwcnzSKuRKppsHFOgiIPiBAF0H8YHwgEahHM4KhrovSUAsENYifaShnrGNw/I9NU4coEsLbgB+gNAawnTFAg3wxIEXqdJde0eXzDGA36NewEfsjfp91ohZscHjefqAkIBqelYoCMQgRIEF0LpURaJD1dZMhIvUiRTgtXRSkVicZIOokromUSzgosjcelAJhtWZJnPBtZAo8H88wqkX17DEETQMqpjhgAA'
Else
Local $Code = 'hhYAAIkA24PsBItEJAjz26DobRThw/vE+cIQwYeRLxwbKIk3eRGKBCcgIZYTCByJCR0PH3xCFYFVV1ZTgEJgiVQkSItyEmZ0DVwJRGxMg2AtZlYIg8Z+DHl77MOjgT1AVD51+j7FEJ/BBHNCXO4mz15YUAxQD8lzBITOMUSA8THRwcsDGyH5A10Q189AzwKNnAsAmXmCWotIBAPNTkRaoEu4f/kzaAhQIzAWBAyNtA6gIYnZYAPIKMHJGyoBzoFgBBICD82NKpQVG0lUAgP6Mcoh2qdlAxkM2CzQ9cEdzRuNwyqLUAxm3lbKSX8gKrw6L2baV/II/hR7F1HvgoOi+ot4EMPOe0o6jYxUIUzQiagM2SHpCAOhDHzRGNHXQir5BhSwgCqcH4ZEXOsNMfMh0wgEv04qFIjPgI08O4tYGPLKzFbLSRChxDMNhk7rIcsI/hx7Hmz+5Ew0QTPzyskxDPysK4bDRNMh+38IOFwdU8cSAesNDyCqG/EhHKLGUAMMbMr33SoQ6n/wzoQrjA3LuMT5MiHZCAOGDGxdSNUbySkHcyiZChtybjIIGzlsTvE3IdEI8gwPRhuBxzmeTCxRyoowxxAxydEzHCtMDse+Z0wwlM1iQEEcGQ2SRNEV58AeDAvS81Dz9TIZTDSRx8kCETk0EuoukXzKezyCKuPJZgoHuDiUzmeZBBgqNk6gqkA8keYJjVSPp+rN8WjDRMjSwjSEwzgw2DHwoOIhyMQMAcfR1SwzuwhECIk8JWq7aQbIHwHvqEMGA84x3iHWfwgydDWi/RHuNKogZTMIKE32iQ+KHxwxCEQ4IsFpoB+8G9DnK4ZJ9bskRNqSy120JsRIYyDmq7UzShiTLHSNi+xQCCE0N43ITzIIqCll3Ywd+YEhZCED+UhGzoHpEhQkIF0iRTDzpZathfEJINaUQyokzSuSRCQk3QcSQssE6kgQkRh0iUAUCAgoTY3yE8yAPi+h6yTZbjokw7CM3zH35M96A6REQMnviQwSFC6RIjyBCCwJvolCeZgfVC5E/eR0iq5aR9YDqkREygjukQgiEOknTkAIIITfiSE8yVZFREtWckn7VPIcJAxdJEzoCBAYm4nkJ5koVESpVGkK0VL77FYKYcXSTCwfkkKKMMQ7q0CS2uZFpE5QyrkboReLoBsVq1AiH0wsMDN4TQmoGUqECEIQRYbyDRNCUhcTJBdMVJAItopIylTM1zVA3Y1i8xIsKAgQDJuN7CTBmbQWTJz6klRCCDEzEEwD8qJGAdaqXWOunxk8MzAytG0PH0dW+Zss5pXxBhuhWjMJlxdENbcpXJKUzjNc8zM1OItAdIWJGBQICBxNjfISYd2M/pmQ3igllVwkM1qfAypGNwHxK/lBnjSVKzxpQQgkHzGkCLGbIAvfneDUC3ohCjcX2Tx+sAWRvJnKNRASRKnpBzDCKhAVMAZ4oesfcxwklGZqXkMzfPpMRVkeRGQfIgkuKDNZTQldWgIIQBIvhJInYph0sTISLHFmMeg5R4k8D3CbFX5zhPfShA3KsMEYqUDwN7LKyIEfw8r4i5UVIJkzKB4C7g/UH1BCCCE4LE7PsRWMD8iSMrTBFkPPM/lHGDePLIlIvsUCCDQSzEz7FXIMz+4KSMJM3qWb4zNAFIMg6suTiLxIMKAIQghZTp9iKoQHRHLXRURxTMjIA/VYiMmB+BIQJBhdIkVAAggoEsxM+xG0NwzHuwjkzzP+MkcMiRQukSI8gQgsCWZMfYmc3hn3IlbIw2yJyIH7FMNu73aFk0qgCEIgWUqfYqVSWRwSDC6SdEoICBhLM0rtzfP6TVbJKqJZakIU/bOaDMRMHLwF3Mkbjws6IqJECWAU3SFy9XjITugxdAQHj1EoAdKWyLeW+qI7RxAhNZHOFhwJBmHNIXp41n7uUMU7NEQ3LJRFREBeysHKO0QMch0Z0xcTCcsz3CF6w8Lr0QWSHDXZyDw8isESyEg7RI5DDXuIMAlm0dwhenjxT+kkT+EHklEYiDM4isEHzkg7HI5DFSLyGUAJwtwhnnraE+qJmTxd'
$Code &= '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'
$Code &= 'h+EDc6TrdBYMX17DV3cQiDAPYrbSDGmNswOZrQh0AwgKKapJCgp19j+S/BBDQIOqX8MAAA=='
EndIf
Local $Opcode = _SHA1_CodeDecompress($Code)
$_SHA1_InitOffset = (StringInStr($Opcode, "89DB") - 3) / 2
$_SHA1_InputOffset = (StringInStr($Opcode, "87DB") - 3) / 2
$_SHA1_ResultOffset = (StringInStr($Opcode, "09DB") - 3) / 2
$Opcode = Binary($Opcode)

$_SHA1_CodeBufferMemory = _MemVirtualAlloc(0, BinaryLen($Opcode), $MEM_COMMIT, $PAGE_EXECUTE_READWRITE)
$_SHA1_CodeBuffer = DllStructCreate("byte[" & BinaryLen($Opcode) & "]", $_SHA1_CodeBufferMemory)
DllStructSetData($_SHA1_CodeBuffer, 1, $Opcode)
OnAutoItExitRegister("_SHA1_Exit")
EndIf
EndFunc
La lunga porzione di caratteri che si vedono sotto la voce "$Code" altro non è la dll che si occupa di calcolare l'hash Sha1 del file di cui gli viene passato il percorso. Per fare questo, lo script AutoIt apre la dll in memoria e questa "al volo" calcola l'hash del file.
Effettivamente esistono delle funzioni di hash (SHA1 non saprei, ma MD5 sicuramente sì) scritte in puro AutoIt, ma AutoIt è soltanto un linguaggio di scripting e lo svolgimento di tutta questa serie di routine richiederebbe, specialmente per file molto grossi, un lasso di tempo abbastanza lungo. Per ovviare a questo si ricorre appunto a una dll, virtualmente esterna (e scritta in un linguaggio di programmazione vero, C ad esempio) ma "embed" nello script, che si occupa di svolgere la routine richiesta (qui l'hash di un file) in un tempo significativamente più breve di quello che impiegherebbe AutoIt.

Purtroppo, la natura stessa di questo metodo talvolta genera dei problemi. Particolarmente può accadere (è successo e presumibilmente tornerà a succedere) che una volta compilato lo script contenente una "embed dll" sia riconosciuto da qualche antivirus come nocivo. Ovviamente si tratta di un falso positivo, dovuto a una cattiva implementazione delle firme virali, perché non c'è alcun virus nella libreria di hash di Ward. Siccome è accaduto anche a me con Antivir di incorrere in questo errore (che è stato segnalato più volte ad Avira come falso positivo, da me o da altri, ma pare che dopo qualche tempo Avira ci ricaschi :nono: ) prima che il problema si ripresenti preferisco cambiare metodo.

Un punto di partenza per approfondire l'embed dll in AutoIt può essere qui: http://www.autoitscript.com/forum/topic ... d%20%20dll

Qui invece la nuova versione di VirusTotal: http://ifile.it/peysaf3

Avatar utente
Michele Nasi
Direttore IlSoftware.it
Direttore IlSoftware.it
Messaggi: 10122
Iscritto il: 26 ago 2000 15:35
Località: Arezzo
Contatta:

Re: Controllare i file con VirusTotal in AutoIt

Messaggioda Michele Nasi » 27 feb 2012 15:23

Ciao wargus,
ho provato le due versioni del software su una macchina virtuale Windows 7.
Non ho ancora verificato il sorgente comunque la prima versione restituisce un errore "subscript used with non-array variable" (line 3326) mentre la seconda credo abbia qualche problema con la libreria cryptlib: Errore: C:\temp: impossibile ottenere l'hash del file.

wargus
Beginner Software
Beginner Software
Messaggi: 33
Iscritto il: 17 feb 2012 11:23

Re: Controllare i file con VirusTotal in AutoIt

Messaggioda wargus » 17 apr 2012 14:24

Scusa se ti rispondo solo ora (sono stato piuttosto occupato).
La seconda versione a me funziona correttamente (su win 7 x64 e su XP). Non capisco il messaggio d'errore, gli hai per caso passato una directory? In questo caso il programma non funziona correttamente, perché così com'è ora non lista i file presenti in una cartella (avrei dovuto implementare la funziona, ma non ho avuto tempo e non l'ho fatto: mea culpa, lo ammetto) e quindi restituisce quel messaggio d'errore. Affinché funzioni correttamente devi passargli uno o più file.

Avatar utente
Michele Nasi
Direttore IlSoftware.it
Direttore IlSoftware.it
Messaggi: 10122
Iscritto il: 26 ago 2000 15:35
Località: Arezzo
Contatta:

Re: Controllare i file con VirusTotal in AutoIt

Messaggioda Michele Nasi » 17 apr 2012 15:37

Sì avevo passato il percorso. :? Mi sono permesso, or ora, di effettuare una modifica sul sorgente in modo che non vengano visualizzati, in sequenza, i vari messagebox ma solo le informazioni più importanti. Ci farò a breve un articolo citandolo anche in questa discussione!
A presto e grazie infinite.

Avatar utente
Michele Nasi
Direttore IlSoftware.it
Direttore IlSoftware.it
Messaggi: 10122
Iscritto il: 26 ago 2000 15:35
Località: Arezzo
Contatta:

Re: Controllare i file con VirusTotal in AutoIt

Messaggioda Michele Nasi » 17 apr 2012 17:15

Ecco qua, appena pubblicato: http://www.ilsoftware.it/articoli.asp?id=8601" onclick="window.open(this.href);return false; Spero ti piaccia :wink: Nell'articolo c'è il link per il download dell'archivio compresso modificato.

wargus
Beginner Software
Beginner Software
Messaggi: 33
Iscritto il: 17 feb 2012 11:23

Re: Controllare i file con VirusTotal in AutoIt

Messaggioda wargus » 17 apr 2012 17:50

Spero ti piaccia :wink:
Grazie molte. Bel lavoro :approvato:
Mi sono permesso, or ora, di effettuare una modifica sul sorgente in modo che non vengano visualizzati, in sequenza, i vari messagebox ma solo le informazioni più importanti.
Sì, hai fatto bene. L'aprirsi di troppe finestre rischiava di essere noioso. Direi che la tua è la soluzione migliore.
Appena ho un minuto di tempo aggiungo la funzionalità per listare automaticamente i file in una cartella (se ti interessa ti mando il link del forum con la discussione: http://www.autoitscript.com/forum/topic ... 18-oct-11/).

Grazie di nuovo e a presto

Avatar utente
Michele Nasi
Direttore IlSoftware.it
Direttore IlSoftware.it
Messaggi: 10122
Iscritto il: 26 ago 2000 15:35
Località: Arezzo
Contatta:

Re: Controllare i file con VirusTotal in AutoIt

Messaggioda Michele Nasi » 18 apr 2012 13:44

Appena ho un minuto di tempo aggiungo la funzionalità per listare automaticamente i file in una cartella (se ti interessa ti mando il link del forum con la discussione: http://www.autoitscript.com/forum/topic ... 18-oct-11/).
Perfetto wargus, grazie :) Io intanto aggiungerei la modifica proposta da Sbronzo di Riace qui:
http://www.ilsoftware.it/forum/viewtopi ... 45#p661745" onclick="window.open(this.href);return false;

Grazie :wink:

wargus
Beginner Software
Beginner Software
Messaggi: 33
Iscritto il: 17 feb 2012 11:23

Re: Controllare i file con VirusTotal in AutoIt

Messaggioda wargus » 18 apr 2012 14:38

Io intanto aggiungerei la modifica proposta da Sbronzo di Riace qui:
http://www.ilsoftware.it/forum/viewtopi ... 45#p661745" onclick="window.open(this.href);return false;
Perfetto. Ottima proposta.
Per quanto riguarda quello che dice Mac89 (l'assenza di messaggi in caso di responso negativo) la mia idea era di sostituire l'attuale message box con una piccola GUI (più che altro per evitare, in caso di molti riscontri positivi, un message box di dimensioni esagerate). Ovviamente non c'è nessun problema a far presentare alla GUI un riepilogo della scansione effettuata, anche nel caso in cui sia completamente negativa.
A breve la funzionalità di scansione di intere cartelle (ho il codice pronto, si tratta di dargli una sistemata).
Grazie a tutti.

Avatar utente
Michele Nasi
Direttore IlSoftware.it
Direttore IlSoftware.it
Messaggi: 10122
Iscritto il: 26 ago 2000 15:35
Località: Arezzo
Contatta:

Re: Controllare i file con VirusTotal in AutoIt

Messaggioda Michele Nasi » 18 apr 2012 14:50

Perfettamente d'accordo sulla GUI: ci avevo pensato, infatti. Bene se fai prima tu, altrimenti ci metto volentieri mano io :wink: