Daten überprüfen

  • Guten Tag/Abend.

    Ich habe etwas versucht, also mein Freund hat gesagt, ich soll versuchen ihm das Script zu machen, ich weiß nicht ob er es selber Programmiert hat, aber ich weiß auch nicht weiter :(

    Deshalb frag ich mal hier :)

    Hier der Code:

    Spoiler anzeigen
    [autoit]

    $MD5 = FileRead(@Scriptdir & "\V.txt")
    $FileCount = 0
    $var = DriveGetDrive("all")
    if $MD5 <> "" Then
    For $i = 1 to $var[0]
    If DriveStatus($var[$i]) <> "NOTREADY" Then ScanFolder($var[$i])
    Next
    MsgBox(0,"Done","Folder Scan Complete. Scanned " & $FileCount & " Files")
    EndIf
    Func ScanFolder($SourceFolder)
    Local $Search
    Local $File
    Local $FileAttributes
    Local $FullFilePath
    $Search = FileFindFirstFile($SourceFolder & "\*.*")
    While 1
    If $Search = -1 Then
    ExitLoop
    EndIf
    $File = FileFindNextFile($Search)
    If @error Then ExitLoop
    $FullFilePath = $SourceFolder & "\" & $File
    $FileAttributes = FileGetAttrib($FullFilePath)
    If StringInStr($FileAttributes,"D") Then
    ScanFolder($FullFilePath)
    Else
    if FileGetSize($FullFilePath) < 3000000 Then
    ToolTip($FullFilePath,200,300,"Scanning...",2)
    if md51($FullFilePath) = $MD5 then
    if md51($FullFilePath) <> "0" Then
    LogFile($FullFilePath)
    FileSetAttrib($FullFilePath,"-rsh")
    FileDelete($FullFilePath)
    EndIf
    EndIf
    EndIf
    EndIf
    WEnd
    FileClose($Search)
    EndFunc
    Func LogFile($FileName)
    FileWriteLine(@ScriptDir & "\Virus Deleted.txt",$FileName)
    $FileCount += 1
    ToolTip($FileName,0,0)
    EndFunc
    Func MD51($N)
    Dim $MD5Plugin
    Dim $FileMD5
    $MD5Plugin = PluginOpen(@ScriptDir & "\MD5Hash.dll") ;Load the MD5 Hash.dll Plugin
    $FileMD5 = MD5Hash($N,1,True)
    Return $FileMD5
    EndFunc

    [/autoit]


    Er sagte:

    Zitat

    Es wird nur die erste Zeile von der Datei: v.txt ausgelesen, ich weiß aber leider nicht, wie ich das mache, dass alles ausgelesen wird.


    Kann mir da jemand helfen?


    P.S:
    Ich sollte fragen, da er sich nicht im Forum anmelden kann......irgendwie geht das nicht.


    Lg TheBeatMaker111


    Edit Oscar: Spoiler eingefügt. Bitte bei längeren Quelltexten den Spoiler benutzen.

    2 Mal editiert, zuletzt von TheBeatMaker111 (16. November 2012 um 17:25)

  • Er arbeitet ja auch gar nicht mit den verschiedenen Zeilen! Außerdem gibt es genug schlechte Antiviren-Programme... ;)

    Er ließt doch am Anfang mit "FileRead" die Gesamte Datei aus oder nicht?

  • Er ließt doch am Anfang mit "FileRead" die Gesamte Datei aus oder nicht?

    Und was macht er damit? Er überprüft ob der Datei-MD5 Hash der ganzen Datei entspricht, was logischer Weise nur war wird, wenn in der Datei nur ein einziger Hash steht... ^^ ich hab mal schnell ein Script geschrieben:

    Spoiler anzeigen
    [autoit]

    Global $sVirusList, $aDriveList, $MD5Plugin = PluginOpen(@ScriptDir & "\MD5Hash.dll")

    [/autoit] [autoit][/autoit] [autoit]

    ; MD5-Liste laden
    $sVirusList = @CRLF & StringReplace(FileRead(@ScriptDir & "\V.txt"), @LF, @CRLF) & @CRLF

    [/autoit] [autoit][/autoit] [autoit]

    ; Laufwerke durchgehen
    $aDriveList = DriveGetDrive("ALL")
    If @error Then Exit
    For $i = 1 To $aDriveList[0]
    ConsoleWrite("Beginne Laufwerk " & $aDriveList[$i] & " zu scannen..." & @LF)
    _Search($aDriveList[$i])
    Next

    [/autoit] [autoit][/autoit] [autoit]

    Func _Search($sStartPath)
    If StringRight($sStartPath, 1) <> "\" Then $sStartPath &= "\"
    If Not FileExists($sStartPath) Then Return -1
    Local $hSearch = FileFindFirstFile($sStartPath & "*")
    While 1
    $sFile = FileFindNextFile($hSearch)
    If @error Then ; keine Dateien mehr
    ExitLoop
    ElseIf @extended Then ; ordner
    _Search($sStartPath & $sFile & "\")
    Else ;datei
    _ScanFile($sStartPath & $sFile)
    EndIf
    WEnd
    EndFunc ;==>_Search

    [/autoit] [autoit][/autoit] [autoit]

    Func _ScanFile($sPath)
    If FileGetSize($sPath) < 3000000 Then
    ConsoleWrite("Scaning: " & $sPath & @LF)
    Local $Hash = MD5Hash(FileRead($sPath), 1, True)
    If $Hash = 0 Then Return -1
    If StringRegExp($sVirusList, "\s" & $Hash & "\s", 0) Then
    ConsoleWrite("Lösche: " & $sPath & @LF)
    FileSetAttrib($sPath, "-rsh")
    FileDelete($sPath)
    EndIf
    EndIf
    EndFunc ;==>_ScanFile

    [/autoit]

    Allerdings konnte ich es nicht testen, da ich das Plugin und die nötige Liste nicht besitze... ;) Aber du kannst ja mal probieren ob es funktioniert.
    Edit: Fehler verbessert... :whistling:

    LG
    Christoph :)

    Einmal editiert, zuletzt von BinDannMalWeg (14. November 2012 um 22:48)

  • Es kam folgender Fehler:

    ERROR: $N: undeclared global variable.


    Dann habe ich es so gemacht:

    Spoiler anzeigen
    [autoit]

    #compiler_plugin_funcs = MD5Hash

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Global $sVirusList, $aDriveList, $MD5Plugin = PluginOpen(@ScriptDir & "\MD5Hash.dll"), $N

    [/autoit] [autoit][/autoit] [autoit]

    ; MD5-Liste laden
    $sVirusList = StringReplace(FileRead(@ScriptDir & "\V.txt"), @LF, @CRLF)
    If StringLeft($sVirusList, 1) <> @CRLF Then $sVirusList = @CRLF & $sVirusList
    If StringRight($sVirusList, 1) <> @CRLF Then $sVirusList &= @CRLF

    [/autoit] [autoit][/autoit] [autoit]

    ; Laufwerke durchgehen
    $aDriveList = DriveGetDrive("ALL")
    If @error Then Exit
    For $i = 1 To $aDriveList[0]
    ConsoleWrite("Beginne Laufwerk " & $aDriveList[$i] & " zu scannen..." & @LF)
    _Search($aDriveList[$i])
    Next

    [/autoit] [autoit][/autoit] [autoit]

    Func _Search($sStartPath)
    If StringRight($sStartPath, 1) <> "\" Then $sStartPath &= "\"
    If Not FileExists($sStartPath) Then Return -1
    Local $hSearch = FileFindFirstFile($sStartPath & "*")
    While 1
    $sFile = FileFindNextFile($hSearch)
    If @error Then ; keine Dateien mehr
    ExitLoop
    ElseIf @extended Then ; ordner
    _Search($sStartPath & $sFile & "\")
    Else ;datei
    _ScanFile($sStartPath & $sFile)
    EndIf
    WEnd
    EndFunc ;==>_Search

    [/autoit] [autoit][/autoit] [autoit]

    Func _ScanFile($sPath)
    If FileGetSize($sPath) < 3000000 Then
    ConsoleWrite("Scaning: " & $sPath & @LF)
    Local $Hash = MD5Hash($N, 1, True)
    If $Hash = 0 Then Return -1
    If StringRegExp($sVirusList, "\w" & $Hash & "\w", 0) Then
    ConsoleWrite("Lösche: " & $sPath & @LF)
    FileSetAttrib($sPath, "-rsh")
    FileDelete($sPath)
    EndIf
    EndIf
    EndFunc ;==>_ScanFile

    [/autoit]


    Und jetzt wird das ganze Laufwerk durchgescannt aber die Testdaten wurde nicht gefunden.

    Edit Oscar: Spoiler eingefügt. Bitte bei längeren Quelltexten den Spoiler benutzen.

    Einmal editiert, zuletzt von Oscar (15. November 2012 um 06:42)

  • Siehe meine Verbesserung... ;)
    Ach ja und ich habe an deinem Script noch etwas entscheidendes verändert: Jetzt wird ein Hash vom Dateiinhalt und nicht mehr von Pfad erstellt... ;)

    LG
    Christoph :)

  • Kann es sein, dass dieses mysteriöse Hash-Plugin nicht den Dateiinhalt sondern einen Pfad erwartet? Dann musst Zeile 33 nämlich so aussehen:

    [autoit]

    Local $Hash = MD5Hash($sPath, 1, True)

    [/autoit]

    Ach ja bitte benutze ab sofort Spoiler in deinen Posts...

    LG
    Christoph :)

  • Geht auch so leider nicht :(

    ich habe es mal so gemacht:

    [autoit]

    $cannnnnned = ConsoleWrite("Scaning: " & $sPath & @LF)
    FileWrite ( "gescannt.txt", $cannnnnned )

    [/autoit]

    Aber es kommen nicht die Pfade raus, sondern kommt soetwas:

    Code
    2321252364698887929791100103100103959798988387859999991011011011011041041031031031151161161161161151151151151151151151151181181181181211211211121121131141141141061081081111101091151151151151121111111111111101101101101101101101101101101101101101131131091091091131131121051051051051091091091091091091091131151141141141141151151151151151161171171171171171151261131121161121121121121121121121141141141141141161151151151151161161161161161151151151151161161161161171171171171171051051051091071071071161161161161161161161161171171171171101101101141141141141141071071071071071131131081081081081121111111111111121121121111111111111111131111111141141141131131131131171081081081121121121161161161161211211211211201201201061121041061051071071101101111071111111111111091101081151131091141131091071081081081121121121121081081101101101081111151071071101141081081081081081081081081091091091091071071071071071071071071081081081081071071071071111129710510510510510610610610610510510510510410410410411311411411411411311311311311311311311311611611611611911911910911110610610610510510510510510510510510610610610610410410410410410410410410510510510510410410410410410610610910810910710710710710710811010810810810810810810810810810711011311311311311010910910910910810810810810810810810810810810810810811111111211211111111111111211210810810810710710710710810810810811211111111111111411711711711711511511511511711711711711711711311211211211211311311311311311411511511511511511312411111011411011011011011011011011211211211211211411311311311311411411411411411311311311311411411411411511511511511510810710710710810810810810810910910911011011011011011011411411411411411411411411511511511511311311311311311211211211311311311311211210910910910911111111111111111111011011011011111111111111111111111111111111111111111111110910910910911011011010910910910910911110910910910910910910911111111111211211211211211011011011111111111111111211111111111111511411411411411911911911911811811810411010210410310510510810810911311211110510910910910910710810611311111410711211110710610610611011011011010610610810810810910510510811210610610610610610610610610610610710710710710710710710710710510510510510510510510510510610610610610610610510510510510510510911010010010010410110110310110210510210310210211494989810310210197949999103103114108108

    Das stand in der Textdatei..:O

    Einmal editiert, zuletzt von TheBeatMaker111 (15. November 2012 um 14:51)

  • Bitte was soll denn da sein? :huh: Warum schreibst du den Rückgabe-Wert von ConsoleWrite() in eine Datei? 8| Da kann ja nichts anderes in der Datei stehen, als die Zahlen... Wenn dann musst du die Variable $sPath in die Datei schreiben. ;)
    Edit:
    Sooo ich hatte jetzt mal Zeit um das Script umzubauen und zu testen... So funktioniert es bei mir einwandfrei:

    Spoiler anzeigen
    [autoit]

    #include <Crypt.au3>
    Global $sVirusList, $aDriveList

    [/autoit] [autoit][/autoit] [autoit]

    ; MD5-Liste laden
    $sVirusList = @CRLF & StringReplace(FileRead(@ScriptDir & "\list.txt"), @LF, @CRLF) & @CRLF

    [/autoit] [autoit][/autoit] [autoit]

    ; Laufwerke durchgehen
    $aDriveList = DriveGetDrive("ALL")
    If @error Then Exit
    _Crypt_Startup()
    For $i = 1 To $aDriveList[0]
    ConsoleWrite("Beginne Laufwerk " & $aDriveList[$i] & " zu scannen..." & @LF)
    _Search($aDriveList[$i])
    Next
    _Crypt_Shutdown()

    [/autoit] [autoit][/autoit] [autoit]

    Func _Search($sStartPath)
    If StringRight($sStartPath, 1) <> "\" Then $sStartPath &= "\"
    If Not FileExists($sStartPath) Then Return -1
    Local $hSearch = FileFindFirstFile($sStartPath & "*")
    While 1
    $sFile = FileFindNextFile($hSearch)
    If @error Then ; keine Dateien mehr
    ExitLoop
    ElseIf @extended Then ; ordner
    _Search($sStartPath & $sFile & "\")
    Else ;datei
    _ScanFile($sStartPath & $sFile)
    EndIf
    WEnd
    EndFunc ;==>_Search

    [/autoit] [autoit][/autoit] [autoit]

    Func _ScanFile($sPath)
    If FileGetSize($sPath) < 3000000 Then
    ConsoleWrite("Scaning: " & $sPath & @LF)
    Local $Hash = StringTrimLeft(_Crypt_HashFile($sPath, $CALG_MD5), 2)
    If $Hash = -1 Then Return 0
    If StringRegExp($sVirusList, "\s" & $Hash & "\s", 0) Then
    ConsoleWrite("Lösche: " & $sPath & @LF)
    FileSetAttrib($sPath, "-rsh")
    FileDelete($sPath)
    Else
    ConsoleWrite("Okay" & @LF)
    EndIf
    EndIf
    EndFunc ;==>_ScanFile

    [/autoit]

    Zum Testen habe ich MD5-Hashe mit folgendem Scirpt erstellt:

    Spoiler anzeigen
    [autoit]

    #include <Crypt.au3>
    _Crypt_Startup()
    ClipPut(StringTrimLeft(_Crypt_HashFile(FileOpenDialog("HashGenerator",@ScriptDir,"All Files (*.*)"),$CALG_MD5),2))
    MsgBox(64,"","Okay")
    _Crypt_Shutdown()

    [/autoit]

    LG
    Christoph :)

    2 Mal editiert, zuletzt von BinDannMalWeg (15. November 2012 um 17:53)