Suche nach Dateien mit doppelter Dateiendung
Hallo Leute,
evtl. eine triviale Aufgabe, aber ich bekomme es nicht hin.
Ziel ist es von diesen blöden Verschlüsselungsviren betroffene Files zu finden. Bisher werden da ja (zum Glück noch) Dateiendungen angehangen, so dass man das noch analysieren kann.
Die Files heissen dann meist *.txt.mp3 oder *.doc.vvv etc.
Habe ein Powershellskript, welches mit das Dateisystem durchsucht und in eine Variable ausgibt.
Ich mache das bewusst mit dir /s /b weil Get-ChildItem einfach viel zu langsam ist.
Nun ist mir die Suche allerdings zu ungenau - da die Files bei einem Befall von Morgen evtl. die Endung *.zdf haben können.
Jetzt möchte ich die Suche dahingehend ändern, dass nach
*.???.???
gesucht wird.
Also quasi nach zwei "Punkten" mit genau 3 zeichen, die variabel sein können, dazwischen.
Hab schon bisschen rumgespielt, aber bekomme es nicht hin.
bzw.
oder
bringt leider auch die Files, die eine normale Dateiendung haben z.B. *.txt und halt nicht wie gewünscht nur Dateien mit *.txt.*
Habt ihr eine Idee für die Umsetzung?
Gruß
KangarooJack
evtl. eine triviale Aufgabe, aber ich bekomme es nicht hin.
Ziel ist es von diesen blöden Verschlüsselungsviren betroffene Files zu finden. Bisher werden da ja (zum Glück noch) Dateiendungen angehangen, so dass man das noch analysieren kann.
Die Files heissen dann meist *.txt.mp3 oder *.doc.vvv etc.
Habe ein Powershellskript, welches mit das Dateisystem durchsucht und in eine Variable ausgibt.
Ich mache das bewusst mit dir /s /b weil Get-ChildItem einfach viel zu langsam ist.
$Virusverdacht = cmd /c dir /s /b *.micro *.vvv *.encrypted *.ccc *.aaa *HOW_RECOVER* *HELP_RECOVER* *howto_recover*
Nun ist mir die Suche allerdings zu ungenau - da die Files bei einem Befall von Morgen evtl. die Endung *.zdf haben können.
Jetzt möchte ich die Suche dahingehend ändern, dass nach
*.???.???
gesucht wird.
Also quasi nach zwei "Punkten" mit genau 3 zeichen, die variabel sein können, dazwischen.
Hab schon bisschen rumgespielt, aber bekomme es nicht hin.
dir /s /b *.???.
dir /s /b *.???.*
$Virusverdacht = cmd /c dir /s /b | select-string -pattern ".*."
bringt leider auch die Files, die eine normale Dateiendung haben z.B. *.txt und halt nicht wie gewünscht nur Dateien mit *.txt.*
Habt ihr eine Idee für die Umsetzung?
Gruß
KangarooJack
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 296683
Url: https://administrator.de/contentid/296683
Ausgedruckt am: 22.11.2024 um 05:11 Uhr
18 Kommentare
Neuester Kommentar
gci 'c:\*.???.???' -Recurse -Force
dir /b /s /A-D | findstr "\....\....$"
Zitat von @Kangaroojack:
gci ist viel zu langsam und scheidet daher aus. Dachte das hätte ich bereits oben erwähnt.
Dir ist aber bewußt, dass 'dir' in Powershell ein Alias für 'gci' ist, und dazu in der Ausführung langsamer ist?gci ist viel zu langsam und scheidet daher aus. Dachte das hätte ich bereits oben erwähnt.
Zeit für ein Verzeichnis mit 598 Ordnern und 24.026 Dateien (mit recurse)
dir: 00:00:03.3278915
gci: 00:00:03.2744544
Ich experimentiere auch gerade mit sowas rum. Im Moment sieht mein Code so aus:
Ausführungszeit bei 14.647 Dateien, 2.072 Ordner, 13,9 GB ca. 4 Sekunden
Die Idee dafür stammt von HIER
Bin leider nicht so fit mit Powershell. Ist also bestimmt noch verbesserungsfähig...
Write-Host ("Powershell Version: " + $host.version.major)
$path="D:\LWE"
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition
$strOutFileName=$scriptPath + "\DateiListe.txt"
write-Host ("Output file is: " + $strOutFileName )
If (Test-Path $strOutFileName){
Remove-Item $strOutFileName
}
$checkfiles=@(
"*decipher*"
,"*install_tor*.*"
,"*restore_file*.*"
,"*want your files back.*"
,"confirmation.key"
,"enc_files.txt"
,"last_chance.txt"
,"recovery_file.txt"
,"recovery_key.txt"
,"*help_your_files*.*"
,"*help_restore*.*"
,"*HELP_TO_DECRYPT*.*"
,"*HELP_TO_SAVE*.*"
,"*HELP_DECRYPT*.*"
,"*HOW_DECRYPT*.*"
,"*how_to_recover*.*"
,"*DecryptAllFiles*.txt"
,"*DECRYPT_INSTRUCTION*.*"
,"*recover_instructions.*"
,"*.locky"
,"*.*yC"
,"*.jpg.*"
,"*.jpeg.*"
,"*.doc.*"
,"*.docx.*"
,"*.xls.*"
,"*.xlsx.*"
,"*.pdf.*"
,"*.xml.*"
)
$mypath=$path + "\*"
if ($host.version.major -gt 2) {
#Powershell 4, ignore instead silentlycontinue
$fileslist=@(get-childitem -path $mypath -Recurse -Include $checkfiles -ErrorAction Ignore)
} else {
#Powershell 2 doesn't have ignore and recurse works differently with wildcards, therefore returns all files and is much, much slower than posh4
$fileslist=@(get-childitem -path $mypath -Recurse -Include $checkfiles -ErrorAction SilentlyContinue)
}
# Write-Host $fileslist
foreach ($item in $fileslist) {
# hier könnte man noch nach Datum filtern
if ($host.version.major -gt 2) {
#Powershell 4, ignore instead silentlycontinue
$a="$_$((get-item $item.fullname -erroraction ignore).lastwritetime.tostring("dd.MM.yyyy HH:mm:ss"))`t$($item.Fullname)"
} else {
#Powershell 2 doesn't have ignore and recurse works differently with wildcards, therefore returns all files and is much, much slower than posh4
$a="$_$((get-item $item.fullname).lastwritetime.tostring("dd.MM.yyyy HH:mm:ss"))`t$($item.Fullname)"
}
Out-File -filePath $strOutFileName -inputobject $a -append
}
Ausführungszeit bei 14.647 Dateien, 2.072 Ordner, 13,9 GB ca. 4 Sekunden
Die Idee dafür stammt von HIER
Bin leider nicht so fit mit Powershell. Ist also bestimmt noch verbesserungsfähig...
Zitat von @Kangaroojack:
Danke für dein Post!
Das funktioniert. Leider bringt mir das jetzt viel zu viele Ergebnisse zurück.
Wenn man das jetzt noch filtern könnte, also dass nur Dateien gelistet werden, die heute geschrieben/geändert wurden - dann wärs denke ich okay.
Kein Problem, wenn man's vorher weiß ...Danke für dein Post!
Das funktioniert. Leider bringt mir das jetzt viel zu viele Ergebnisse zurück.
Wenn man das jetzt noch filtern könnte, also dass nur Dateien gelistet werden, die heute geschrieben/geändert wurden - dann wärs denke ich okay.
@echo off & setlocal ENABLEDELAYEDEXPANSION
for /f "delims=" %%a in ('dir /B /S /A-D "C:\" ^| findstr "\....\....$"') DO set t=%%~ta & if "!t:~0,10!" == "%DATE%" echo %%a
@joachim57
lässt sich für Dateien die sich heute geändert haben so abkürzen:
$path = "C:\Ordner"
$trigger=@(
".*decipher.*"
,".*install_tor.*\..*"
,".*restore_file.*\..*"
,".*want your files back\..*"
,"confirmation\.key"
,"enc_files\.txt"
,"last_chance\.txt"
,"recovery_file\.txt"
,"recovery_key\.txt"
,".*help_your_files.*\..*"
,".*help_restore.*\..*"
,".*HELP_TO_DECRYPT.*\..*"
,".*HELP_TO_SAVE.*\..*"
,".*HELP_DECRYPT.*\..*"
,".*HOW_DECRYPT.*\..*"
,".*how_to_recover.*\..*"
,".*DecryptAllFiles.*\.txt"
,".*DECRYPT_INSTRUCTION.*\..*"
,".*recover_instructions.*"
,".*\.locky"
,".*\..*yC"
,".*\.jpg\..*"
,".*\.jpeg\..*"
,".*\.doc\..*"
,".*\.docx\..*"
,".*\.xls\..*"
,".*\.xlsx\..*"
,".*\.pdf\..*"
,".*\.xml\..*"
) -join '|'
gci $path -Recurse -ErrorAction Ignore | ?{$_.LastWriteTime.date -eq (get-date).Date -and $_.Name -match $trigger}
Zitat von @Kangaroojack:
DIR ist bei sehr vielen Dateien um WELTEN schneller als GCI! Habs selber probiert. Wenn ich über GCI suche, braucht mein Skript >30 Minuten.
mit DIR ist es oft in ca. 10 Minuten durch!
Wie viele Dateien durchsuchst du denn da?DIR ist bei sehr vielen Dateien um WELTEN schneller als GCI! Habs selber probiert. Wenn ich über GCI suche, braucht mein Skript >30 Minuten.
mit DIR ist es oft in ca. 10 Minuten durch!
Danke, werde ich mir bei Gelegenheit zu Gemüte führen!
s. oben ...
Hallo @Kangaroojack
Oder man macht das intelligent mit einem Filesystemwatcher der automatisch sofort anspringt wenn eine verdächtige Datei entdeckt wird (Zeile 18 zum Verschicken der Mail ist auskommentiert da die Parameter erst angepasst werden müssen). Zur Demo gibt das Skript bei Erstellung einer verdächtigen Datei dies auf der Konsole aus.
Grüße Uwe
Oder man macht das intelligent mit einem Filesystemwatcher der automatisch sofort anspringt wenn eine verdächtige Datei entdeckt wird (Zeile 18 zum Verschicken der Mail ist auskommentiert da die Parameter erst angepasst werden müssen). Zur Demo gibt das Skript bei Erstellung einer verdächtigen Datei dies auf der Konsole aus.
# Ordner der zu überwachen ist (inkl. Unterordner)
$folder = 'C:\Ordner'
$filter = '*.*'
$trigger = '\.(aaa|abc|ccc|ecc|exx|vvv|yxz|zzz|xxx|ttt|micro|encrypted|locky)$|decipher|install_tor|restore_file|want your files back\..*|confirmation\.key|enc_files\.txt|last_chance\.txt|recovery_file\.txt|recovery_key\.txt|help_your_files.*\..*|help_restore.*\..*|HELP_TO_DECRYPT.*\..*|HELP_TO_SAVE.*\..*|HELP_DECRYPT.*\..*|HOW_DECRYPT.*\..*|how_to_recover.*\..*|DecryptAllFiles.*\.txt|DECRYPT_INSTRUCTION.*\..*|recover_instructions.*|\..*yC$'
if(Get-EventSubscriber CryptoCreated -EA SilentlyContinue){Unregister-Event CryptoCreated; Unregister-Event CryptoRenamed}
$fsw = New-Object IO.FileSystemWatcher $folder, $filter -Property @{IncludeSubdirectories = $true;NotifyFilter = [IO.NotifyFilters]'LastWrite,Filename'}
$action = {
$name = $Event.SourceEventArgs.Name
$fullpath = $Event.SourceEventArgs.FullPath
$timeStamp = $Event.TimeGenerated
write-host ($event.SourceEventArgs | fl * | out-string)
if ($name -match $event.MessageData){
# Treffer benachrichtige User ...
$body = "Verdächtige Datei mit den Pfad '$fullpath' wurde um '$($timeStamp.toString('G'))' $(if ($event.SourceEventArgs.Changetype -eq 'Renamed'){'umbenannt'}else{'erstellt'})."
write-host $body -F Yellow
# Send-MailMessage -From "user@domain.de" -to "empfaenger@domain.de" -Subject "Verdächtige Datei entdeckt" -body $body -SmtpServer smtp.domain.de -Credential (New-Object PSCredential("USERNAME",(ConvertTo-SecureString 'PASSWORD' -AsPlainText -Force))) -UseSSL
}
}
Register-ObjectEvent $fsw Created -SourceIdentifier CryptoCreated -Action $action -MessageData $trigger | Out-Null
Register-ObjectEvent $fsw Renamed -SourceIdentifier CryptoRenamed -Action $action -MessageData $trigger | Out-Null
write-host "Überwache Verzeichnis '$folder' auf neue verdächige Dateien ..." -ForegroundColor Green
while($true){sleep(1)}
Zitat von @Kangaroojack:
Klingt interessant.
Aber ich stelle mir das ganze ziemlich Ressourcenhungrig vor, wenn das Ding ne Ordnerstruktrur von ettlichen 100.000 Dateien überwachen soll?
Nein ist es nicht, das ist ja der Vorteil Windows klinkt sich in den Dateisystemtreiber ein und überwacht nur bestimmte Teile beim Platten-Zugriff die nötig sind, das kann man mit den Notify-Filtern optimieren.Klingt interessant.
Aber ich stelle mir das ganze ziemlich Ressourcenhungrig vor, wenn das Ding ne Ordnerstruktrur von ettlichen 100.000 Dateien überwachen soll?
Hast du das Skript bei Dir/Euch am Start?
Das Skript hier nicht aber diverse andere Skripte nach dem selben Schema, wovon es hier von mir noch einige weitere gibt.
Btw. gibt es für FileServer heutzutage von Windows Out-of-the-Box schon eine Überwachungsfunktion von Freigaben:
https://www.frankysweb.de/windows-fileserver-vor-ransomware-crypto-locke ...
https://www.frankysweb.de/windows-fileserver-vor-ransomware-schuetzen-up ...
https://www.frankysweb.de/windows-fileserver-vor-ransomware-crypto-locke ...
https://www.frankysweb.de/windows-fileserver-vor-ransomware-schuetzen-up ...
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen. Merci.