Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 04.05.2019
Сообщений: 3

Регулярные выражения + потоки + стараюсь в ИБ = не получается

04.05.2019, 21:47. Показов 1296. Ответов 4

Студворк — интернет-сервис помощи студентам
Привет! Пытаюсь написать такую программу, которая по маске (она кстати не работает почему-то нормально, но на https://regex101.com/r/cS2sH3/30 корректно выполняется) будет определять что в текстовом файле записан пароль и выводить на экран. Естественно файлов много, поэтому распараллелил. Слышал еще такую вещь, что в питоне потоки не работают как надо, а на самом деле по-очереди - это правда?

код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import os
import time
import re
import code3
import threading
 
print("Идёт запуск.")
 
starttime = time.time()
exceptText = list()
filesList = list()
 
#функция анализа текстового файла по маске
def analysis(name, end, filesList):
   for file in filesList[name:name+end]:
      path = file
      try:
         encode = code3.main(path) #просто определяет кодировку и применяет её
         f = open(path, 'r', encoding=encode)  # здесь он открывает файл
         text = f.read()
         f.close()
 
         result = re.findall("[пПpP][aAаАоОoO][rRpPрР][оОoO][lLлЛ][ьЬ']\w*\W*\w*|[pP][aA][sS][sS][wW][oO][rR][dD]\w*\W*\w*|[pP][aA][sS][sS]?\w*\W*\w*", text.lower())  # здесь проверяет по маске
         if result != []:
            print(path)
            for pwords in result:  # Здесь он делает игнорирование регистра,
               posIndex = text.lower().find(pwords)  # чтобы по одной маске
               posLen = len(pwords)  # на разные регистры могло работать
               print(text[posIndex:posIndex + posLen])
      except Exception as e:
         #exceptText[name].append(path + "\t" + str(e)) #ловлю еррор
         a = 1 #чтоб не ловить еррор
 
#идем по папкам, формируем список
for root, dirs, files in os.walk("E:/"):
    for file in files:
        if file.endswith(".txt"):
            filesList.append(os.path.join(root, file))
 
threadAmount = 8
if(len(filesList)<8):
   threadAmount = len(filesList)
 
threadList = []
 
#создание и запуск потоков
end = len(filesList)//8       #вычисляю конечный элемент для каждого потока
for i in range(threadAmount):
   if i == 7:                 #если i=7, (то есть если это конечный поток), то делаем конечным элементом ставим последний
      end = len(filesList)
   t = threading.Thread(target=analysis, name=i, args=(i, end, filesList))
   threadList.append(t)
   t.start()
 
#ждём остановки потоков
for t in threadList:
   t.join()
 
print("\n\n-------------------")
print(str(len(filesList)) + " файлов найдено.")
print("Время выполнения -", str(time.time() - starttime))
 
"""
if len(exceptText) > 0:
    print("\n\n-------------------")
    awn = input("Вывести исключения?\nИх " + str(len(exceptText)) + "\nY/N ")
    if awn.lower() == "y":
        for item in exceptText:
            print(item)
"""
code3:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
from chardet.universaldetector import UniversalDetector
 
def main(path):
    detector = UniversalDetector()
    with open(path, 'rb') as fh:
        for line in fh:
            detector.feed(line)
            if detector.done:
                break
        detector.close()
    return(detector.result['encoding'])
 
if __name__ == "__main__":
    main('E:/Program Files/Steam/steamapps/common/RimWorld/Mods/Core/Languages/ChineseSimplified/Strings/Names/Animal_Male.txt')
Проблемы:
1) оптимизация, не понимаю как можно её улучшить.
2) говнокод
3) вывод паролей иногда глючит (из-за параллельности), не понимаю как можно пофиксить
4) может быть еще есть способы определения, что это пароль, а не рецепт маминой выпечки?


Кстати предполагается, что пароли от БД типа mysql, oracle
Пожалуйста, хелп

Добавлено через 8 минут
Есть так же вариант без параллельности, он рабочий
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import os
import time
import re
import code3
 
print("Идёт запуск.")
 
starttime = time.time()
exceptText = list()
filesList = list()
 
 
for root, dirs, files in os.walk("E:/"):
    for file in files:
        if file.endswith(".txt"):
            filesList.append(os.path.join(root, file))
 
 
for file in filesList:
    path = file
    text = ""
    try:
        encode = code3.main(path)
        f = open(path, 'r', encoding=encode)  # здесь он открывает файл
        text = f.read()
        f.close()
 
        result = re.findall("[пПpP][aAаАоОoO][rRpPрР][оОoO][lLлЛ][ьЬ']\w*\W*\w*|[pP][aA][sS][sS][wW][oO][rR][dD]\w*\W*\w*|[pP][aA][sS][sS]?\w*\W*\w*",text.lower())  # здесь проверяет по маске
        if result != []:
            print(path)
            for pwords in result:  # Здесь он делает игнорирование регистра,
                posIndex = text.lower().find(pwords)  # чтобы по одной маске
                posLen = len(pwords)  # на разные регистры могло работать
                print(text[posIndex:posIndex + posLen])
    except Exception as e:
        exceptText.append(path + "\t" + str(e))
 
 
