Разблокировать 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 }