Und schon bin ich wieder hier!
Hätte ich nicht von Oscar, in der chatbox, gelesen das er es geschafft hat 28.508.160 Elemente in 8 Minuten in das Scripting.Dictionary Object zu pressen. Würde ich euch hier wohl nicht belästigen.
Ich werde direkt das Ganze script posten. Bitte verzeiht mir die Unordnung mit den Variablen, das habe ich wohl noch nicht ganz so drauf. Allerdings denke ich das es trotzdem lesbar ist, ich markierte auch förderlich die abschnitte.
In der Section ;<============Read DataBase===========>[...];<============/Read DataBase===========>,
offenbare ich meine lösung um die Elemente einzulesen. Allerdings brauch das Script bei mir hier unzählbare Stunden & RAM.
Das script wird Morgen auseinander genommen. So das ich einen Baum an Shell's kreieren kann die jeweils zuerst die zu überprüfenden daten hasht, um die HDD nicht zu verlangsamen, & danach die CPU stresst.
Vielleicht interessiert es jemanden wie es bis jetzt aussieht. Deshalb hier vollständig, aber nach der Objekt implentierung nicht mehr funktionstüchtig, wollte mich zuerst um das einlesen der hases kümmern.
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Change2CUI=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
;https://virusshare.com/hashes.4n6
;19.398.656 + 9.109.504 = 28.508.160
#NoTrayIcon
#include <Crypt.au3>
#include <array.au3>
#include <File.au3>
#include "DictionaryObject.au3"
Local $oErrorHandler = ObjEvent("AutoIt.Error", "_ErrFunc")
;<=============Command prompt===========>
Local $ConsoleUsePath = '', $SyntaxError, $UPDATEONLY, $SCANONLY, $Current
If $cmdline[0] >= 1 Then
ConsoleWrite(@CRLF)
For $cI = 1 To UBound($cmdline) - 1 Step 1
$Current = $cmdline[$cI] & ' '
;~ _ArrayDisplay($cmdline)
;~ MsgBox(0,"",$Current)
If StringInStr($Current, "/?") Then
ConsoleWrite('Syntax: ' & @ScriptName & ' -p="C:\" [/? [-Upd [-noUpd ]]]' _
& @CRLF & '/? --Shows this Helpdesk' _
& @CRLF & '-p --Defines the Path' _
& @CRLF & '-Upd --Updating the Database from virusshare.com' _
& @CRLF & '-noUpd --Ignore Updates' _
& @CRLF)
Exit
ElseIf StringInStr($Current, "-p") Then
$TrimLeft = StringTrimLeft($Current, StringInStr($Current, '='))
$ReadLeft = StringLeft($TrimLeft, StringInStr($TrimLeft, ' ', 0, 1) - 1)
$ConsoleUsePath = $ReadLeft
ElseIf StringInStr($Current, "-Upd") Then
$UPDATEONLY = 1
ElseIf StringInStr($Current, "-noUpd") Then
$SCANONLY = 1
Else
ConsoleWrite('For what was that? ' & $cmdline[$cI] & @CRLF)
$SyntaxError = 1
EndIf
Next
If $SyntaxError = 1 Then
ConsoleWrite('So ehm Syntax Error. Type /?' & @CRLF)
Exit
EndIf
EndIf
;<=============/Command prompt===========>
;<============Script Start===========>
If $ConsoleUsePath = '' Then
If $UPDATEONLY = 0 Then
ConsoleWrite('Choose Folder... ')
Local $DIR = FileSelectFolder("Choose Folder to Search for Positives", @DesktopDir)
If @error Then Exit
ConsoleWrite('Cool' & @CRLF)
EndIf
Else
$DIR = $ConsoleUsePath
EndIf
;<============Update DataBase===========>
If $SCANONLY = 0 Then
Local $URL = 'https://virusshare.com/hashes/VirusShare_00' ;000.md5
Local $count = 0 & 0 & 0, $Finish_Downloading, $count, $third = 0, $two = 0, $first = 0, $Bytes = 0;, $arDB[0]
ConsoleWrite("###############################################################################" & @CRLF & @CRLF)
Do
ConsoleWrite('Checking For Update: \md5db\VirusShare_00' & $count & '.md5' & @CRLF)
$PingS = Ping("virusshare.com", 2000)
If $PingS Then
$OnlineSize = InetGetSize($URL & $count & '.md5', 1)
If FileGetSize(@ScriptDir & "\md5db\VirusShare_00" & $count & '.md5') <> $OnlineSize Then
ConsoleWrite('Downloading now: https://virusshare.com/hashes/VirusShare_00' & $count & '.md5' & @CRLF)
$GetData = InetGet($URL & $count & '.md5', @ScriptDir & "\md5db\VirusShare_00" & $count & '.md5', 1, 1)
Do
$HowFar = InetGetInfo($GetData, 0)
$Bytes = Round($HowFar)
Sleep(1000)
$HowFar = InetGetInfo($GetData, 0)
$NewBytes = Round($HowFar) - $Bytes
$bar_2 = $HowFar / $OnlineSize
$ProgressBar_2 = BinaryToString(StringToBinary($bar_2 * 100))
ConsoleWrite('Downloaded ' & $ProgressBar_2 & '%' & ' | ' & Round($NewBytes / 1024) & 'kb/s' & @CRLF)
Until InetGetInfo($GetData, 2)
EndIf
$CHECK_O = FileOpen(@ScriptDir & "\md5db\VirusShare_00" & $count & '.md5')
$CHECK_R = FileRead($CHECK_O)
FileClose($CHECK_O)
If StringInStr($CHECK_R, '404 Not Found') Then
$Finish_Downloading = 1
EndIf
If StringRight($count, 1) = 9 Then
If StringTrimRight(StringRight($count, 2), 1) = 9 Then
$two = 0
$first = $first + 1
EndIf
$third = 0
$two = $two + 1
Else
$third = $third + 1
EndIf
$count = $first & $two & $third
If $count > 999 Then
ConsoleWrite("###############################################################################" & @CRLF & @CRLF & "Everything Possible with this Script was Downloaded" & @CRLF)
ConsoleWrite("Exceeded Range. Will now exit the loop." & @CRLF)
ExitLoop
EndIf
Else
ConsoleWrite(@CRLF & 'No Connection to Server' & @CRLF)
$Finish_Downloading = 1
EndIf
Until $Finish_Downloading = 1
If $UPDATEONLY = 1 Then
ConsoleWrite(@CRLF & 'Update Routine Finished' & @CRLF)
Exit
EndIf
EndIf
;<============/Update DataBase===========>
;<============Read DataBase===========>
$oDict = ObjCreate("Scripting.Dictionary")
Local $ReadDBar, $ReadDBar[0], $ReadDBarTemp[0], $db_files = _RecursiveFileListToArray(@ScriptDir & "\md5db", '\.md5\z', 1), $arList[0], $count, $add
ConsoleWrite('###############################################################################' & @CRLF & @CRLF & 'Collecting .md5 ... ' & UBound($db_files) - 1 & ' File[s]' & @CRLF)
$count = 0
For $idb = 1 To UBound($db_files) - 1 Step 1
ConsoleWrite('Reading ' & $db_files[$idb] & @CRLF)
_FileReadToArray($db_files[$idb], $ReadDBarTemp)
_ArrayDelete($ReadDBarTemp, '1-6')
$add = $add + UBound($ReadDBarTemp) - 1
ConsoleWrite('Found +' & UBound($ReadDBarTemp) - 1 & ' MD5 Hashes' & @CRLF)
For $igb = 2 To UBound($ReadDBarTemp) - 1
$oDict.Add($ReadDBarTemp[$igb-1], $ReadDBarTemp[$igb])
$count = $count + 1
Next
Next
ConsoleWrite(@CRLF & 'Equals ' & $add & ' MD5 Hashes' & @CRLF & @CRLF)
;<============/Read DataBase===========>
;<============Read Files===========>
HotKeySet('+{ESC}', _ShowResult)
ConsoleWrite('###############################################################################' & @CRLF & @CRLF & 'Press SHIFT + ESC to exit the Search Routine and show the Results' & @CRLF & 'Collecting Files ... ')
Local $Localfile = _RecursiveFileListToArray($DIR, '', 1) ;<=) FileDIR
Local $Progress = UBound($Localfile) - 1
ConsoleWrite('Found ' & $Progress & ' Files' & @CRLF & @CRLF & 'Beginning The Scan:' & @CRLF)
Local $Save_O = FileOpen(@ScriptDir & "\logging.log", 1)
;<============/Read Files===========>
;<============Scanning Section===========>
_Crypt_Startup()
For $i = 1 To UBound($Localfile) - 1 Step 1
$bar = $i / $Progress
$ProgressBar = BinaryToString(StringToBinary($bar * 100))
;~ ConsoleWrite('Completed ' & StringLeft($ProgressBar, StringInStr($ProgressBar, '.') - 1) & '% ' & $i & ' of ' & $Progress & ' Files' & @CRLF)
ConsoleWrite('Completed ' & Round($ProgressBar) & '% ' & $i & ' of ' & $Progress & ' Files' & @CRLF)
$Hashing = StringTrimLeft(_Crypt_HashFile($Localfile[$i], $CALG_MD5), 2)
;~ For $is = 0 To UBound($ReadDBar) - 1 Step 1
$Returned = _ObjDictSearch($oDict, $Hashing)
if $Returned = 1 Then
;~ If StringInStr($Hashing, $ReadDBar[$is], 0) Then
;~ _ArrayAdd($arList, $Localfile[$i] & ' - ' & $ReadDBar[$is])
;~ FileWrite($Save_O, $Localfile[$i] & ' - ' & $ReadDBar[$is] & @CRLF)
;~ ConsoleWrite("FOUND|" & $Localfile[$i] & @CRLF)
EndIf
;~ Next
Next
_Crypt_Shutdown()
FileClose($Save_O)
;<============/Scanning Section===========>
_ShowResult()
;<============/Script Start===========>
Func _ShowResult()
ConsoleWrite('###############################################################################' & @CRLF & 'Listing Positives' & @CRLF)
For $ir = 0 To UBound($arList) - 1 Step 1
ConsoleWrite("Positiv|" & $arList[$ir] & @CRLF)
Next
ConsoleWrite('###############################################################################' & @CRLF & 'Click Exit or Press CTRL + C on Console' & @CRLF)
While True
Sleep(250)
WEnd
EndFunc ;==>_ShowResult
;Author: Oscar @ Autoit.de
;https://autoit.de/index.php/Thread/12423-RecursiveFileListToArray-mit-StringRegExp/
Func _RecursiveFileListToArray($sPath, $sPattern, $iFlag = 0, $iFormat = 1, $sDelim = @CRLF)
Local $hSearch, $sFile, $sReturn = ''
If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
$hSearch = FileFindFirstFile($sPath & '*.*')
If @error Or $hSearch = -1 Then Return SetError(1, 0, $sReturn)
While True
$sFile = FileFindNextFile($hSearch)
If @error Then ExitLoop
If StringInStr(FileGetAttrib($sPath & $sFile), 'D') Then
If StringRegExp($sPath & $sFile, $sPattern) And ($iFlag = 0 Or $iFlag = 2) Then $sReturn &= $sPath & $sFile & '\' & $sDelim
$sReturn &= _RecursiveFileListToArray($sPath & $sFile & '\', $sPattern, $iFlag, 0)
ContinueLoop
EndIf
If StringRegExp($sFile, $sPattern) And ($iFlag = 0 Or $iFlag = 1) Then $sReturn &= $sPath & $sFile & $sDelim
WEnd
FileClose($hSearch)
If $iFormat Then Return StringSplit(StringTrimRight($sReturn, StringLen($sDelim)), $sDelim, $iFormat)
Return $sReturn
EndFunc ;==>_RecursiveFileListToArray
Func _ErrFunc($oError) ;<=)Autoit.de Examples for the Help Section
ConsoleWrite(@ScriptName & " (" & $oError.scriptline & ") : ==> COM Error intercepted !" & @CRLF & _
@TAB & "err.number is: " & @TAB & @TAB & "0x" & Hex($oError.number) & @CRLF & _
@TAB & "err.windescription:" & @TAB & $oError.windescription & @CRLF & _
@TAB & "err.description is: " & @TAB & $oError.description & @CRLF & _
@TAB & "err.source is: " & @TAB & @TAB & $oError.source & @CRLF & _
@TAB & "err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _
@TAB & "err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _
@TAB & "err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _
@TAB & "err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _
@TAB & "err.retcode is: " & @TAB & "0x" & Hex($oError.retcode) & @CRLF & @CRLF)
Return SetError(1, 0, "COM Error intercepted")
EndFunc ;==>_ErrFunc
Alles anzeigen