Я экспериментирую с brute force attack
с помощью C++
защищен паролем rar
файл. Я уже в состоянии генерировать все возможные «пароли». Я просто не уверен, как автоматизировать попытки извлечь архив, используя каждую из сгенерированных комбинаций из моей программы. Я на Windows
и я пытаюсь сделать это с WinRar
,
Можно несколько легко сделать что-то вроде:
int main (int argc, char** argv)
{
for (;;) {
/* do something */
cout << clever_password << "\0";
}
}
… а затем в оболочке, просто:
your-clever-password-guesser | \
sed -e 's,'\'','\''"'\''"'\'',g' | \
xargs -0 -n1 -r -t -I {} -- unrar e 'p{}' some-file.rar
Разбивая это:
'\0'
персонаж. Это позволяет паролю (потенциально) содержать такие вещи, как пробелы и символы табуляции, которые в противном случае могли бы «запутаться» в оболочке.sed
защитить тебя от апострофов '
, каждый '
должен быть закодирован как последовательность '\''
(apos-backslash-apos-apos) или '"'"'
(apos-quote-apos-quote-apos), чтобы безопасно пройти через оболочку. s///g
шаблон заменяет каждый '
с '"'"'
, но апострофы, что оно само переходит к sed
написаны как '\''
, (Я смешал стили побега '
чтобы мне было легче отличить апостроф от sed
и спасение апостроф, который sed
добавляет в поток паролей.) Вместо этого можно изменить строки, когда они печатаются в программе C ++.xargs
бежать unrar
с каждым паролем, с параметрами, которые означают:
\0
(-0
)-n1
)-r
) — например если ваша программа вообще не распечатывает возможные пароли.-t
) — это позволяет вам отслеживать предположения, когда они пролетают мимо на вашем экране{}
(-I {}
)--
unrar e
…){}
в 'p{}'
; '
здесь защищают от пробелов и вещей, которые могут быть в паролеЕсли вы хотите попробовать запустить несколько unrar
экземпляры параллельно, вы также можете вставить -P4
в xargs
вызов (например, …-I {} -P4 --
…) Запускать 4 экземпляра одновременно; отрегулируйте это, пока ваша машина не будет слишком загружена, чтобы получить какие-либо преимущества. (Поскольку это, вероятно, связано с дисковым вводом / выводом, вы можете убедиться, что скопировали файл RAR в файловую систему RAM, например /tmp
или же /run
перед его запуском, если он имеет разумный размер, чтобы вы не ожидали много дискового ввода-вывода, но ОС, скорее всего, кеширует файл после нескольких десятков циклов, так что на самом деле это может не сильно помочь в течение долгое время.)
Это грубый способ сделать это, но не требует таких глубоких знаний программирования, как, скажем, использование fork/exec/wait
запускать unrar
процессы, или используя rar
-Включить библиотеку, чтобы сделать это самостоятельно (что, вероятно, даст значительное улучшение в скорости по сравнению с запуском исполняемого файла сотни или тысячи раз)
PS
Впоследствии я понял, что, возможно, вы ищете взаимодействие с фактическим WinRAR™
программа. Вышесказанное совсем не полезно для этого; но это позволит вам запустить командную строку unrar
несколько раз.
Кроме того, если вы работаете в системе Windows, вам необходимо установить некоторые стандартные утилиты оболочки — POSIX-совместимую оболочку Bourne, такую как BASH, sed
, а также xargs
— что может означать, что нужно что-то вроде Cygwin. У меня нет практического опыта работы с системами Windows, чтобы дать хороший совет о том, как это сделать.
Winrar имеет API, хотя он поддерживает только декомпрессию. Это так же просто, как один вызов функции из их API, чтобы попытаться распаковать файл. Перейди по ссылке:
http://www.rarlab.com/rar_add.htm
Удачи!