Как я могу перенаправить вывод программы Windows C ++ на другой исполняемый файл?

Я экспериментирую с brute force attack с помощью C++ защищен паролем rar файл. Я уже в состоянии генерировать все возможные «пароли». Я просто не уверен, как автоматизировать попытки извлечь архив, используя каждую из сгенерированных комбинаций из моей программы. Я на Windows и я пытаюсь сделать это с WinRar,

3

Решение

Можно несколько легко сделать что-то вроде:

 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 {})
    • Затем выполните следующую команду --
    • Извлечь из файла RAR (unrar e …)
    • С паролем, заменяющим {} в 'p{}'; ' здесь защищают от пробелов и вещей, которые могут быть в пароле
    • Затем имя файла для un-RAR

Если вы хотите попробовать запустить несколько 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, чтобы дать хороший совет о том, как это сделать.

3

Другие решения

Winrar имеет API, хотя он поддерживает только декомпрессию. Это так же просто, как один вызов функции из их API, чтобы попытаться распаковать файл. Перейди по ссылке:
http://www.rarlab.com/rar_add.htm

Удачи!

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector