Найти в Дзене
Т.Е.Х.Н.О Windows & Linux

Анализ артефактов Windows: полная очистка истории USB-устройств

Главный принцип: Эти методы предназначены исключительно для вашего личного компьютера, контроль над которым полностью принадлежит вам. Пожалуйста, прочтите этот раздел целиком, прежде чем запускать какие-либо скрипты или редактировать реестр. Эта статья — не инструкция для начинающих, а продвинутый инструмент для глубокой настройки системы!!! Прежде чем следовать инструкциям ниже, выполните три пункта: Не стоит сразу бросаться в глубины реестра. Я рекомендую действовать поэтапно: Этап 1: Встроенные средства Windows (Безопасно, для всех)
Попробуйте сначала стандартные методы, которые не могут навредить системе: Этап 2: Использование USBOblivion (Продвинутый уровень)
Если встроенных средств недостаточно, переходите к проверенной утилите USBOblivion, как описано в Части 3. Всегда запускайте её сначала в режиме симуляции (/simulate). Этап 3: Мои скрипты и ручная чистка реестра (Экспертный уровень)
Представленные в статье скрипты — это тяжёлая артиллерия для эстетов, созданная в результате
Оглавление

Главный принцип: Эти методы предназначены исключительно для вашего личного компьютера, контроль над которым полностью принадлежит вам.

⚠️ ВАЖНОЕ ПРЕДУПРЕЖДЕНИЕ ПЕРЕД НАЧАЛОМ (Теперь без этого никак, если пишешь что то серьёзное, терпите, закон есть закон)

Пожалуйста, прочтите этот раздел целиком, прежде чем запускать какие-либо скрипты или редактировать реестр. Эта статья — не инструкция для начинающих, а продвинутый инструмент для глубокой настройки системы!!!

🚨 Критичные риски и ответственность:

-2

🛡️ Обязательные меры предосторожности

Прежде чем следовать инструкциям ниже, выполните три пункта:

  1. Создайте точку восстановления системы (Панель управления → Восстановление → Настройка восстановления системы → Создать).
  2. Выполните полный бэкап важных данных на внешний носитель.
  3. Убедитесь, что вы вошли в систему с учётной записью Администратора.

📱 Рекомендуемый путь: от простого к сложному

Не стоит сразу бросаться в глубины реестра. Я рекомендую действовать поэтапно:

Этап 1: Встроенные средства Windows (Безопасно, для всех)
Попробуйте сначала стандартные методы, которые не могут навредить системе:

  • Очистите историю проводника: ПараметрыКонфиденциальность и защитаЖурнал действийОчистить.
  • Используйте Очистку диска (cleanmgr.exe): отметьте «Временные файлы», «Эскизы», «Временные файлы Интернета».
  • Вручную очистите папки «Загрузки» и «Рабочий стол» от ненужных файлов.

Этап 2: Использование USBOblivion (Продвинутый уровень)
Если встроенных средств недостаточно, переходите к проверенной утилите USBOblivion, как описано в
Части 3. Всегда запускайте её сначала в режиме симуляции (/simulate).

Этап 3: Мои скрипты и ручная чистка реестра (Экспертный уровень)
Представленные в статье скрипты — это
тяжёлая артиллерия для эстетов, созданная в результате месяца экспериментов. Используйте их, если:

  • Вам нужна полная, гарантированная очистка всех цифровых следов.
  • Вы понимаете, как читать логи и восстанавливаться из бэкапа.
  • Вы осознаёте все перечисленные выше риски и приняли их.

Если вы прочитали это предупреждение, осознали риски и подготовились — добро пожаловать в мир полного контроля над вашей цифровой тенью.

Начинаем разговор:

Всё началось с простой ситуации, которая, наверное, случалась с каждым. Мне нужно было передать другу архив фотографий с праздника. Я скачал фото с телефона на флешку, отдал другу, а через неделю... увидел эти же фотографии в истории проводника на своём рабочем компьютере. Windows запомнила не только то, что я подключал флешку, но и все файлы, которые на ней были! 😱

В тот момент я осознал: моя цифровая приватность — это иллюзия. И решил разобраться, как заставить Windows забывать всё, что я не хочу, чтобы она помнила. Месяц проб, ошибок, пары переустановок системы и десятков скриптов позже — я готов поделиться с вами полным руководством. Не теорией из интернета, а тем, что реально работает на моём компьютере прямо сейчас.

📌 Часть 1: Разбираемся, что именно Windows о нас помнит

Перед тем как что-то чистить, нужно понять масштаб проблемы. Я сидел три вечера с блокнотом и записывал ВСЕ места, где система хранит информацию о USB-накопителях. Вот что у меня получилось:

Места хранения следов (от самых очевидных к самым скрытым):

1. Реестр Windows — главная база данных:

  • HKLM\SYSTEM\CurrentControlSet\Enum\USBSTOR — здесь лежат паспортные данные каждой флешки
  • HKLM\SYSTEM\MountedDevices — история, какие буквы дисков каким устройствам назначались
  • HKLM\SYSTEM\CurrentControlSet\Control\DeviceClasses — технические ссылки (самое коварное место!)
  • HKLM\SYSTEM\CurrentControlSet\Enum\USB — информация о USB-портах

2. Файловая система:

  • C:\Users\[Ваше имя]\AppData\Roaming\Microsoft\Windows\Recent — ярлыки последних открытых файлов
  • C:\Users\[Ваше имя]\AppData\Local\Microsoft\Windows\Explorer — кэш иконок и превью
  • C:\Windows\Prefetch — информация для ускорения запуска программ

3. Журналы событий:

  • Журнал "Microsoft-Windows-DriverFrameworks-UserMode/Operational"
  • Журнал "Microsoft-Windows-Kernel-PnP/Configuration"

4. Скрытые кэши:

  • Кэш эскизов изображений
  • История автозаполнения проводника
  • Кэш библиотек Windows

🔍 Часть 2: Первый шаг — узнаём "личность" флешки

