Anti-Virus, Test per batch script

« Older   Newer »
  Share  
iLoad(elseif);
CAT_IMG Posted on 11/11/2012, 10:24     +1   -1




Ciao ragazzi, mi sto fissando con i programmi di sicurezza ed ho deciso di fare una cosa carina.. Un programma che legge se in un file ci sono dei "tag" caratteristici di potenziali malware. Inizialmente utilizzavo il ciclo while al posto del for dato che lo adoro, ma alla fine ho preso spunto da un altro codice altrimenti, per l'utente sarebbe stato noioso chiudere lo script ogni volta.
Il programma come avrete potuto capire è molto semplice ed è in fase beta, credo che farò un decompilatore di linguaggi specifici (se riesco(speriamo)) e poi cercherò delle probabili funzioni "cattive"...


FrontBack - Security Decompiler Team

SecureFile: QUI


Edited by FrontBack - 24/1/2013, 19:06
 
Top
Hpmezzo
CAT_IMG Posted on 11/11/2012, 10:35     -1   +1   -1




Ascolta cosi non va', un ofuscatore del codice può mettere il tuo programma K.O. L'unica cosa veramente possibile è quella di calcolare Hash MD5 di un file e confrontarlo in un database, se esiste allora è una malware, altrimenti è un file pulito. Oppure puoi integrare (mediante API di VirusTotal) una scansione on Cloud, ovvero calcola HASH md5, invia la richiesta tramite API e scarichi la pagina che ti viene proposta, poi vedi la percentuale di "rilevazione", se supera i 5% lo segnali come malware....
CITAZIONE
#include <guiconstantsex.au3>
#include <progressconstants.au3>
#include <crypt.au3>
#include <file.au3>
#include <guilistbox.au3>
#include <guiconstantsex.au3>
#include <windowsconstants.au3>
#include <constants.au3>
#include <sound.au3>
#RequireAdmin
GUISetBkColor(0xE0FFFF)
Opt('MustDeclareVars', 1)
Call ("Example")
Exit
Func Example()
Global $SilentMode
Global $progressbar1, $button, $Database, $wait, $s, $msg, $m , $Scan , $iALG_ID , $file , $TotaleFile , $Progress , $Status ,$count , $A , $line , $Digest , $countA , $HASH , $HASHDB ,$Inf1 , $InfT ,$m , $InfD ,$InfR , $InfI , $animazione , $button1 , $msg1 , $GUI ,$hListBox ,$FADS
Global $Digest , $Digest1 , $Sezione ,$Quarantena , $AzioneIntrapresa , $VerificaEliminazione ,$SilentMode
$Quarantena=@ScriptDir&"\Area51\"
$SilentMode=0
$Inf1=1
$InfT=0
$InfD=0
$InfI=0
$InfR=0
$m = GUIGetMsg()
$GUI=GUICreate("Analyze AntiVirus by Mezzofante Gaetano Emanuele", 470, 500, 250, 100)
$FADS="Calcolo in corso..."
$progressbar1 = GUICtrlCreateProgress(10, 10, 450, 20)
GUICtrlSetColor(-1, 32250)
$button = GUICtrlCreateButton("Start", 10, 160, 200, 25)
GUISetState()
GUICtrlCreateLabel("Sto caricando la lista dei file da scansionare...Per favore attendere!" , 10 ,35 , 4000 , 20) ; first cell 70 width
GUICtrlCreateLabel("Elementi infetti-------------------------------->:"&$InfT , 10 ,55, 4000 , 20) ; first cell 70 width
GUICtrlCreateLabel("Elementi eliminati---------------------------->:"&$InfD , 10 ,75, 4000 , 20) ; first cell 70 width
GUICtrlCreateLabel("Elementi che richiedono il riavvio--->:"&$InfR , 10 ,95, 4000 , 20) ; first cell 70 width
GUICtrlCreateLabel("Elementi ignorati dall'utente------------>:"&$InfI , 10 ,115, 4000 , 20) ; first cell 70 width
GUICtrlCreateLabel("File ancora da scansionare------------>:"&$FADS , 10 ,135, 4000 , 20) ; first cell 70 width

$wait = 20
$s = 0
Do

