cheesemolly95 commited on
Commit
7e33bcd
·
verified ·
1 Parent(s): 32af315

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +14 -16
app.py CHANGED
@@ -4,7 +4,7 @@ import re
4
  def extract_email(text):
5
  """Вытаскивает email"""
6
  match = re.search(r'[\w\.-]+@[\w\.-]+', text)
7
- return match.group(0) if match else None
8
 
9
  def analyze_email(headers, body):
10
  score = 0
@@ -16,9 +16,8 @@ def analyze_email(headers, body):
16
 
17
  if re.search(r"DKIM.*FAIL", headers, re.IGNORECASE):
18
  score += 10
19
- findings.append("<li>DKIM FAIL: Подпись неверна, содержимое могло быть изменено (+10)</li>")
20
-
21
- # Проверка Return-Path (Спуфинг)
22
  from_match = re.search(r"^From:(.*)", headers, re.MULTILINE | re.IGNORECASE)
23
  return_match = re.search(r"^Return-Path:(.*)", headers, re.MULTILINE | re.IGNORECASE)
24
 
@@ -30,9 +29,9 @@ def analyze_email(headers, body):
30
  score += 5
31
  findings.append(f"<li>Отправитель ({from_email}) не совпадает с Return-Path ({return_email}) (+5)</li>")
32
 
33
- keywords_urgency = ["заблокирован", "срочно", "удаление", "ограничен", "suspension", "urgent", "immediate"]
34
- keywords_action = ["подтвердите", "verify", "update", "login", "вход", "пароль", "password"]
35
- keywords_greed = ["бонус", "распродажа", "бесплатно", "раздача", "выигрыш", "скидка", "prize", "gift", "win"]
36
 
37
  body_lower = body.lower()
38
 
@@ -58,29 +57,28 @@ def analyze_email(headers, body):
58
  findings.append(f"<li>IP в ссылке: ({ip_links[0]}) (+5)</li>")
59
 
60
  suspicious_tlds = [".xyz", ".top", ".info", ".club"]
61
- for tld in suspicious_tlds:
62
  if tld in body_lower:
63
- # Проверяем, чтобы это не было частью слова, а именно TLD
64
  if re.search(rf"\w{tld}/\w", body_lower) or re.search(rf"\w{tld}\b", body_lower):
65
  score += 2
66
- findings.append(f"<li>Подозрительный домен: '{tld}' (+2)</li>")
67
 
68
  if score == 0:
69
- verdict_text = "Уровень угрозы: НИЗКИЙ. Явных признаков фишинга не обнаружено."
70
  findings_html = "Угроз не найдено."
71
  elif score < 5:
72
- verdict_text = f"Уровень угрозы: СРЕДНИЙ. Счет: {score}."
73
  findings_html = f"<ul>{''.join(findings)}</ul>"
74
  else:
75
- verdict_text = f"Уровень угрозы: ВЫСОКИЙ. Счет: {score}."
76
  findings_html = f"<ul>{''.join(findings)}</ul>"
77
 
78
  return str(score), verdict_text, findings_html
79
 
80
- headers_input = gr.Textbox(label="1. Служебные заголовки (Headers)", lines=10, placeholder="Received: from...\nSPF: PASS...\nReturn-Path: ...")
81
- body_input = gr.Textbox(label="2. Текст письма (Body)", lines=10, placeholder="Ваш аккаунт заблокирован! Срочно нажмите...")
82
 
83
- score_output = gr.Textbox(label="Итоговый счет угрозы (Очки)", type="text", max_lines=1)
84
  verdict_output = gr.Textbox(label="Финальный вердикт", type="text", max_lines=3)
85
  findings_output = gr.HTML(label="Детализация обнаруженных угроз")
86
 
 
4
  def extract_email(text):
5
  """Вытаскивает email"""
6
  match = re.search(r'[\w\.-]+@[\w\.-]+', text)
7
+ return match.group(0) if match else None # функция вытаскивания емейла засчет [\w\.-] - буквы цифры, точка и дефис
8
 
9
  def analyze_email(headers, body):
10
  score = 0
 
16
 
17
  if re.search(r"DKIM.*FAIL", headers, re.IGNORECASE):
18
  score += 10
19
+ findings.append("<li>DKIM FAIL: Подпись DKIM фальшивая (+10)</li>")
20
+
 
21
  from_match = re.search(r"^From:(.*)", headers, re.MULTILINE | re.IGNORECASE)
22
  return_match = re.search(r"^Return-Path:(.*)", headers, re.MULTILINE | re.IGNORECASE)
23
 
 
29
  score += 5
30
  findings.append(f"<li>Отправитель ({from_email}) не совпадает с Return-Path ({return_email}) (+5)</li>")
31
 
32
+ keywords_urgency = ["заблокирован", "срочно", "удаление", "ограничен", "suspension", "urgent", "immediate", "остановлен", "удален", "удалён", "удалена", "остановлена", "ограничена", "заморожена", "заморожен", "suspended"]
33
+ keywords_action = ["подтвердите", "verify", "update", "login", "вход", "пароль", "password", "аутентификация", "authentication", "войдите", "требуется", "подтверждение", "confirm", "confirmation"]
34
+ keywords_greed = ["freespin", "фриспин", "casino", "казино", "lottery", "1xbet", "лотерея", "бонус", "распродажа", "бесплатно", "раздача", "подарок", "гифт", "giveaway", "выигрыш", "скидка", "prize", "gift", "win", "победитель", "winner", "поздравляем", "congratulations"]
35
 
36
  body_lower = body.lower()
37
 
 
57
  findings.append(f"<li>IP в ссылке: ({ip_links[0]}) (+5)</li>")
58
 
59
  suspicious_tlds = [".xyz", ".top", ".info", ".club"]
60
+ for tld in suspicious_tlds: #tld это топ левел домейн если че (top level domain - домен высшего лвла)
61
  if tld in body_lower:
 
62
  if re.search(rf"\w{tld}/\w", body_lower) or re.search(rf"\w{tld}\b", body_lower):
63
  score += 2
64
+ findings.append(f"<li>Подозрительный домен '{tld}' (+2)</li>")
65
 
66
  if score == 0:
67
+ verdict_text = "Уровень угрозы: низкий. Явных признаков фишинга не обнаружено."
68
  findings_html = "Угроз не найдено."
69
  elif score < 5:
70
+ verdict_text = f"Уровень угрозы средний. Счет: {score}."
71
  findings_html = f"<ul>{''.join(findings)}</ul>"
72
  else:
73
+ verdict_text = f"Уровень угрозы высокий. Счет: {score}."
74
  findings_html = f"<ul>{''.join(findings)}</ul>"
75
 
76
  return str(score), verdict_text, findings_html
77
 
78
+ headers_input = gr.Textbox(label="1. Служебные заголовки", lines=10, placeholder="Received: from...\nSPF: PASS...\nReturn-Path: ...")
79
+ body_input = gr.Textbox(label="2. Текст письма", lines=10, placeholder="Ваш аккаунт заблокирован! Срочно нажмите...")
80
 
81
+ score_output = gr.Textbox(label="Итоговый счет угрозы", type="text", max_lines=1)
82
  verdict_output = gr.Textbox(label="Финальный вердикт", type="text", max_lines=3)
83
  findings_output = gr.HTML(label="Детализация обнаруженных угроз")
84