Каждая флешка имеет уникальный серийный номер. Это как отпечатки пальцев в цифровом мире. Windows использует этот номер для идентификации. Вот как его узнать — три разных способа, которые я проверял лично:

Способ 1: Через PowerShell (самый точный)

# Открываем PowerShell от администратора и вводим:
$driveLetter = Read-Host "Введите букву флешки (например, E:)"
$volume = Get-WmiObject Win32_Volume | Where-Object { $_.DriveLetter -eq $driveLetter }
if ($volume) {
Write-Host "Серийный номер: $($volume.SerialNumber)" -ForegroundColor Green
Write-Host "Метка тома: $($volume.Label)" -ForegroundColor Yellow
Write-Host "Файловая система: $($volume.FileSystem)" -ForegroundColor Cyan
} else {
Write-Host "Флешка не найдена!" -ForegroundColor Red
}

Способ 2: Через командную строку (быстрый)

diskpart
list volume
exit

Способ 3: Через скрипт с сохранением в файл

# save_usb_info.ps1
$usbDrives = Get-WmiObject Win32_Volume | Where-Object { $_.DriveType -eq 2 }
$reportPath = "$env:USERPROFILE\Desktop\USB_Report_$(Get-Date -Format 'yyyyMMdd_HHmm').txt"

"Отчёт о подключённых USB-накопителях" | Out-File $reportPath
"Сформирован: $(Get-Date)" | Out-File $reportPath -Append
"=" * 50 | Out-File $reportPath -Append

foreach ($drive in $usbDrives) {
"Буква диска: $($drive.DriveLetter)" | Out-File $reportPath -Append
"Серийный номер: $($drive.SerialNumber)" | Out-File $reportPath -Append
"Метка: $($drive.Label)" | Out-File $reportPath -Append
"Размер: $([math]::Round($drive.Capacity / 1GB, 2)) GB" | Out-File $reportPath -Append
"Свободно: $([math]::Round($drive.FreeSpace / 1GB, 2)) GB" | Out-File $reportPath -Append
"-" * 30 | Out-File $reportPath -Append
}

Write-Host "Отчёт сохранён: $reportPath" -ForegroundColor Green

Мой совет: используйте первый способ и обязательно записывайте серийный номер. Потом с его помощью вы сможете проверить, удалились ли все следы.

🛡️ Часть 3: USBOblivion — мой первый и главный инструмент

После недели экспериментов с ручной чисткой реестра я понял: нужно что-то автоматизированное. USBOblivion — бесплатная утилита, которая делает 80% работы. Но! Важно использовать её правильно.

Мой пошаговый гайд по USBOblivion:

  1. Скачивание: только с официального сайта (www.cherubicsoft.com/projects/usboblivion)
  2. Подготовка: создайте папку C:\SecurityTools\ и распакуйте туда архив
  3. Первый запуск: обязательно от имени администратора!
  4. Настройка: поставьте галочки:
    Режим симуляции (сначала тест!)
    Сохранить reg-файл отмены
    Только активные устройства (по ситуации)

Мой авторский скрипт для безопасного использования USBOblivion:

# safe_usboblivion_launcher.ps1
# Авторский скрипт для максимально безопасного использования USBOblivion

param(
[string]$Mode = "simulate", # simulate или clean
[switch]$Force
)

# Конфигурация
$USBOblivionPath = "C:\SecurityTools\USBOblivion\USBOblivion.exe"
$BackupDir = "C:\USB_History_Backup\$(Get-Date -Format 'yyyy-MM-dd_HH-mm')"
$LogFile = "$env:TEMP\usb_cleanup_log.txt"

# Проверка прав администратора
function Test-Administrator {
$currentUser = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
return $currentUser.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
}

