2016-08-26 13 views
0

Первый вопрос, поэтому я надеюсь, что я сделаю это правильно. :)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 (и любить его до сих пор!).

+0

1. Каков размер .zip-файла? 2. Почему вы не используете какую-то специальную утилиту, которая реализует десятки современных утилит ускорения? 3. Я думаю, что нет необходимости в 'start-process', просто выполните его напрямую и используйте' $ lastExitCode' – wOxxOm

+0

Я сомневаюсь, что PowerShell займет более 10% времени выполнения в вашем коде. Большую часть времени занимает 7-Zip. Помимо того, что ваш код параллелен, чтобы потреблять все ваши ядра, я не вижу возможности для существенного улучшения. – PetSerAl

+0

Вы должны проверить, сколько времени требуется для запуска команды start-process. Скорее всего, это занимает большую часть времени, и если это так, то вам, вероятно, придется многопоточно его использовать. Тем не менее, это может стать уродливым, если несколько 7zips пытаются получить доступ к одному и тому же файлу одновременно ... –

ответ

0

Понадобилось время, чтобы вернуться к этой, реальной жизни и тому подобное, но пока мне не удалось ускорить работу скрипта, мне удалось ускорить этот процесс.

Теперь я запускаю 4 экземпляра сценария одновременно (используя дополнительный скрипт PS для их запуска, который сам можно запустить с помощью пакетного файла).

Все они имеют свои собственные списки паролей и свой собственный каталог вывода (я обнаружил, что при использовании одного и того же местоположения файл, извлеченный скриптом, который нашел пароль, становится непригодным).

Таким образом, для получения 100 000 наиболее часто используемых паролей требуется около 7-8 часов! Хотя я уверен, что есть более быстрые сценарии/программы, я очень доволен результатом.

Спасибо всем за вход!