Первый вопрос, поэтому я надеюсь, что я сделаю это правильно. :)Powershell: Brute-forcing защищенный паролем .zip-файл (ускорение процесса)
Сотрудник и я играем с Powershell, получая землю и видим, что вы можете с ней сделать. Используя информацию, мы нашли в Интернете (в основном здесь), нам удалось взбить вместе сценарий для грубой силы, защищенный паролем файл .zip, используя .txt, содержащий список паролей:
# Stopwatch for measurement
$stopWatch = [System.Diagnostics.Stopwatch]::startNew()
$7zipExec = """-7z.exe (7zip) location-"""
$input = """-.zip location-"""
$output = """-where to drop contents of .zip file-"""
$passwordfile = "-location of .txt file containing passwords-"
$windowStyle = "Hidden"
[long] $counter = 0
# Correct password is 12341234
foreach ($password in (get-content $passwordfile)) {
$counter++
Write-Host -NoNewLine "Attempt #($counter): $password"
$arguments = "x -o$output -p$password -aoa $input"
$p = Start-Process $7zipExec -ArgumentList $arguments -Wait -PassThru -WindowStyle $windowStyle
if ($p.ExitCode -eq 0) {
# Password OK
Write-Host " ...OK!"
Write-Host ""
Write-Host "Password is $password, found it after $counter tries."
break
}
elseif ($p.ExitCode -eq 2) {
# Wrong password
Write-Host " ...wrong"
}
else {
# Unknown
Write-Host " ...ERROR"
}
}
# Halt the stopwatch and display the time spent for this process
$stopWatch.Stop()
Write-Host
Write-Host "Done in $($stopWatch.Elapsed.Hours) hour(s), $($stopWatch.Elapsed.Minutes) minute(s) and $($stopWatch.Elapsed.Seconds) seconds(s)"
Read-Host -Prompt "Press Enter to exit"
Это на самом деле работает ! Возможно, это не так чисто, как могло бы быть, но нам удалось достичь нашей цели, чтобы создать функционирующий скрипт.
Однако! Для каждой попытки пароля требуется около 1 секунды, и если у вас есть файл с, скажем, 10 000 наиболее распространенных паролей ... это может занять некоторое время.
Итак, теперь мы пытаемся выяснить, как ускорить процесс, но мы ударили по стене и нуждаемся в помощи. Я не прошу кого-то сделать, но я по-настоящему ценю некоторые подсказки/подсказки/подсказки для тех, кто только недавно начал проникать в Powershell (и любить его до сих пор!).
1. Каков размер .zip-файла? 2. Почему вы не используете какую-то специальную утилиту, которая реализует десятки современных утилит ускорения? 3. Я думаю, что нет необходимости в 'start-process', просто выполните его напрямую и используйте' $ lastExitCode' – wOxxOm
Я сомневаюсь, что PowerShell займет более 10% времени выполнения в вашем коде. Большую часть времени занимает 7-Zip. Помимо того, что ваш код параллелен, чтобы потреблять все ваши ядра, я не вижу возможности для существенного улучшения. – PetSerAl
Вы должны проверить, сколько времени требуется для запуска команды start-process. Скорее всего, это занимает большую часть времени, и если это так, то вам, вероятно, придется многопоточно его использовать. Тем не менее, это может стать уродливым, если несколько 7zips пытаются получить доступ к одному и тому же файлу одновременно ... –