# Создание резервной копии реестра
function Backup-Registry {
Write-Host "Создаю резервные копии реестра..." -ForegroundColor Yellow

New-Item -ItemType Directory -Path $BackupDir -Force | Out-Null

$registryPaths = @(
"HKLM\SYSTEM\CurrentControlSet\Enum\USBSTOR",
"HKLM\SYSTEM\MountedDevices",
"HKLM\SYSTEM\CurrentControlSet\Control\DeviceClasses",
"HKLM\SYSTEM\CurrentControlSet\Enum\USB",
"HKLM\SOFTWARE\Microsoft\Windows Portable Devices"
)

$backupCount = 0
foreach ($path in $registryPaths) {
$fileName = $path.Replace("\", "_").Replace(":", "") + ".reg"
$fullPath = Join-Path $BackupDir $fileName

try {
# Пытаемся экспортировать раздел реестра
Start-Process -FilePath "reg.exe" -ArgumentList "export `"$path`" `"$fullPath`" /y" -Wait -NoNewWindow
if (Test-Path $fullPath) {
Write-Host " ✓ $path" -ForegroundColor Green
$backupCount++
}
} catch {
Write-Host " ✗ $path (не удалось создать бэкап)" -ForegroundColor DarkGray
}
}

return $backupCount
}

# Основной процесс
Clear-Host
Write-Host "=== БЕЗОПАСНЫЙ ЗАПУСК USBOBLIVION ===" -ForegroundColor Cyan
Write-Host "Версия скрипта: 2.1" -ForegroundColor Gray
Write-Host ""

# Проверка прав
if (-not (Test-Administrator)) {
Write-Host "ОШИБКА: Запустите скрипт от имени Администратора!" -ForegroundColor Red
Write-Host "Правой кнопкой по PowerShell → 'Запустить от имени администратора'" -ForegroundColor Yellow
pause
exit 1
}

# Проверка наличия USBOblivion
if (-not (Test-Path $USBOblivionPath)) {
Write-Host "USBOblivion не найден по пути:" -ForegroundColor Red
Write-Host " $USBOblivionPath" -ForegroundColor Yellow
Write-Host ""
Write-Host "Скачайте с официального сайта:" -ForegroundColor Cyan
Write-Host " https://www.cherubicsoft.com/projects/usboblivion" -ForegroundColor Blue
Write-Host "И распакуйте в указанную папку" -ForegroundColor Cyan
pause
exit 1
}

# Предупреждение
Write-Host "ВНИМАНИЕ: Эта операция удалит историю USB-устройств!" -ForegroundColor Red
Write-Host "Создам точку восстановления и бэкапы реестра." -ForegroundColor Yellow

if (-not $Force) {
$confirm = Read-Host "`nПродолжить? (да/нет)"
if ($confirm -ne 'да') {
Write-Host "Отменено пользователем." -ForegroundColor Yellow
exit 0
}
}

# Шаг 1: Создание точки восстановления
Write-Host "`n[1/4] Создаю точку восстановления системы..." -ForegroundColor Cyan
try {
Checkpoint-Computer -Description "Перед очисткой истории USB устройств" -RestorePointType "MODIFY_SETTINGS"
Write-Host " ✓ Точка восстановления создана" -ForegroundColor Green
} catch {
Write-Host " ⚠ Не удалось создать точку восстановления" -ForegroundColor Yellow
}

# Шаг 2: Создание бэкапов реестра
Write-Host "`n[2/4] Создаю резервные копии реестра..." -ForegroundColor Cyan
$backups = Backup-Registry
Write-Host " Создано бэкапов: $backups" -ForegroundColor Green
Write-Host " Путь к бэкапам: $BackupDir" -ForegroundColor Gray

# Шаг 3: Запуск USBOblivion
Write-Host "`n[3/4] Запускаю USBOblivion..." -ForegroundColor Cyan

if ($Mode -eq "simulate") {
Write-Host " Режим: СИМУЛЯЦИЯ (изменений не будет)" -ForegroundColor Yellow
$arguments = "/silent /simulate"
} else {
Write-Host " Режим: РЕАЛЬНАЯ ОЧИСТКА" -ForegroundColor Red
$arguments = "/silent"

if (-not $Force) {
$finalConfirm = Read-Host "`nВыполнить реальную очистку? (ВВЕДИТЕ 'ПОДТВЕРЖДАЮ' для продолжения)"
if ($finalConfirm -ne 'ПОДТВЕРЖДАЮ') {
Write-Host "Очистка отменена." -ForegroundColor Yellow
exit 0
}
}
}

# Запускаем USBOblivion
try {
$process = Start-Process -FilePath $USBOblivionPath -ArgumentList $arguments -Wait -NoNewWindow -PassThru

if ($process.ExitCode -eq 0) {
Write-Host " ✓ USBOblivion успешно завершил работу" -ForegroundColor Green
} else {
Write-Host " ⚠ USBOblivion завершил работу с кодом: $($process.ExitCode)" -ForegroundColor Yellow
}
} catch {
Write-Host " ✗ Ошибка при запуске USBOblivion: $_" -ForegroundColor Red
}

# Шаг 4: Итоги
Write-Host "`n[4/4] Очистка завершена!" -ForegroundColor Green
Write-Host "=" * 60 -ForegroundColor Cyan

Write-Host "`nЧТО БЫЛО СДЕЛАНО:" -ForegroundColor Cyan
Write-Host " ✓ Создана точка восстановления системы" -ForegroundColor Green
Write-Host " ✓ Созданы резервные копии реестра" -ForegroundColor Green
Write-Host " ✓ Запущена очистка истории USB" -ForegroundColor Green

Write-Host "`nРЕКОМЕНДАЦИИ:" -ForegroundColor Yellow
Write-Host " 1. Перезагрузите компьютер для применения изменений" -ForegroundColor White
Write-Host " 2. Бэкапы реестра сохранены в: $BackupDir" -ForegroundColor White
Write-Host " 3. Проверьте журналы событий на наличие ошибок" -ForegroundColor White

Write-Host "`nСОВЕТ:" -ForegroundColor Cyan
Write-Host " Для проверки результата подключите флешку заново." -ForegroundColor Gray
Write-Host " Система должна определить её как новое устройство." -ForegroundColor Gray

# Сохранение лога
"=== Лог очистки USB ===" | Out-File $LogFile
"Дата: $(Get-Date)" | Out-File $LogFile -Append
"Режим: $Mode" | Out-File $LogFile -Append
"Бэкапы созданы в: $BackupDir" | Out-File $LogFile -Append
"USBOblivion путь: $USBOblivionPath" | Out-File $LogFile -Append
"" | Out-File $LogFile -Append

Write-Host "`nЛог операции сохранён: $LogFile" -ForegroundColor Gray

if ($Mode -eq "clean") {
Write-Host "`n⚠ ТРЕБУЕТСЯ ПЕРЕЗАГРУЗКА!" -ForegroundColor Red
$reboot = Read-Host "Перезагрузить сейчас? (да/нет)"
if ($reboot -eq 'да') {
Write-Host "Перезагрузка через 10 секунд..." -ForegroundColor Yellow
Start-Sleep -Seconds 10
Restart-Computer -Force
}
}

========================

✅ Подпишитесь на канал - (это бесплатно и очень помогает алгоритму)
❤️ Поставьте лайк - (это один клик, а нам очень важно)
🔄 Репостните друзьям - (которые играют в танки и жалуются на FPS)
💰 Задонатьте (Даже 50 руб. - это топливо для новых статей, скриптов и пошаговых инструкция для Вас. Большое Спасибо понимающим! 🙏
Вы не обязаны, просто могли бы:)
Вы не обязаны, просто могли бы:)
💰ПОДДЕРЖАТЬ КАНАЛ МОЖНО ТУТ ( ОТ 50 РУБЛЕЙ )💰
Или сделать любой перевод по ССЫЛКЕ или QR-коду через СБП. Быстро, безопасно и без комиссии. ( Александр Г. ) "Т.Е.Х.Н.О Windows & Linux".

=========================

📊 Часть 4: Моя сравнительная таблица методов очистки

Я тестировал все методы на виртуальной машине и своём основном компьютере. Вот объективные результаты:

-4

🔧 Часть 5: Глубокая ручная очистка (когда USBOblivion недостаточно)

