Разблокировать ZIP-пароль

Забыли пароль

Обычно пароль забывают «частично», т.е. е. запомнить некоторые символы, забывая о других. Aspose.ZIP API позволяет поиграться с такими полузабытыми паролями, чтобы разблокировать архив. В этой статье показано, как угадать пароль для расшифровки zip-архива, зашифрованного с помощью AES.

Определение шаблона пароля

Допустим, ваш пароль начинается с символов «T0p$ecret», за которыми следуют заглавные английские буквы и две цифры. Итак, мы можем описать шаблон следующим образом:

1string template = "T0p$ecret{0}{1}";

где первый заполнитель предназначен для заглавной английской буквы, второй — для двузначного числа.

Проверка единого пароля

Этот простой код расшифровки

1 using (var a = new Archive("encrypted.zip", new ArchiveLoadOptions() {DecryptionPassword = password}))
2    a.ExtractToDirectory(".");

вызывает InvalidDataException, если указан неверный пароль.

Атака на архив методом грубой силы

Так что составляйте и проверяйте пароли один за другим. В случае успеха программа выводит на консоль правильный пароль.

 1    string template = "T0p$ecret{0}{1}";
 2    for (char c = 'A'; c < 'Z'; c++)
 3    {
 4        bool correct = false;
 5        for (int i = 10; i < 99; i++)
 6        {
 7            string password = string.Format(template, c, i);
 8            try
 9            {
10                using (Archive a = new Archive("encrypted.zip", new ArchiveLoadOptions() {DecryptionPassword = password}))
11                a.ExtractToDirectory(".");
12                correct = true;
13            }
14            catch (System.IO.InvalidDataException e)
15            {
16                correct = false;
17            }
18    
19            if (correct)
20            {
21                Console.WriteLine($"Proper password: {password}");
22                break;
23            }
24        }
25
26        if (correct)
27            break;
28    }

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.