Здраствуйте, читатели моей темы! Сегодня возникла такая необходимость - взломать архив. Я уже 3 года пишу ботов для telegram, vk, discord, но с архивами работать мне не приходилось, а уж тем более ****ить его пароль. За началом работы - пустой лист программы и примерное представление о предстоящей работе: Подключу библиотеку Rar и просто буду перебирать через [for i in range() for j in range()], но задача оказалась не такой простой, как показалось моей глупенькой голове. Подключить библиотеку оказалось достаточно просто, а вот сделать перебор таким, каким он должен быть уже сложнее: МОЕ РЕШЕНИЕ 1. СНАЧАЛА СОЗДАЕМ СПИСОК С ВСЕМИ НУЖНЫМИ СИМВОЛАМИ КАЖДЫЙ СДЕЛАЕТ СПИСОК ТАК, КАК ЕМУ УДОБНО, ТОЧНО ТАК МОЖНО НЕ ДЕЛАТЬ: ОФОРМЛЯЕМ СПИСОК СИМВОЛОВ eng = 'B, C, D, F, G, H, J, K, L, M, N, P, Q, R, S, T, V, W, X, Y, Z, A, E, I, O, U' eng_small = eng.lower().split(', ') lib = eng.split(', ') + eng_small + [str(i) for i in range(10)] Код eng = 'B, C, D, F, G, H, J, K, L, M, N, P, Q, R, S, T, V, W, X, Y, Z, A, E, I, O, U' eng_small = eng.lower().split(', ') lib = eng.split(', ') + eng_small + [str(i) for i in range(10)] 2. ЗАТЕМ СОЗДАЕМ ФУНКЦИЮ ДЛЯ СИСТЕМЫ ИСЧИСЛЕНИЙ (ДЛЯ ЧЕГО ПОЗЖЕ РАССКАЖУ): СОЗДАНИЕ ПСЕВДОЧИСЛА def count_system([ИМЯ ВАШЕЙ БИБЛИОТЕКИ]): system = {} for i in range(len([ИМЯ ВАШЕЙ БИБЛИОТЕКИ])): system[i] = str([ИМЯ ВАШЕЙ БИБЛИОТЕКИ]) return system Код def count_system([ИМЯ ВАШЕЙ БИБЛИОТЕКИ]): system = {} for i in range(len([ИМЯ ВАШЕЙ БИБЛИОТЕКИ])): system[i] = str([ИМЯ ВАШЕЙ БИБЛИОТЕКИ]) return system 3. ЗАТЕМ ДЕЛАЕМ ФУНКЦИЮ КОТОРАЯ УВИЛИЧИВАЕТ ЧИСЛО В СПИСКЕ НА 1: ФУНКЦИЯ УВЕЛЕЧЕНИЯ ПСЕВДОЧИСЛА def sys_append([СПИСОК - ЧИСЛО], [ДЛИННА БИБЛИОТЕКИ]): for i in range(len([СПИСОК - ЧИСЛО])): if [СПИСОК - ЧИСЛО][i] + 1 >=[ДЛИННА БИБЛИОТЕКИ]: [СПИСОК - ЧИСЛО][i] = [СПИСОК - ЧИСЛО][i] - ([ДЛИННА БИБЛИОТЕКИ]-1) pass elif [СПИСОК - ЧИСЛО]r[i] + 1 < [ДЛИННА БИБЛИОТЕКИ]: [СПИСОК - ЧИСЛО][i] = [СПИСОК - ЧИСЛО][i] + 1 return [СПИСОК - ЧИСЛО] else: return False Код def sys_append([СПИСОК - ЧИСЛО], [ДЛИННА БИБЛИОТЕКИ]): for i in range(len([СПИСОК - ЧИСЛО])): if [СПИСОК - ЧИСЛО][i] + 1 >=[ДЛИННА БИБЛИОТЕКИ]: [СПИСОК - ЧИСЛО][i] = [СПИСОК - ЧИСЛО][i] - ([ДЛИННА БИБЛИОТЕКИ]-1) pass elif [СПИСОК - ЧИСЛО]r[i] + 1 < [ДЛИННА БИБЛИОТЕКИ]: [СПИСОК - ЧИСЛО][i] = [СПИСОК - ЧИСЛО][i] + 1 return [СПИСОК - ЧИСЛО] else: return False ДЕЛО ЗА МАЛЫМ! 4. ПИШЕМ ОСНОВНУЮ ПРОГРАММУ (Я ЕЕ ДЕЛАЛ НА СКОРУЮ РУКУ ПРОСТО ЧТОБЫ ПОЛУЧИТЬ ДОСТУП АРХИВУ, ВЫ ЖЕ МОЖЕТЕ ЕЕ ОТПАЛИРОВАТЬ) ОСНОВНАЯ ПРОГРАММА sys = count_system([ИМЯ ВАШЕЙ БИБЛИОТЕКИ]) #ПРЕОБРАЗОВЫВАЕМ СПИСОК В СЛОВАРЬ direct = [СТРОКА С ПАПКОЙ В КОТОРУЮ БУТЕТ РАЗАРХИВИРОВАННО ВСЕ] try: #ПРОВЕРКА НА НАЛИЧИЕ ПАПКИ И ПОСЛЕДУЮЩИЕ ЕЕ СОЗДАНИЕ mkdir(direct) except FileExistsError: pass file_name, counter, lenght, s_max = 'sec.rar', 0, 1, len(sys) #имя файла, количество переборов, начальная длинна, длинна словаря with rarfile.RarFile(file_name) as archive: while True: ***** = [int(i) for i in list('0' * (lenght))] while True: ***** = sys_append(*****, s_max) if ***** is None: break password = ''.join([sys[i] for i in *****]) if check(password): print(f"[---| {password}") break else: print(f'none: {password}') lenght += 1 Код sys = count_system([ИМЯ ВАШЕЙ БИБЛИОТЕКИ]) #ПРЕОБРАЗОВЫВАЕМ СПИСОК В СЛОВАРЬ direct = [СТРОКА С ПАПКОЙ В КОТОРУЮ БУТЕТ РАЗАРХИВИРОВАННО ВСЕ] try: #ПРОВЕРКА НА НАЛИЧИЕ ПАПКИ И ПОСЛЕДУЮЩИЕ ЕЕ СОЗДАНИЕ mkdir(direct) except FileExistsError: pass file_name, counter, lenght, s_max = 'sec.rar', 0, 1, len(sys) #имя файла, количество переборов, начальная длинна, длинна словаря with rarfile.RarFile(file_name) as archive: while True: ***** = [int(i) for i in list('0' * (lenght))] while True: ***** = sys_append(*****, s_max) if ***** is None: break password = ''.join([sys[i] for i in *****]) if check(password): print(f"[---| {password}") break else: print(f'none: {password}') lenght += 1 СМЫСЛ ПРОГРАММЫ: ЕСЛИ ПЫТАТЬСЯ ПЕРЕБИРАТЬ ЧЕРЕЗ RANGE(), ТО СЛОВА ПОСТОЯННО ПОВТОРЯЮТСЯ, ПОСТОЯННЫЕ ОШИБКИ, БОЛЬШАЯ НАГРУЗКА НА ПК. Я ПОШЕЛ ПО ДРУГОМУ. Я ПРЕДСТАВИЛ НАШ ПАРОЛЬ, КАК ЧИСЛО В НЕКОЙ СИСТЕМЕ ИСЧИСЛЕНИЯ (СИСТЕМА ИСЧИСЛЕНИЯ РАВНАЯ ДЛИННЕ НАШЕГО СЛОВАРЯ), И ПРОСТО, НАЧИНАЯ ОТ ОПРЕДЕЛЕННОЙ ДЛИННЫ СЛОВА, МЫ НАЧИНАЕМ ПЕРЕБОР НАШЕГО ПСЕВДОЧИСЛА, КОТОРОЕ МЫ ПРИОБРАЗУЕМ В СТРОКУ С ПОМОЩЬЮ СЛОВАРЯ. Я ПЫТАЛСЯ СМОТРЕТЬ РЕШЕНИЯ В ИНТЕРНЕТЕ, НО РЕШЕНИЯ ЛИБО ПИСАЛИ НЕУМЕЛЫЕ ПРОГРАММИСТЫ ЛИБО, ОНО ТАКОЕ ОГРОМНОЕ, ЧТО ХОЧЕТСЯ НА ВСЕ ПЛЮНУТЬ И СДЕЛАТЬ САМИМ. ЕСЛИ КОМУ ТО ДАЛ ИДЕЮ, ПОМОГ ВСЕГДА РАД! НА ВОПРОСЫ ОТВЕЧАЮ!
tafiranium, что конкретней мне писать? Мне не нравится твое оформление темы и то что невозможно читать, глаза болят