Через две недели использования USBOblivion я заметил: некоторые флешки всё равно оставляют следы. Пришлось лезть в дебри реестра. Вот что я узнал:

Самые хитрые места в реестре:

  1. Ключи DeviceClasses — Windows создаёт сложные структуры с GUID-идентификаторами
  2. Журналы SetupAPI — логи установки оборудования
  3. Кэши драйверов — система кэширует драйверы для ускорения

Мой скрипт для поиска скрытых следов:

# find_hidden_usb_traces.ps1
# Поиск следов USB-устройств по серийному номеру

param(
[string]$SerialNumber,
[switch]$DeepScan
)

Clear-Host
Write-Host "=== ПОИСК СКРЫТЫХ СЛЕДОВ USB ===" -ForegroundColor Cyan
Write-Host "Версия: 1.3" -ForegroundColor Gray
Write-Host ""

if (-not $SerialNumber) {
$SerialNumber = Read-Host "Введите серийный номер флешки (или его часть)"
}

if ([string]::IsNullOrWhiteSpace($SerialNumber)) {
Write-Host "Серийный номер не может быть пустым!" -ForegroundColor Red
exit 1
}

# Нормализация серийного номера
$SerialNumber = $SerialNumber.Trim().ToUpper()
Write-Host "Ищем следы для серийного номера: $SerialNumber" -ForegroundColor Yellow
Write-Host ""

# Места для поиска (основные)
$searchPaths = @(
"HKLM:\SYSTEM\CurrentControlSet\Enum",
"HKLM:\SYSTEM\CurrentControlSet\Control\DeviceClasses",
"HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\EMDMgmt",
"HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2"
)

# Дополнительные места для глубокого сканирования
if ($DeepScan) {
$searchPaths += @(
"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches",
"HKLM:\SOFTWARE\Microsoft\Windows Search",
"HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs"
)
}

$results = @()
$totalChecked = 0

foreach ($basePath in $searchPaths) {
Write-Host "Поиск в: $basePath" -ForegroundColor Gray

if (Test-Path $basePath) {
try {
# Получаем все подразделы
$keys = Get-ChildItem -Path $basePath -Recurse -ErrorAction SilentlyContinue
$totalChecked += $keys.Count

foreach ($key in $keys) {
# Поиск в имени ключа
if ($key.PSChildName -match $SerialNumber) {
$result = [PSCustomObject]@{
Тип = "Ключ реестра"
Путь = $key.Name
Значение = $key.PSChildName
Уровень = "Высокий"
}
$results += $result
}

# Поиск в значениях ключа
$properties = Get-ItemProperty -Path $key.PSPath -ErrorAction SilentlyContinue
if ($properties) {
foreach ($prop in $properties.PSObject.Properties) {
if ($prop.Value -and $prop.Value.ToString() -match $SerialNumber) {
$result = [PSCustomObject]@{
Тип = "Значение реестра"
Путь = $key.Name
Значение = "$($prop.Name) = $($prop.Value.ToString().Substring(0, [Math]::Min(50, $prop.Value.ToString().Length))...)"
Уровень = "Средний"
}
$results += $result
}
}
}
}
} catch {
Write-Host " Ошибка доступа: $_" -ForegroundColor DarkYellow
}
}
}

# Поиск в файловой системе
Write-Host "`nПоиск в файловой системе..." -ForegroundColor Gray

$fileLocations = @(
"$env:APPDATA\Microsoft\Windows\Recent",
"$env:LOCALAPPDATA\Microsoft\Windows\Explorer",
"$env:USERPROFILE\AppData\Local\Microsoft\Windows\History",
"$env:WINDIR\System32\config\systemprofile\AppData\Local\Microsoft\Windows"
)

foreach ($location in $fileLocations) {
if (Test-Path $location) {
try {
$files = Get-ChildItem -Path $location -Recurse -File -ErrorAction SilentlyContinue |
Where-Object { $_.Name -match $SerialNumber -or (Get-Content $_.FullName -Raw -ErrorAction SilentlyContinue) -match $SerialNumber }

foreach ($file in $files) {
$result = [PSCustomObject]@{
Тип = "Файл"
Путь = $file.DirectoryName
Значение = $file.Name
Уровень = "Низкий"
}
$results += $result
}
} catch {
# Пропускаем ошибки доступа
}
}
}

# Вывод результатов
Write-Host "`n" + "=" * 70 -ForegroundColor Cyan
Write-Host "РЕЗУЛЬТАТЫ ПОИСКА" -ForegroundColor Cyan
Write-Host "=" * 70 -ForegroundColor Cyan

Write-Host "Проверено записей: $totalChecked" -ForegroundColor Gray
Write-Host "Найдено совпадений: $($results.Count)" -ForegroundColor $(if ($results.Count -eq 0) { "Green" } else { "Yellow" })

if ($results.Count -gt 0) {
Write-Host "`nСОВПАДЕНИЯ (сгруппированы по типу):" -ForegroundColor Yellow

# Группируем по типу
$groupedResults = $results | Group-Object Тип

foreach ($group in $groupedResults) {
Write-Host "`n$($group.Name): $($group.Count) записей" -ForegroundColor Cyan

foreach ($item in $group.Group | Select-Object -First 3) {
Write-Host " • $($item.Значение)" -ForegroundColor Gray
Write-Host " Путь: $($item.Путь)" -ForegroundColor DarkGray
}

if ($group.Count -gt 3) {
Write-Host " ... и ещё $($group.Count - 3) записей" -ForegroundColor DarkGray
}
}

# Рекомендации по удалению
Write-Host "`n" + "=" * 70 -ForegroundColor Red
Write-Host "РЕКОМЕНДАЦИИ ПО УДАЛЕНИЮ:" -ForegroundColor Red

if ($results.Where{ $_.Уровень -eq "Высокий" }) {
Write-Host "`n⚠ ВЫСОКИЙ РИСК (ключи реестра):" -ForegroundColor Red
Write-Host " 1. Откройте regedit.exe" -ForegroundColor White
Write-Host " 2. Найдите каждый ключ из списка" -ForegroundColor White
Write-Host " 3. Щёлкните правой кнопкой → Экспорт (создайте бэкап!)" -ForegroundColor White
Write-Host " 4. Удалите ключ" -ForegroundColor White
Write-Host " 5. Перезагрузите компьютер" -ForegroundColor White
}

if ($results.Where{ $_.Уровень -eq "Средний" }) {
Write-Host "`n⚠ СРЕДНИЙ РИСК (значения реестра):" -ForegroundColor Yellow
Write-Host " Можно удалить через regedit, но будьте осторожны!" -ForegroundColor White
}

if ($results.Where{ $_.Уровень -eq "Низкий" }) {
Write-Host "`n✅ НИЗКИЙ РИСК (файлы):" -ForegroundColor Green
Write-Host " Удалите файлы через проводник" -ForegroundColor White
}

Write-Host "`n❗ ВАЖНО: Создайте точку восстановления перед удалением!" -ForegroundColor Red
} else {
Write-Host "`n🎉 ОТЛИЧНЫЕ НОВОСТИ!" -ForegroundColor Green
Write-Host "Следов флешки не обнаружено. Система чиста!" -ForegroundColor Green
}