print("\n\n-------------------")
print(str(len(filesList)) + " файлов найдено.")
print("Время выполнения -", str(time.time() - starttime))
 
 
if len(exceptText) > 0:
    print("\n\n-------------------")
    awn = input("Вывести исключения?\nИх " + str(len(exceptText)) + "\nY/N ")
    if awn.lower() == "y":
        for item in exceptText:
            print(item)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.05.2019, 21:47
Ответы с готовыми решениями:

Регулярные выражения. Не получается заменить [i?] на (?<i>\d)
В общем, суть в том, что надо просто заменить на (?&lt;i&gt;\d) и на $i, но вот не получается даже oldTegReg изменить.. string pattern =...

ЧПУ. Замена строк, регулярные выражения. Как правильно использовать переменную в регулярные выражения ?
Здравствуйте! Решил реализовать ЧПУ на своем сайте. Первый этап это замена всех реальных ссылок на чпу ссылки. Так вот при замене я...

Регулярные выражения - вывод сообщения об ошибке при нахождении в строке выражения, начинающегося с цифры
Нужно чтобы при нахождении в строке выражения начинающегося с цифры появлялось сообщение об ошибке,например если ввести :2a,то будет...

4
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
04.05.2019, 23:27
Цитата Сообщение от hardsboi Посмотреть сообщение
будет определять что в текстовом файле записан пароль
А зачем вам именно пароли искать в файлах? Самое главное - в чьих файлах и на чьих машинах?

Цитата Сообщение от hardsboi Посмотреть сообщение
Слышал еще такую вещь, что в питоне потоки не работают как над
Для CPU-bound задач потоки блокируются GIL (такая блокировка в том или ином виде существует не только в Python, а во многих скриптовых языках, где вообще есть хоть что-то похожее на потоки). Поэтому для таких задач в качестве средства распараллеливания используется мультипроцессность (запуск копий процесса интерпретатора реализованный в библиотеке multiprocessing).

Для IO-bound задач (чтение файлов, чтение сокетов, сетевые запросы и т.д.) GIL освобождает блокировку и дает другому потоку поработать, если прочие находятся в состоянии ожидания получения данных. Поэтому в этих задачах потоки вполне дают прирост производительности в сравнении с последовательным исполнением за счет сокращения времени общего ожидания.
1
0 / 0 / 0
Регистрация: 04.05.2019
Сообщений: 3
05.05.2019, 09:20  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
А зачем вам именно пароли искать в файлах? Самое главное - в чьих файлах и на чьих машинах?
Не думаю, что программа уйдет дальше моего пк. Пишу для практики в университете на кафедре, а учусь на иб.

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

Придумал способ получения пароля по хэшу, но для этого, думаю, потребуется очень много вычислительной мощи
Проблема написания алгоритма в том, что я не знаю каким алгоритмом хэшируется пароль на mysql.
Ну а вобще, имея хэширующий алгоритм, можно было бы повторить весь процесс:
1) взятия открытой (для админа офк) базы логинов бд
2) взятие открытой (для админа офк) базы хэшов
3) чтение файла и подставление слова из него в комбинацию с логином и хэширование по алгоритму бд
4) ну и сравнивание двух хэшей.

Таким алгоритмом каждую комбинацию каждого слово файла + каждый логин из бд не проверишь. Но думаю можно было бы проверить только файлы, найденые по маске, например.
0
74 / 29 / 4
Регистрация: 16.10.2017
Сообщений: 95
05.05.2019, 10:22
Цитата Сообщение от hardsboi Посмотреть сообщение
Проблема написания алгоритма в том, что я не знаю каким алгоритмом хэшируется пароль на mysql.
Обычно это внешними программами, нормальные движки используют bcrypt, и на один и тот-же текст каждый раз генерируется разный хэш, так что не разгадаешь.
1
0 / 0 / 0
Регистрация: 04.05.2019
Сообщений: 3
05.05.2019, 12:23  [ТС]
Цитата Сообщение от timen Посмотреть сообщение
на один и тот-же текст каждый раз генерируется разный хэш, так что не разгадаешь.
А кроме как хэша и маски способы существуют вобще?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.05.2019, 12:23
Помогаю со студенческими работами здесь

Регулярные выражения: вставка символов в середину найденного выражения
Есть строки типа этого: &quot;В году 1783 марта месяца произошло событие, которые на долго запомнилось&quot;78. регулярное выражение...

Регулярные выражения. winForm. Проверка на правильность ввода выражения
Добрый день! Я создаю программу которая совершает проверку регулярного выражения, мы только начали его изучать. Условие задания: ...

Полный тупица, но стараюсь преуспеть в sql и c#
Приветствую, всех тех, кто зашел в эту тему! Есть вопрос, ответ на который я, недостойный, уже и не надеюсь найти. Собственно вопрос: ...

Не получается остановить потоки
Доброго времени суток, уважаемые. Прошу вашей помощи, так как очень много времени потратил на данную проблему, но так ничего и не...

Не получается создать потоки
Программа создает три файла со статистикой файлов &quot;типа&quot; логов прокси-сервера, где в качестве статистики считается трафик. Сами файлы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru