Вы думаете, что текст — это просто буквы? В форензике текст — это минное поле скрытых меток, синтаксических паттернов и артефактов форматирования.
> Что такое стеганография нулевой ширины «на пальцах»?
> В таблице Юникода существуют символы, у которых нулевая ширина (например, \u200B — Zero-Width Space). Человеческий глаз в сообщении их не видит: строчка выглядит как обычное предложение. Однако компьютер видит каждый скрытый байт.
> Спецслужбы и службы безопасности компаний часто вшивают уникальный невидимый бинарный код сотрудника прямо в текст корпоративной рассылки. Когда инсайдер копирует текст и сливает его в анонимный Telegram-канал — криминалист считывает скрытую метку и точно знает имя того, кто сделал утечку.
>
Кроме того, при расследовании PDF-документов злоумышленники часто «замазывают» секретные данные черными прямоугольниками в редакторе, забывая, что под плашкой в текстовом слое исходные буквы остаются нетронутыми!
⚡️ Готовый скрипт: детектор скрытых меток и очистка текста
Скрипт проверяет текст на наличие невидимых символов-маркеров, вычисляет скрытую стеганографию и подготавливает текст к криминалистической экспертизе:
import re
# Набор невидимых символов Юникода (Zero-Width Characters)
ZERO_WIDTH_CHARS = {
'\u200B': 'Zero-Width Space',
'\u200C': 'Zero-Width Non-Joiner',
'\u200D': 'Zero-Width Joiner',
'\uFEFF': 'Zero-Width No-Break Space (BOM)'
}
def analyze_text_forensics(text):
print("[*] Анализ текстового блока на скрытые артефакты...")
hidden_found = []
for i, char in enumerate(text):
if char in ZERO_WIDTH_CHARS:
hidden_found.append((i, ZERO_WIDTH_CHARS[char], hex(ord(char))))
if hidden_found:
print(f"[!] ВНИМАНИЕ: Обнаружено {len(hidden_found)} невидимых символов (возможна стеганография/водяной знак)!")
for pos, name, code in hidden_found[:5]:
print(f" -> Позиция {pos}: {name} ({code})")
if len(hidden_found) > 5:
print(f" -> ...и еще {len(hidden_found) - 5} меток.")
else:
print("[+] Скрытых символов нулевой ширины не обнаружено.")
# Дополнительно: поиск потенциальных утечек (Email, IP)
ips = re.findall(r'\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b', text)
if ips:
print(f"[+] Найдены IP-адреса: {set(ips)}")
# Пример проверки подозрительного сообщения:
suspicious_message = "Служебная\u200B записка:\u200C сервер 192.168.1.45 скомпрометирован."
analyze_text_forensics(suspicious_message)
💡 Мотивация на день
«Преступник может стереть файл, очистить корзину и выключить питание, но законы физики и архитектуры операционных систем обмануть нельзя. Цифровые следы не исчезают — они лишь ждут внимательного криминалиста.»
Пишите в комментариях какие у вас артефакты требуют цифрового вмешательства! 🚀
#цифроваякриминалистика #dfir #digitalforensics #exif #метаданные #стеганография #кибербезопасность #osint #инфосек #киберновости