# Сохранение отчёта
$reportPath = "$env:USERPROFILE\Desktop\USB_Traces_Report_$(Get-Date -Format 'yyyyMMdd_HHmm').txt"
$results | Format-List | Out-File $reportPath
Write-Host "`nПолный отчёт сохранён: $reportPath" -ForegroundColor Gray

Канал «Каморка Программиста» — это простые разборы программирования, языков, фреймворков и веб-дизайна. Всё для новичков и профессионалов.
-5
Каморка Программиста | Дзен
Присоединяйся прямо сейчас.

🚀 Часть 6: Мой супер-скрипт полной очистки (всё в одном!)

После месяца экспериментов я создал универсальный скрипт, который делает всё:

# complete_usb_history_cleaner.ps1
# Полная очистка следов USB-устройств в Windows
# ВНИМАНИЕ: Только для опытных пользователей!

param(
[switch]$QuickMode,
[switch]$NoBackup,
[switch]$Force
)

# Конфигурация
$SCRIPT_VERSION = "3.0.0"
$USBOBLIVION_PATH = "C:\SecurityTools\USBOblivion\USBOblivion.exe"
$BACKUP_ROOT = "C:\SystemBackups\USB_Cleanup"
$LOG_FILE = "$env:TEMP\Complete_USB_Cleanup_$(Get-Date -Format 'yyyyMMdd_HHmm').log"

# Функция логирования
function Write-Log {
param([string]$Message, [string]$Level = "INFO")

$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
$logEntry = "$timestamp [$Level] $Message"

Add-Content -Path $LOG_FILE -Value $logEntry

switch ($Level) {
"INFO" { Write-Host $Message -ForegroundColor Gray }
"SUCCESS" { Write-Host $Message -ForegroundColor Green }
"WARNING" { Write-Host $Message -ForegroundColor Yellow }
"ERROR" { Write-Host $Message -ForegroundColor Red }
"STEP" { Write-Host $Message -ForegroundColor Cyan }
default { Write-Host $Message -ForegroundColor White }
}
}

# Функция создания точки восстановления
function Create-RestorePoint {
Write-Log "Создание точки восстановления системы..." "STEP"

try {
$checkpoint = Checkpoint-Computer -Description "Полная очистка истории USB [$SCRIPT_VERSION]" -RestorePointType "MODIFY_SETTINGS" -ErrorAction Stop
Write-Log "Точка восстановления успешно создана" "SUCCESS"
return $true
} catch {
Write-Log "Не удалось создать точку восстановления: $_" "WARNING"
return $false
}
}

# Функция бэкапа реестра
function Backup-RegistrySections {
$backupDir = "$BACKUP_ROOT\$(Get-Date -Format 'yyyyMMdd_HHmmss')"
New-Item -ItemType Directory -Path $backupDir -Force | Out-Null

Write-Log "Создание резервных копий реестра..." "STEP"

$registrySections = @(
@{Path = "HKLM\SYSTEM\CurrentControlSet\Enum\USBSTOR"; Name = "USBSTOR"},
@{Path = "HKLM\SYSTEM\MountedDevices"; Name = "MountedDevices"},
@{Path = "HKLM\SYSTEM\CurrentControlSet\Control\DeviceClasses"; Name = "DeviceClasses"},
@{Path = "HKLM\SYSTEM\CurrentControlSet\Enum\USB"; Name = "USB"},
@{Path = "HKLM\SOFTWARE\Microsoft\Windows Portable Devices"; Name = "PortableDevices"},
@{Path = "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2"; Name = "MountPoints2"}
)

$successCount = 0
foreach ($section in $registrySections) {
$backupFile = "$backupDir\$($section.Name).reg"

try {
Start-Process -FilePath "reg.exe" -ArgumentList "export `"$($section.Path)`" `"$backupFile`" /y" -Wait -NoNewWindow -ErrorAction Stop
if (Test-Path $backupFile) {
Write-Log " ✓ $($section.Name)" "SUCCESS"
$successCount++
}
} catch {
Write-Log " ✗ $($section.Name) (ошибка: $_)" "WARNING"
}
}

Write-Log "Создано бэкапов: $successCount из $($registrySections.Count)" "INFO"
return $backupDir
}

# Функция очистки через USBOblivion
function Clean-WithUSBOblivion {
if (-not (Test-Path $USBOBLIVION_PATH)) {
Write-Log "USBOblivion не найден, пропускаю этот шаг" "WARNING"
return $false
}

Write-Log "Запуск USBOblivion..." "STEP"

try {
# Сначала симуляция
Write-Log "Режим симуляции..." "INFO"
$simulate = Start-Process -FilePath $USBOBLIVION_PATH -ArgumentList "/silent /simulate" -Wait -NoNewWindow -PassThru

if ($simulate.ExitCode -eq 0) {
Write-Log "Симуляция успешна" "SUCCESS"

# Реальная очистка
Write-Log "Запуск реальной очистки..." "INFO"
$clean = Start-Process -FilePath $USBOBLIVION_PATH -ArgumentList "/silent" -Wait -NoNewWindow -PassThru

if ($clean.ExitCode -eq 0) {
Write-Log "USBOblivion успешно выполнил очистку" "SUCCESS"
return $true
} else {
Write-Log "USBOblivion завершился с кодом: $($clean.ExitCode)" "WARNING"
return $false
}
} else {
Write-Log "Симуляция завершилась с ошибкой" "WARNING"
return $false
}
} catch {
Write-Log "Ошибка запуска USBOblivion: $_" "ERROR"
return $false
}
}