$msg = GUIGetMsg()
If $msg = $button Then GUICtrlSetData($button, "In attesa di una risposta..")
$hListBox=_GUICtrlListBox_Create($GUI, "=====================================================", 10, 200, 450, 300)
_GUICtrlListBox_InsertString ($hListBox , "Analyze AntiVirus <scansione> "&@HOUR&":"&@MIN)
_GUICtrlListBox_InsertString ($hListBox , "Data:"&@MDAY&"\"&@MON&"\"&@YEAR)
_GUICtrlListBox_InsertString ($hListBox , "Scansione iniziata alle "&@HOUR&":"&@MIN)
_GUICtrlListBox_InsertString ($GUI, "========================================================================================================================")
_GUICtrlListBox_UpdateHScroll($hListBox)
GUICtrlSetData($button, "Interrompi Scansione")
;Script Profilo
RunWait (@ScriptDir&"\Profili\Smart.cmd" , @ScriptDir&"\Scan\" , @SW_HIDE)
; Script Start
$iALG_ID=$CALG_MD5
$file=FileOpen(@ScriptDir&"\Scan\ListaFile.txt", 0)
$TotaleFile=_FileCountLines (@ScriptDir&"\Scan\ListaFile.txt")
FileWriteline (@ScriptDir&"\Scan\ListaFile.txt" , "Totale file :" &$TotaleFile)
$FADS=$TotaleFile
$Progress=100/$TotaleFile
$Status=$Progress
$Status=$Status+$Progress
$count=1
$countA=0
$A=10


For $count=1 to $TotaleFile
$FADS=$FADS-1
$m = GUIGetMsg()
If $m = $button Then call ("Esci")
$line = FileReadLine($file)
If @error = -1 Then ExitLoop
$Status=$Status+$Progress
GUICtrlSetData($progressbar1, $Status)
GUICtrlCreateLabel("Nome File : "&$line , 10 ,35 , 4000 , 20)
GUICtrlCreateLabel("File ancora da scansionare------------>:"&$FADS , 10 ,135, 4000 , 20)
$Digest=_Crypt_HashFile($line,$iALG_ID)
$Sezione=StringRight ($Digest , 32)
$Sezione=StringLeft ($Sezione , 3)
$Sezione=StringLower ($Sezione)

For $countA=1 to $TotaleFile
$HASHDB=IniRead (@ScriptDir&"\Database\"&$Sezione&".avc" , "INDEX" , $Digest , "NOVIRUS")
If $HASHDB="NOVIRUS" then ExitLoop
Call ("Malware")
$InfT=$InfT+$Inf1
GUICtrlCreateLabel("Elementi infetti-------------------------------->:"&$InfT , 10 ,55, 4000 , 20) ; first cell 70 width
ExitLoop
Next
Next

GUICtrlCreateLabel("Totale File Scansionati : "&$TotaleFile , 10 ,35 , 4000 , 20)
GUICtrlSetData($button, "Esci")
sleep (5000)
exit
Until $msg = $GUI_EVENT_CLOSE
EndFunc ;==>Example


Func Esci ()
MsgBox (4096 , "Analyze AntiVirus" , "Scansione annullata!")
if $InfT>0 then MsgBox (4096 , "Analyze AntiVirus" , "Alcune minaccie devono essere ancora debellate!")
Exit
EndFunc

Func Malware ()
FileSetAttrib($line, "-R-A-S")
_GUICtrlListBox_InsertString ($hListBox , "Trovato virus in :"&$line)
if $SilentMode=0 then Call ("OpzioniMalware")
if $SilentMode=1 then FileMove ($line , $Quarantena , 9)
call ($AzioneIntrapresa)
EndFunc


Func CountDelete ()
$VerificaEliminazione=FileExists ($line)
if $VerificaEliminazione=1 then call ("Reboot")
if $VerificaEliminazione=0 then call ("MalwareDebellato")
EndFunc

Func MalwareDebellato ()
_SoundPlay (@ScriptDir&"\Style\Cestino.wav")
$InfD=$InfD+$Inf1
GUICtrlCreateLabel("Elementi eliminati---------------------------->:"&$InfD , 10 ,75, 4000 , 20) ; first cell 70 width
_GUICtrlListBox_InsertString ($hListBox , "Minaccia rimossa con successo:"&$line)
EndFunc

Func Reboot ()
_SoundPlay (@ScriptDir&"\Style\Sound.wav")
DLLCall ("kernel32.dll", "int", "MoveFileEx", "str", $line, "PTR", 0, "int", 5)
MsgBox (4096 , "Info" , "Il file verrà cancellato al prossimo riavvio! Dettagli : "&$line)
$InfR=$InfR+$Inf1
GUICtrlCreateLabel("Elementi che richiedono il riavvio--->:"&$InfR , 10 ,95, 4000 , 20) ; first cell 70 width
_GUICtrlListBox_InsertString ($hListBox , "La seguente minaccia richiede il riavvio:"&$line)
FileWriteLine (@WindowsDir&"\RebootReq.av1" , $line)
EndFunc

Func Ignorato ()
_SoundPlay (@ScriptDir&"\Style\Sound.wav")
FileDelete ("ThreatIgnored.av1")
FileWriteLine (@WindowsDir&"\ThreatIgnored.av1" , $line)
$InfI=$InfI+$Inf1
GUICtrlCreateLabel("Elementi ignorati dall'utente------------>:"&$InfI , 10 ,115, 4000 , 20) ; first cell 70 width
FileWriteLine (@ScriptDir&"\Reporter\ThreatReport.txt" , $line)
_GUICtrlListBox_InsertString ($hListBox , "Elemento infetto ignorato dall'utente:"&$line)
EndFunc

Func OpzioniMalware ()
Opt('MustDeclareVars', 0)
$Timer=20

#Region ### START Koda GUI section ### Form=c:\documents and settings\emanuele\desktop\form1.kxf
$Form1_1 = GUICreate("Analyze", 623, 308, 192, 150, $WS_POPUP, 0)
GUISetBkColor(0xFFFFFF)
$Pic1 = GUICtrlCreatePic("C:\AnalyzeProduct\SAV\I386\Images\TOP.bmp", 0, 0, 620, 36)
$Label1 = GUICtrlCreateLabel("E' stata rilevata una minaccia nel seguente percorso:", 8, 40, 253, 17)
$Input1 = GUICtrlCreateInput("Input1", 8, 64, 601, 21)
$Label2 = GUICtrlCreateLabel("Nome minaccia:", 8, 88, 80, 17)
$Input2 = GUICtrlCreateInput("Input2", 8, 112, 601, 21)
$Label3 = GUICtrlCreateLabel("Cosa desideri fare?", 8, 136, 94, 17)
$Button1 = GUICtrlCreateButton("Sposta la minaccia nell'Area 51 [Quarantena]", 8, 160, 443, 25)
$Button2 = GUICtrlCreateButton("Elimina definitivamente senza passare dalla quarantena", 8, 192, 443, 25)
$Button3 = GUICtrlCreateButton("Ignora e non apportare nessuna modifica al file", 8, 224, 443, 25)
$Label4 = GUICtrlCreateLabel("Opzioni di avviso:", 8, 256, 87, 17)
$Button4 = GUICtrlCreateButton("Per le prossime minacce elimina senza chiedere conferma [Silent Mode]", 8, 272, 443, 25)
GUICtrlSetData ($Input1 , $line)
GUICtrlSetData ($Input2 , $HASHDB)
GUISetState(@SW_SHOW)
_SoundPlay (@ScriptDir&"\Style\Infetto.wav")
#EndRegion ### END Koda GUI section ###



While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE

ExitLoop
Case $Button1
FileMove ($line , $Quarantena , 9)
Global $AzioneIntrapresa="CountDelete"
GUIDelete ($Form1_1)
ExitLoop
Case $Button2
FileDelete ($line)
Global $AzioneIntrapresa="CountDelete"
GUIDelete ($Form1_1)
ExitLoop
Case $Button3
Global $AzioneIntrapresa="Ignorato"
GUIDelete ($Form1_1)
ExitLoop
Case $Button4
Global $AzioneIntrapresa="Quarantena"
Global $SilentMode=1
GUIDelete ($Form1_1)
ExitLoop
EndSwitch


WEnd

EndFunc

Quello che dici tu si può usare solo per i file .bat e per .cmd...

edit by master: messi i spoiler

Edited by »Master - 12/11/2012, 16:09
 
Top
iLoad(elseif);
CAT_IMG Posted on 11/11/2012, 10:37     +1   -1




CITAZIONE (Hpmezzo @ 11/11/2012, 10:35) 
Ascolta cosi non va', un ofuscatore del codice può mettere il tuo programma K.O. L'unica cosa veramente possibile è quella di calcolare Hash MD5 di un file e confrontarlo in un database, se esiste allora è una malware, altrimenti è un file pulito. Oppure puoi integrare (mediante API di VirusTotal) una scansione on Cloud, ovvero calcola HASH md5, invia la richiesta tramite API e scarichi la pagina che ti viene proposta, poi vedi la percentuale di "rilevazione", se supera i 5% lo segnali come malware....

Un solo problema.. Non credo di esserne capace, sarebbe un lavoro troppo complicato; e come ho già detto, è bene usarlo nei file batch.
 
Top
Hpmezzo
CAT_IMG Posted on 11/11/2012, 10:53     +1   -1




Io già ho fatto una cosa del genere veramente. Se vuoi posto i sorgenti tra oggi e domani. magari ti rende l'idea... Guarda il sorgente di un AV, ovviamente il sorgente da solo non funziona, in pratica prima richiama uno script .cmd che mette in un file di testo tutti i file con il relativo percorso, poi legge dalla linea ogni file, e calcola MD5 poi lo confronta e se è un malware chiama una funzione per "trattarlo"

Guarda qui:
http://analyzelab.altervista.org/AFS/AFS_by_Hpmezzo.rar
Scaricalo e vedi :)
 
Top
themetaldrummer
CAT_IMG Posted on 11/11/2012, 11:43     +1   -1




MMh.... il problema è che per un antivirus decente (come voltete fare voi c'è il rischio che prende programmi non malware) ci vuole sapere come riconoscerli e, che io sappia, si usano Assembly e c++
 
Top
Hpmezzo
CAT_IMG Posted on 11/11/2012, 12:38     +1   -1




beh se si prende HASH da Virustotal , il rischio di falsi positivi e davvero basso...

Anzi praticamente nullo...
 
Top
»Master
CAT_IMG Posted on 12/11/2012, 16:11     +1   -1




Quella cosa del hash è un po stupida e fragile. Un hash di 128 bit può corrispondere a tantissimi altri file D:
 
Top
Hpmezzo
CAT_IMG Posted on 13/11/2012, 11:25     +1   -1




Non sono daccordo .. Ti inviterei a leggere la collisione di hash..
http://it.wikipedia.org/wiki/Collisione_hash
Una situazione rarissimissima , ma non impossibile... E poi scusa perchè tutti si dovrebbero basare su hash MD5 in primis VT?
 
Top
»Master
CAT_IMG Posted on 13/11/2012, 16:10     +1   -1




Collisione hash non funziona nello stesso modo quando usi un metodo che ritorna un hash che ha una lunghezza fissa, come l'md5.
Citazione da Wikipedia su MD5
CITAZIONE
However, it has since been shown that MD5 is not collision resistant

 
Top
Hpmezzo
CAT_IMG Posted on 14/11/2012, 07:24     +1   -1




Ma in teoria e la stessa cosa... Parliamo la stessa lingua ma non ci capiamo! E poi perchè viene utilizzato da molti servizi online? Un motivo ci sarà.. Non sarà affidabile quando SHA-256... Ma è sempre una cosa
 
Top
»Master
CAT_IMG Posted on 14/11/2012, 15:41     +1   -1




Il problema è che un bit che modifichi dell'archivio già non viene riconosciuto poi... Un antivirus efficace deve usare la euristica, analizzare il comportamento dei diversi programmi eccetera :D Non sto dicendo che il metodo che usano non funziona, però non è davvero efficace sai, sicuramente i grandi antivirus d'oggi non si basano soltanto su quello per trovare i virus...
 
Top
Hpmezzo
CAT_IMG Posted on 15/11/2012, 08:10     +1   -1




Certo... Si basano su modulu HIPS pienamente daccordo, poi si basano sull'estrazione e ricerca di malware anche su archivi zip, rar e non solo... Ma un malware principalmente viene individuato tramite firma digitale, che sia calcolata in md5, in sha256 non importa.
 
Top
11 replies since 11/11/2012, 10:24   183 views
  Share