# Функция очистки файловых кэшей
function Clear-FileCaches {
Write-Log "Очистка файловых кэшей..." "STEP"

$cacheLocations = @(
@{Path = "$env:APPDATA\Microsoft\Windows\Recent"; Description = "Недавние документы"},
@{Path = "$env:LOCALAPPDATA\Microsoft\Windows\Explorer"; Description = "Кэш проводника"},
@{Path = "$env:USERPROFILE\AppData\Local\Microsoft\Windows\History"; Description = "История"},
@{Path = "$env:LOCALAPPDATA\Microsoft\Windows\WebCache"; Description = "Веб-кэш"},
@{Path = "$env:TEMP"; Description = "Временные файлы"},
@{Path = "$env:WINDIR\Temp"; Description = "Системные временные файлы"},
@{Path = "$env:WINDIR\Prefetch"; Description = "Prefetch"}
)

$cleanedCount = 0
foreach ($location in $cacheLocations) {
if (Test-Path $location.Path) {
try {
# Удаляем только файлы старше 1 дня
$files = Get-ChildItem -Path $location.Path -Recurse -File -ErrorAction SilentlyContinue |
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-1) }

$fileCount = 0
foreach ($file in $files) {
try {
Remove-Item $file.FullName -Force -ErrorAction Stop
$fileCount++
} catch {
# Игнорируем ошибки удаления отдельных файлов
}
}

if ($fileCount -gt 0) {
Write-Log " $($location.Description): удалено $fileCount файлов" "INFO"
$cleanedCount++
}
} catch {
Write-Log " Ошибка доступа к $($location.Path)" "WARNING"
}
}
}

Write-Log "Очищено кэшей: $cleanedCount" "SUCCESS"
}

# Функция очистки журналов событий
function Clear-EventLogs {
Write-Log "Очистка журналов событий..." "STEP"

$eventLogs = @(
"Microsoft-Windows-DriverFrameworks-UserMode/Operational",
"Microsoft-Windows-Kernel-PnP/Configuration",
"Microsoft-Windows-StorPort/Operational",
"System",
"Application"
)

foreach ($log in $eventLogs) {
try {
wevtutil.exe clear-log $log 2>$null
Write-Log " Очищен: $log" "INFO"
} catch {
Write-Log " Не удалось очистить: $log" "WARNING"
}
}

Write-Log "Журналы событий очищены" "SUCCESS"
}

# Функция очистки корзины
function Clear-RecycleBins {
Write-Log "Очистка корзин всех пользователей..." "STEP"

try {
# Очищаем корзину текущего пользователя
Clear-RecycleBin -Force -ErrorAction SilentlyContinue

# Пытаемся очистить корзины всех пользователей через Cleanmgr
Start-Process "cleanmgr.exe" -ArgumentList "/sagerun:1" -Wait -NoNewWindow -ErrorAction SilentlyContinue

Write-Log "Корзины очищены" "SUCCESS"
} catch {
Write-Log "Не удалось очистить корзины" "WARNING"
}
}

# Функция дополнительных очисток
function Perform-AdditionalCleaning {
Write-Log "Выполнение дополнительных очисток..." "STEP"

# Очистка DNS кэша
try {
ipconfig /flushdns 2>$null | Out-Null
Write-Log " DNS кэш очищен" "INFO"
} catch {
Write-Log " Не удалось очистить DNS кэш" "WARNING"
}

# Очистка кэша эскизов
try {
Remove-Item "$env:LOCALAPPDATA\Microsoft\Windows\Explorer\thumbcache_*.db" -ErrorAction SilentlyContinue
Write-Log " Кэш эскизов очищен" "INFO"
} catch {
Write-Log " Не удалось очистить кэш эскизов" "WARNING"
}

# Перезапуск проводника
try {
Get-Process -Name explorer -ErrorAction SilentlyContinue | Stop-Process -Force
Start-Sleep -Seconds 2
Start-Process "explorer.exe"
Write-Log " Проводник перезапущен" "INFO"
} catch {
Write-Log " Не удалось перезапустить проводник" "WARNING"
}
}

# Функция проверки результата
function Test-CleanupResult {
Write-Log "Проверка результатов очистки..." "STEP"

$tests = @()

# Проверка наличия USBSTOR в реестре
try {
$usbstor = Get-ChildItem "HKLM:\SYSTEM\CurrentControlSet\Enum\USBSTOR" -ErrorAction SilentlyContinue
$tests += @{Name = "Реестр USBSTOR"; Result = if ($usbstor) { "FAIL" } else { "PASS" }}
} catch {
$tests += @{Name = "Реестр USBSTOR"; Result = "PASS"}
}

# Проверка MountedDevices
try {
$mountedDevices = Get-ItemProperty "HKLM:\SYSTEM\MountedDevices" -ErrorAction SilentlyContinue
$hasUSB = $false
if ($mountedDevices) {
$properties = $mountedDevices.PSObject.Properties | Where-Object { $_.Name -match "^\\DosDevices\\[D-Z]:" }
$hasUSB = $properties.Count -gt 0
}
$tests += @{Name = "MountedDevices"; Result = if ($hasUSB) { "WARN" } else { "PASS" }}
} catch {
$tests += @{Name = "MountedDevices"; Result = "PASS"}
}

# Вывод результатов проверки
Write-Log "`nРЕЗУЛЬТАТЫ ПРОВЕРКИ:" "STEP"
foreach ($test in $tests) {
$color = switch ($test.Result) {
"PASS" { "Green" }
"WARN" { "Yellow" }
"FAIL" { "Red" }
default { "Gray" }
}
Write-Host " $($test.Name): " -NoNewline -ForegroundColor Gray
Write-Host "$($test.Result)" -ForegroundColor $color
}
}

# Основной процесс
Clear-Host
Write-Host "=" * 70 -ForegroundColor Cyan
Write-Host "ПОЛНАЯ ОЧИСТКА СЛЕДОВ USB-УСТРОЙСТВ" -ForegroundColor Cyan
Write-Host "Версия: $SCRIPT_VERSION" -ForegroundColor Gray
Write-Host "=" * 70 -ForegroundColor Cyan
Write-Host ""

# Проверка прав администратора
$currentUser = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
if (-not $currentUser.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
Write-Log "ОШИБКА: Требуются права администратора!" "ERROR"
Write-Log "Запустите скрипт от имени администратора" "INFO"
pause
exit 1
}

# Предупреждение
Write-Log "ВНИМАНИЕ: Этот скрипт удалит ВСЕ следы USB-устройств!" "WARNING"
Write-Log "Будут затронуты: реестр, кэши, журналы событий" "WARNING"
Write-Log ""

if (-not $Force) {
Write-Host "Выполняемые действия:" -ForegroundColor Yellow
Write-Host " 1. Создание точки восстановления" -ForegroundColor Gray
Write-Host " 2. Бэкап реестра (если не отключен)" -ForegroundColor Gray
Write-Host " 3. Очистка через USBOblivion" -ForegroundColor Gray
Write-Host " 4. Очистка файловых кэшей" -ForegroundColor Gray
Write-Host " 5. Очистка журналов событий" -ForegroundColor Gray
Write-Host " 6. Очистка корзин" -ForegroundColor Gray
Write-Host " 7. Дополнительные очистки" -ForegroundColor Gray
Write-Host ""

$confirmation = Read-Host "Для продолжения введите 'ПОДТВЕРЖДАЮ'"
if ($confirmation -ne 'ПОДТВЕРЖДАЮ') {
Write-Log "Отменено пользователем" "INFO"
exit 0
}
}

try {
# Шаг 1: Создание точки восстановления
if (-not $QuickMode) {
$restorePointCreated = Create-RestorePoint
}

# Шаг 2: Бэкап реестра
$backupPath = $null
if (-not $NoBackup -and -not $QuickMode) {
$backupPath = Backup-RegistrySections
}

# Шаг 3: Очистка через USBOblivion
$usbOblivionResult = Clean-WithUSBOblivion

# Шаг 4: Очистка файловых кэшей
Clear-FileCaches

# Шаг 5: Очистка журналов событий
if (-not $QuickMode) {
Clear-EventLogs
}

# Шаг 6: Очистка корзин
Clear-RecycleBins

# Шаг 7: Дополнительные очистки
if (-not $QuickMode) {
Perform-AdditionalCleaning
}

# Шаг 8: Проверка результатов
Test-CleanupResult

# Итоги
Write-Host "`n" + "=" * 70 -ForegroundColor Green
Write-Host "ОЧИСТКА ЗАВЕРШЕНА!" -ForegroundColor Green
Write-Host "=" * 70 -ForegroundColor Green

Write-Log "`nИТОГИ ВЫПОЛНЕНИЯ:" "STEP"
Write-Host " ✓ Точка восстановления: $(if ($restorePointCreated) { 'Создана' } else { 'Пропущена' })" -ForegroundColor $(if ($restorePointCreated) { "Green" } else { "Yellow" })
Write-Host " ✓ Бэкап реестра: $(if ($backupPath) { $backupPath } else { 'Пропущен' })" -ForegroundColor $(if ($backupPath) { "Green" } else { "Yellow" })
Write-Host " ✓ USBOblivion: $(if ($usbOblivionResult) { 'Успешно' } else { 'С ошибками' })" -ForegroundColor $(if ($usbOblivionResult) { "Green" } else { "Yellow" })
Write-Host " ✓ Файловые кэши: Очищены" -ForegroundColor Green
Write-Host " ✓ Журналы событий: $(if (-not $QuickMode) { 'Очищены' } else { 'Пропущены' })" -ForegroundColor $(if (-not $QuickMode) { "Green" } else { "Yellow" })

Write-Log "`nРЕКОМЕНДАЦИИ ПОСЛЕ ОЧИСТКИ:" "STEP"
Write-Host " 1. ПЕРЕЗАГРУЗИТЕ компьютер для применения изменений" -ForegroundColor Red
Write-Host " 2. Проверьте диспетчер устройств (Win + X → Диспетчер устройств)" -ForegroundColor Yellow
Write-Host " 3. Убедитесь, что все USB-порты работают" -ForegroundColor Yellow
Write-Host " 4. При тестовом подключении флешка должна определиться как новое устройство" -ForegroundColor Yellow

if ($backupPath) {
Write-Host "`n📁 Бэкапы сохранены в: $backupPath" -ForegroundColor Gray
}

Write-Host "📄 Лог операции: $LOG_FILE" -ForegroundColor Gray

# Предложение перезагрузки
Write-Host "`n"
$rebootChoice = Read-Host "Перезагрузить компьютер сейчас? (да/нет)"
if ($rebootChoice -eq 'да') {
Write-Log "Перезагрузка через 10 секунд..." "INFO"
Start-Sleep -Seconds 10
Restart-Computer -Force
}

} catch {
Write-Log "КРИТИЧЕСКАЯ ОШИБКА: $_" "ERROR"
Write-Log "Стек вызовов: $($_.ScriptStackTrace)" "ERROR"

if ($backupPath) {
Write-Host "`n🔄 Для восстановления используйте бэкапы из: $backupPath" -ForegroundColor Yellow
}

Write-Host "📄 Лог ошибок: $LOG_FILE" -ForegroundColor Gray
pause
exit 1
}

Write-Log "Скрипт успешно завершён!" "SUCCESS"

📈 Часть 7: Моя статистика и результаты тестирования

Я вёл подробный журнал всех очисток за 30 дней. Вот объективные данные:

-6

Вывод: Полная очистка даёт лучший результат, но слегка замедляет первичное определение новых устройств.

🚨 Часть 8: Что делать, если всё сломалось (чек-лист восстановления)

За месяц я трижды доводил систему до нерабочего состояния. Вот мой алгоритм восстановления:

Ситуация 1: Не работают USB-порты

1. Win + R → rstrui → Выбрать последнюю точку восстановления
2. Если не помогло: Диспетчер устройств → Контроллеры USB → Удалить все устройства
3. Действие → Обновить конфигурацию оборудования
4. Перезагрузка

Ситуация 2: Пропали буквы дисков

1. Win + X → Windows PowerShell (администратор)
2. Ввести:
diskpart
list volume
select volume X (где X — номер тома)
assign letter=Y (где Y — нужная буква)

Ситуация 3: Система не загружается

1. Загрузиться с установочной флешки Windows
2. Выбрать "Восстановление системы"
3. Использовать точку восстановления

💡 Часть 9: Мои уникальные лайфхаки (нигде такого не найдёте!)

  1. Лайфхак для параноиков: После очистки создайте виртуальную машину, подключите туда флешку, и уже оттуда копируйте файлы на основной компьютер. Следов не останется вообще.
  2. Автоматизация без риска: Настройте Task Scheduler на запуск скрипта очистки при каждом выходе из системы, но ТОЛЬКО если в системе были USB-устройства. Мой скрипт для этого:

# detect_and_clean.ps1
$usbDevices = Get-PnpDevice -Class USB | Where-Object { $_.FriendlyName -like "*USB*" }
if ($usbDevices) {
& "C:\SecurityTools\complete_usb_history_cleaner.ps1" -QuickMode
}

  1. Секретная папка для особо важных данных: Создайте зашифрованный контейнер VeraCrypt, подключайте его как виртуальный диск. Windows не оставляет следов о его содержимом.
  2. Невидимая флешка: Отформатируйте флешку в exFAT с меткой "System Reserved". Windows обрабатывает такие диски по-особому.

❓ Часть 10: Ответы на вопросы, которые мне задавали чаще всего

Вопрос: Это точно легально?

Ответ: Абсолютно. Вы чистите СВОЙ компьютер. Но на рабочем месте могут быть корпоративные политики.

Вопрос: Можно ли настроить Windows, чтобы она вообще не следила?

Ответ: Частично. Отключите службы Diagnostic* и Telemetry*, но полной приватности не добиться.

Вопрос: Антивирусы мешают?

Ответ: Да! Особенно Kaspersky и Norton. На время очистки отключайте защиту в реальном времени.

Вопрос: Windows 11/10 — есть разница?

Ответ: В Windows 11 слежка усилена, но методы очистки те же.

Вопрос: Как часто нужно чистить?

Ответ: После каждого использования чужих флешек. Свои — раз в месяц.

🎯 Часть 11: Ваш план действий на первые 24 часа

Час 1-2: Подготовка

  1. Скачайте USBOblivion
  2. Создайте папку C:\SecurityTools\
  3. Сохраните туда мои скрипты
  4. Создайте точку восстановления

Час 3-4: Первый запуск

  1. Запустите safe_usboblivion_launcher.ps1 в режиме симуляции
  2. Изучите, что будет удалено
  3. Запустите реальную очистку
  4. Перезагрузитесь

Час 5-8: Глубокая очистка

  1. Найдите серийный номер своей флешки
  2. Запустите find_hidden_usb_traces.ps1
  3. Удалите найденные следы через regedit
  4. Снова перезагрузитесь

Час 9-24: Тестирование и настройка

  1. Протестируйте работу USB-портов
  2. Настройте автоматическую очистку (если нужно)
  3. Создайте ярлыки для быстрого запуска скриптов
  4. Проверьте систему на стабильность

🌟 Заключение: Почему это важно и что это даёт лично вам

Месяц назад я был обычным пользователем, который боялся подключать флешки к чужому компьютеру. Сегодня я:

  1. Понимаю, как работает Windows на глубинном уровне
  2. Контролирую свою цифровую приватность
  3. Могу помочь друзьям и коллегам
  4. Не боюсь экспериментировать с системой
  5. Знаю, как восстановить её при любых проблемах

Но самое главное — я осознал: цифровая гигиена это не сложно. Это навык, который можно освоить за месяц. Как вождение автомобиля или готовку.

Ваша приватность — не абстрактное понятие. Это конкретные файлы в реестре, записи в журналах, файлы в кэшах. И теперь вы знаете, как с ними работать.

Не откладывайте. Начните с малого — скачайте USBOblivion и запустите его в режиме симуляции. Увидите, сколько мусора копится в вашей системе. А потом... потом вы уже не сможете остановиться. Потому что контроль — это addictive. 😉

Удачи в освоении! И помните: с великой силой приходит великая ответственность. Используйте эти знания только в благих целях. 🔒

🌟 ПОНРАВИЛАСЬ СТАТЬЯ? ПОДДЕРЖИТЕ АВТОРА! 🌟

🔥 Лайк — если было полезно! 👍

🔔 Подписка — чтобы не пропустить новое! 📌

🔄 Репост — поделитесь с друзьями! 💬

Донат — на развитие проекта! ⭐

Ваша активность помогает создавать больше качественных материалов! 💪

-7

#Windows #Безопасность #Приватность #USB #ОчисткаИстории #Реестр #PowerShell #Скрипты #Лайфхаки #Гайд #Инструкция #ЦифроваяГигиена #Конфиденциальность #ЗащитаДанных #Кибербезопасность #Windows10 #Windows11 #Советы #Оптимизация #Автоматизация#Администрирование #Программирование #КомпьютернаяГрамотность#ИнформационнаяБезопасность #ВосстановлениеСистемы #РезервноеКопирование #Технологии #Саморазвитие #IT