Как удалить вирус windows powershell

Время на прочтение

Как удалить вирус windows powershell

PowerShell – это средство автоматизации разработанное и выпущенное Microsoft в 2006 году на замену Командной строке и её батникам, помимо всего функционала cmd – Powershell обзавелась собственным скриптовым языком с поддержкой классов, объектов, переменных и т.д. По сути с её помощью можно обращаться ко всему функционалу Windows и Windows Server как к объектам и выполнять с ними действия. В статье я расскажу свой опыт, как автоматизировал создание пользователей в домене из писем-заявок в Outlook на удаленном сервере AD.

Планировщик задач
Планировщик задач

Все запланированные задачи в Windows можно посмотреть в “Планировщике задач”, автоматизировать Windows возможно как с его помощью, так и чисто на Powershell, чтобы вывести все текущие задачи необходимо выполнить:

Get-ScheduledJob 

Чтобы вывести запланированные только с помощью Powershell используется команда ниже, так как задачи созданные в Powershell хранятся в отдельной директории, достаточно их просто прочитать:

Get-ChildItem $HOME\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs

Для создания задания необходимо выполнить следующую команду, в квадратные скобки необходимо передать выполняемый скрипт:

$Условие = New-JobTrigger -Daily -At 12AM
Register-ScheduledJob -Name NewAD_User -ScriptBlock {######} -Trigger $Условие

Рассмотрим как происходит взаимодействие с Outlook, и сразу отмечу что для выполнения действий с почтой, необходимо закрыть открытое приложение, иначе команды не будут выполняться.

#Завершение Outlook
Get-Process | Where-Object {$_.ProcessName -eq "OUTLOOK"} | Stop-Process
Start-Sleep -Seconds 10
# Создание объекта Outlook
$outlook = New-Object -ComObject Outlook.Application
# Получение коллекции папок
$folders = $outlook.Session.Folders.Item("###Ваш адрес почты####").Folders
# Выбор папки "Входящие"
$Входящие = $folders.Item("Входящие")
$Исполнено = $folders.Item("Исполнено")
# Получение последнего письма
$Письма = $Входящие.Items | Sort-Object ReceivedTime -Descending

В данном коде я получаю сортированный по дате список писем из папки “Входящие” и адрес папки “Исполнено” куда я планирую перемещать письма после выполнения скрипта.

foreach ($Письмо in $Письма) {
$lines = $Письмо.Body -split "`n"
#Условие чтения письма
if ($lines[0].Substring(0, 29) -ne "Заявка в IT - Новый сотрудник") {continue}
$Дата_заявки = $lines[0].Substring(32).Trim()
$Фамилия = $lines[2].Substring(18).Trim()
$Имя = $lines[4].Substring(4).Trim()
$Отчество = $lines[6].Substring(9).Trim()
$Отдел = $lines[8].Substring(6).Trim()
$Должность = $lines[10].Substring(10).Trim()
$Организация = $lines[12].Substring(12).Trim()
$Подразделение = $lines[14].Substring(14).Trim()
$Номер_телефона = $lines[16].Substring(15).Trim()
$Мобильный_телефон = $lines[18].Substring(18).Trim()
$Имя_пользователя_для_копирования_групп = $lines[20].Substring(29).Trim()

В данном фрагменте начинается цикл который проходит по каждому письму, преобразует в список строк и получает значения из него, в начале я добавил простую проверку на случай если на выделенный почтовый ящик попадет случайное письмо. Далее самое важное – создание учетки, и в моем случае контакта, на удаленном сервере, для этого используется команда Invoke-Command:

$Сессия = New-PSSession -ComputerName ###Сетевое имя или IP-адресс компа###
$Переменные = Invoke-Command -Session $Сессия -ScriptBlock {
param(####Все ваши переменные через запятую###)
команды на удаленном компе
return Переменные которые вернуться в массив обьектов "$Переменные"
} -ArgumentList ###Переменные через запятую которые вы передали в параметры###

Переменная “$Переменные” примет, после выполнения команды на удаленном компьютере, переменные, указанные в return – они понадобятся для отправления письма-отчета.

#Транслит имени
function global:Translit {} - Функция принимает кирилицу и возвращает латиницу
$count = 0
#---------------Получаем список пользователей AD-----------------
$adUsers = Get-ADUser -Filter * -Properties UserPrincipalName
#---------------------Создание логина---------------------------
#чтобы транслейтить имя надо написать: $Транслит = Translit($имя)
$Имя_пользователя = Translit($Имя[0] + "." + $Фамилия)
$Отображаемое_имя = "$Фамилия $Имя"
#---------------Проверка на однофамильцев-----------------
while ($adUsers.SamAccountName -like "*$Имя_пользователя*") { $count = $count + 1 $Имя_пользователя = Translit($Имя[0] + $count + "." + $Фамилия) $Отображаемое_имя = "$Фамилия $Имя $count"
#---------------Создание почты на основе логина-----------------
$Эл_почта = $Имя_пользователя + "@mail"

Теперь самое важное – создание учетной записи и контакта, Powershell не даст просто присвоить учетной записи пароль, для этого строку необходимо сначала преобразовать в защищенную.

#Пользователь
$Пароль = ConvertTo-SecureString -String "###Пароль###" -AsPlainText -Force
New-ADUser -SamAccountName "$Имя_пользователя" -UserPrincipalName "$Имя_пользователя" -Name $Отображаемое_имя -DisplayName $Отображаемое_имя -GivenName "$Имя" -Surname "$Фамилия" -Title "$Должность" -Mobile "$Мобильный_телефон" -OfficePhone "$Номер_телефона" -EmailAddress "$Эл_почта" -Department "$Отдел" -Company "$Организация" -AccountPassword $Пароль -Enabled $true -Path "OU=ТЕСТ,DC=domen,DC=local"
#Контакт
New-ADObject -Name "$Отображаемое_имя" -Type Contact -Path "OU=ТЕСТ_КОНТАКТЫ,OU=ТЕСТ,DC=domen,DC=local" -OtherAttributes @{DisplayName = $Отображаемое_имя; GivenName = "$Имя"; Sn = "$Фамилия"; Mobile = "$Мобильный_телефон"; Mail = "$Эл_почта";telephoneNumber = "444"; Title = "$Должность"; Department = "$Отдел"; Company = "$Организация"}
$Исходные_группы = Get-ADUser $Имя_пользователя_для_копирования_групп -Properties MemberOf | Select-Object -ExpandProperty MemberOf
foreach ($группы in $Исходные_группы) { Add-ADGroupMember -Identity $группы -Members $Имя_пользователя
}

На этом действия на сервере заканчиваются, закрываем скобки, и переходим в локальную сессию, в качестве отчета я отправлю письмо-ответ на адрес отправителя, для этого получаем переменные из объекта сессии и составляем письмо, после чего перемещаем письмо в папку “Исполнено”.

#Получение значений из сессии
$Имя_учетки = $Переменные.GetValue(0)
$Почта = $Переменные.GetValue(1)
#Ответное письмо
$Ответ = $Письмо.ReplyAll()
$Ответ.Body = @"
$Фамилия $Имя $Отчество
$Отдел
$Должность
$Организация
$Имя_учетки
$Почта
$Мобильный_телефон
$Номер_телефона
"@
$Ответ.Send( )
$Письмо.Move($Исполнено)

После завершения цикла, закрываем сессию с сервером и закрываем Outlook, через 10 секунд чтобы письма успели отправиться.

#Завершение сессии
Remove-PSSession -Session $Сессия
#Завершение Outlook
Start-Sleep -Seconds 10
Get-Process | Where-Object {$_.ProcessName -eq "OUTLOOK"} | Stop-Process

Образец моей заявки:

Заявка в IT - Новый сотрудник от 12.04.2024 10:34:49
Описание: Фамилия: Жданов
Имя: Дмитрий
Отчество: Юрьевич
Отдел: Служба Качества
Должность: Контролер пищевой продукции
Организация: АО "Агрофирма "Бунятино"
Подразделение: -
Номер телефона:
Мобильный телефон: -
Пользователь для копирования:

Полный листинг кода:

#----------------Создание сессии------------------------
$Сессия = New-PSSession -ComputerName ServerAD
#-------------------------Чтение почты-----------------------------
#Завершение Outlook
Get-Process | Where-Object {$_.ProcessName -eq "OUTLOOK"} | Stop-Process
Start-Sleep -Seconds 10
# Создание объекта Outlook
$outlook = New-Object -ComObject Outlook.Application
# Получение коллекции папок
$folders = $outlook.Session.Folders.Item("auto-user@agro-holding.ru").Folders
# Выбор папки "Входящие"
$Входящие = $folders.Item("Входящие")
$Исполнено = $folders.Item("Исполнено")
# Получение последнего письма
$Письма = $Входящие.Items | Sort-Object ReceivedTime -Descending
#-------------------------Рабочий алгоритм-----------------------------
#Получение значений переменных из письма
foreach ($Письмо in $Письма) {
$lines = $Письмо.Body -split "`n"
#Условие чтения письма
if ($lines[0].Substring(0, 29) -ne "Заявка в IT - Новый сотрудник") {continue}
$Дата_заявки = $lines[0].Substring(32).Trim()
$Фамилия = $lines[2].Substring(18).Trim()
$Имя = $lines[4].Substring(4).Trim()
$Отчество = $lines[6].Substring(9).Trim()
$Отдел = $lines[8].Substring(6).Trim()
$Должность = $lines[10].Substring(10).Trim()
$Организация = $lines[12].Substring(12).Trim()
$Подразделение = $lines[14].Substring(14).Trim()
$Номер_телефона = $lines[16].Substring(15).Trim()
$Мобильный_телефон = $lines[18].Substring(18).Trim()
$Имя_пользователя_для_копирования_групп = $lines[20].Substring(29).Trim()
#---------------Основная команда создания пользователя на удаленном сервере-----------------
$Переменные = Invoke-Command -Session $Сессия -ScriptBlock { param($Фамилия, $Имя, $Отчество, $Отдел, $Должность, $Организация, $Подразделение, $Номер_телефона, $Мобильный_телефон, $Имя_пользователя_для_копирования_групп)
#---------------Функция транслита-----------------
#Транслит имени
function global:Translit {
param([string]$inString)
$Translit = @{
[char]'а' = "a"
[char]'А' = "a"
[char]'б' = "b"
[char]'Б' = "b"
[char]'в' = "v"
[char]'В' = "v"
[char]'г' = "g"
[char]'Г' = "g"
[char]'д' = "d"
[char]'Д' = "d"
[char]'е' = "e"
[char]'Е' = "e"
[char]'ё' = "yo"
[char]'Ё' = "yo"
[char]'ж' = "zh"
[char]'Ж' = "zh"
[char]'з' = "z"
[char]'З' = "z"
[char]'и' = "i"
[char]'И' = "i"
[char]'й' = "j"
[char]'Й' = "j"
[char]'к' = "k"
[char]'К' = "k"
[char]'л' = "l"
[char]'Л' = "l"
[char]'м' = "m"
[char]'М' = "m"
[char]'н' = "n"
[char]'Н' = "n"
[char]'о' = "o"
[char]'О' = "o"
[char]'п' = "p"
[char]'П' = "p"
[char]'р' = "r"
[char]'Р' = "r"
[char]'с' = "s"
[char]'С' = "s"
[char]'т' = "t"
[char]'Т' = "t"
[char]'у' = "u"
[char]'У' = "u"
[char]'ф' = "f"
[char]'Ф' = "f"
[char]'х' = "h"
[char]'Х' = "h"
[char]'ц' = "c"
[char]'Ц' = "c"
[char]'ч' = "ch"
[char]'Ч' = "ch"
[char]'ш' = "sh"
[char]'Ш' = "sh"
[char]'щ' = "sch"
[char]'Щ' = "sch"
[char]'ъ' = ""
[char]'Ъ' = ""
[char]'ы' = "y"
[char]'Ы' = "y"
[char]'ь' = ""
[char]'Ь' = ""
[char]'э' = "e"
[char]'Э' = "e"
[char]'ю' = "yu"
[char]'Ю' = "yu"
[char]'я' = "ya"
[char]'Я' = "ya"
}
$outCHR=""
foreach ($CHR in $inCHR = $inString.ToCharArray())
{
if ($Translit[$CHR] -cne $Null )
{$outCHR += $Translit[$CHR]}
else
{$outCHR += $CHR}
}
Write-Output $outCHR
}
$count = 0
#---------------Получаем список пользователей AD-----------------
$adUsers = Get-ADUser -Filter * -Properties UserPrincipalName
#---------------------Получение логина---------------------------
#чтобы транслейтить имя надо написать: $Транслит = Translit($имя)
$Имя_пользователя = Translit($Имя[0] + "." + $Фамилия)
$Отображаемое_имя = "$Фамилия $Имя"
#---------------Проверка на однофамильцев-----------------
while ($adUsers.SamAccountName -like "*$Имя_пользователя*") { $count = $count + 1 $Имя_пользователя = Translit($Имя[0] + $count + "." + $Фамилия) $Отображаемое_имя = "$Фамилия $Имя $count"
}
#---------------Создание почты на основе логина-----------------
$Эл_почта = $Имя_пользователя + "@почта"
#---------------------Добавиление в AD-----------------------------
#Пользователь
$Пароль = ConvertTo-SecureString -String "пароль" -AsPlainText -Force
New-ADUser -SamAccountName "$Имя_пользователя" -UserPrincipalName "$Имя_пользователя" -Name $Отображаемое_имя -DisplayName $Отображаемое_имя -GivenName "$Имя" -Surname "$Фамилия" -Title "$Должность" -Mobile "$Мобильный_телефон" -OfficePhone "$Номер_телефона" -EmailAddress "$Эл_почта" -Department "$Отдел" -Company "$Организация" -AccountPassword $Пароль -Enabled $true -Path "OU=ТЕСТ,DC=bun,DC=local"
#Контакт
New-ADObject -Name "$Отображаемое_имя" -Type Contact -Path "OU=ТЕСТ_КОНТАКТЫ,OU=ТЕСТ,DC=bun,DC=local" -OtherAttributes @{DisplayName = $Отображаемое_имя; GivenName = "$Имя"; Sn = "$Фамилия"; Mobile = "$Мобильный_телефон"; Mail = "$Эл_почта";telephoneNumber = "444"; Title = "$Должность"; Department = "$Отдел"; Company = "$Организация"}
#-----------Копируем группы пользователя из контейнера-------------
$Исходные_группы = Get-ADUser $Имя_пользователя_для_копирования_групп -Properties MemberOf | Select-Object -ExpandProperty MemberOf
foreach ($группы in $Исходные_группы) { Add-ADGroupMember -Identity $группы -Members $Имя_пользователя
}
#-----------Возвращение переменных из сессии для ответного письма-------------
return $Имя_пользователя, $Эл_почта, $Фамилия, $Имя, $Отчество, $Отдел, $Должность, $Организация, $Подразделение, $Номер_телефона, $Мобильный_телефон, $Имя_пользователя_для_копирования_групп
} -ArgumentList $Фамилия, $Имя, $Отчество, $Отдел, $Должность, $Организация, $Подразделение, $Номер_телефона, $Мобильный_телефон, $Имя_пользователя_для_копирования_групп
#Получение значений из сессии
$Имя_учетки = $Переменные.GetValue(0)
$Почта = $Переменные.GetValue(1)
#Ответное письмо
$Ответ = $Письмо.ReplyAll()
$Ответ.Body = @"
$Фамилия $Имя $Отчество
$Отдел
$Должность
$Организация
$Имя_учетки
$Почта
$Мобильный_телефон
$Номер_телефона
"@
$Ответ.Send( )
$Письмо.Move($Исполнено)
}
#Завершение Outlook
Start-Sleep -Seconds 10
Get-Process | Where-Object {$_.ProcessName -eq "OUTLOOK"} | Stop-Process
#Завершение сессии
Remove-PSSession -Session $Сессия

Надеюсь вам помогла моя статья, я постарался максимально понятно разделить код на составные части чтобы его части можно было поменять на собственные.

Powershell – это важнейшая функция, разработанная корпорацией Майкрософт, чтобы помочь опытным ИТ-специалистам автоматизировать административные задачи и настраивать свои системы. Сама по себе она не может быть вредной.

Однако у вас могут возникнуть проблемы, если Powershell.exe вирус заменит ваш оригинальный Powershell. Одна из опасностей вируса Windows Powershell заключается в том, что его бывает трудно обнаружить, и многие пользователи сталкиваются с ним в течение длительного времени.

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

В этой статье
    1. 🚀 Используйте инструмент для восстановления данных
    2. 🚀Создайте резервную копию своих данных
    3. 🚀Зашифруйте конфиденциальные данные
    4. 🚀Регулярно обновляйте свой антивирус

Что такое вирус Windows Powershell?

Вирус Windows PowerShell – это вредоносный скрипт или программа, которая использует Windows PowerShell для отображения и запуска нежелательных всплывающих окон. Всплывающие окна появляются по разным каналам. Вот некоторые из наиболее распространенных возможностей:

  • 📍 Загрузка подозрительных инструментов или программного обеспечения;
  • 📍 Открытие подозрительных электронных писем, содержащих вредоносные файлы или вложения;
  • 📍 Нажатие на уведомления в вашем веб-браузере;
  • 📍 Другие подозрительные действия или источники.
:/>  Область уведомлений панели задач что это
windows powershell.exe значок

Вирус Windows PowerShell может нанести ущерб вашей системе и вашей конфиденциальности. Чем дольше он у вас сохраняется, тем больше последствий вы можете ожидать, включая появление новых вредоносных программ, доступ к вашему микрофону и конфиденциальным данным, изменение настроек, повреждение системных файлов, снижение производительности устройства и т.д. Поэтому крайне важно научиться распознавать и удалять вирусы Windows Powershell.

Как распознать вирус Windows Powershell

Обнаружение вирусов Powershell

Распознать вирус Windows Powershell несложно, если знать, на что обращать внимание. Однако, если целью вируса является отслеживание вашей активности и кража данных, у вас могут возникнуть трудности с определением того, что ваше устройство заражено. Более того, в некоторых случаях большинство антивирусных систем даже не могут его обнаружить. Итак, суть в том, что вы должны уделять пристальное внимание тому, что происходит на вашем компьютере, и своей безопасности.

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

  • 🚨Следите за появлением нежелательной рекламы или всплывающих окон при использовании компьютера;
  • 🚨Проверьте, не работает ли ваше устройство медленно (включая подключение к Интернету). Если ваш диск, процессор или оперативная память загружены слишком сильно, возможно, у вас вирус;
  • 🚨Появляются новые значки;
  • 🚨Ваши файлы или папки были перемещены в другое место или удалены;
  • 🚨В вашем диспетчере задач запущены подозрительные процессы;
  • 🚨Вы получаете ненужные уведомления или запросы на обновление программного обеспечения, которого у вас нет или которым вы не пользуетесь;
  • 🚨В вашем центре уведомлений время от времени появляются фишинговые формы.

Как удалить вирус Windows Powershell

Для удаления вируса Windows Powershell можно использовать несколько способов. Ниже приведены точные инструкции по каждому из них.

Верните браузеру настройки по умолчанию

Сброс настроек вашего браузера к настройкам по умолчанию может помочь вам “отключить” вирус powershell.exe и удалить все вредоносные плагины или инструменты, работающие в браузере. Это может быть временным решением, которое поможет вам уменьшить дальнейший ущерб, но вам также следует использовать постоянные решения для полного удаления вируса.

Процесс возврата вашего браузера к настройкам по умолчанию зависит от используемого вами браузера, но все они похожи. Поскольку большинство пользователей Windows используют Google Chrome, давайте рассмотрим следующие шаги:

  1. Откройте Google Chrome.
  2. Нажмите на три точки в правом верхнем углу и выберите Настройки.
    доступ к настройкам в google chrome
  3. Нажмите Сбросить настройки, а затем Восстановить настройки к исходным значениям по умолчанию.
    сбросьте параметры настроек
  4. Нажмите Сбросить настройки еще раз.
    сброс настроек в Google chrome

Используйте антивирус или средство защиты от вредоносных программ

Один из первых методов, который вам следует попробовать при обнаружении вируса Windows Powershell, – это использовать средство защиты от вредоносных программ или антивирусное программное обеспечение. Вы можете попробовать выполнить полную проверку с помощью Защитника Windows, прежде чем использовать сторонний антивирус или средство удаления вредоносных программ.

Вот шаги, которые необходимо выполнить:

  1. Нажмите Пуск и введите Безопасность Windows.
  2. Нажмите Безопасность Windows.
    доступ к системе безопасности windows
  3. Когда откроется окно Безопасность Windows, нажмите Защита от вирусов и угроз.
    доступ к защите от вирусов и угроз
  4. Нажмите на Параметры проверки в разделе Текущие угрозы.
    доступ к параметрам проверки в защитнике windows
  5. Выберите Полная проверка и нажмите Проверить сейчас.
    запуск полной проверки в защитнике windows
  6. Дождитесь завершения процесса (это может занять несколько часов, в зависимости от вашего устройства и хранилища).

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

Воспользуйтесь восстановлением системы

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

Вот что вам нужно сделать:

  1. Нажмите на Пуск и введите Восстановление системы.
  2. Нажмите на Создать точку восстановления.
    доступ к созданию точки восстановления
  3. Нажмите Восстановление системы.
    доступ к функции восстановления системы
  4. Нажмите Далее, чтобы продолжить процесс.
    окно восстановления системных файлов
  5. Нажмите на Показать больше точек восстановления, чтобы просмотреть все точки восстановления. Выберите нужную и нажмите Далее.
    выберите точку восстановления в windows
  6. Подтвердите выбор точки восстановления в следующем окне. Нажмите Готово, а затем Да. Чтобы изменения вступили в силу, потребуется перезагрузить ваше устройство.
    завершение восстановления системы в windows

Переустановите операционную систему Windows

Если вы не можете удалить powershell.exe вирус с любым из исправлений, упомянутых выше, единственным оставшимся способом является переустановка вашей операционной системы. Ниже приведены шаги по переустановке вашей операционной системы Windows:

  1. Загрузите официальное средство создания Windows Media Tool.
  2. Вставьте в компьютер пустой USB-накопитель.
  3. Запустите средство создания носителей и выберите Создать установочный носитель для другого ПК.
    Экран средства создания носителей Windows
  4. Нажмите Далее, выберите язык, редакцию и архитектуру и нажмите Далее.
    Настройка средства создания Windows media.
  5. Выберите USB-накопитель, вставленный в ваш компьютер, и нажмите Далее.
  6. Подождите, пока программа загрузит все файлы Windows и создаст загрузочный диск. (имейте в виду, что этот процесс может занять некоторое время).
  7. Перезагрузите компьютер и откройте BIOS, нажав F2,F9, F10 или DEL, в зависимости от вашего устройства.
    пункт меню загрузки bios
  8. Перейдите в настройки загрузки и выберите свой USB-накопитель в качестве первого варианта загрузки.
    выбор загрузочного устройства в bios
  9. Сохраните настройки и выйдите из BIOS.
    сохраните изменения в bios
  10. Установка начнется на вашем устройстве. Следуйте инструкциям и переустановите.

[Бонус] Как избежать потери данных из-за вирусов

Ни одно решение не поможет предотвратить потерю данных в случае вирусной атаки. Однако, чем больше решений вы используете, тем выше шансы предотвратить потерю данных или просто иметь возможность восстановить утраченные данные. Вот несколько рекомендаций, которые вам следует внедрить:

🚀 Используйте инструмент для восстановления данных

  1. После запуска Wondershare Recoverit нажмите Жесткие диски и папки и выберите диск, пораженный вирусом.
    выбор диска для восстановления в recoverit
  2. Wondershare Recoverit автоматически просканирует диск на наличие отсутствующих файлов и покажет их в режиме реального времени.
    проверка в режиме реального времени в recoverit
  3. Нажмите Предварительный просмотр, чтобы узнать, обнаружила ли программа нужные файлы. Когда будете готовы, нажмите Восстановить.
    предварительный просмотр файлов в программе recoverit
  4. Назовите файл, выберите место сохранения и нажмите Сохранить, когда все будет готово.
    сохранение файлов с помощью программы recoverit

🚀Создайте резервную копию своих данных

🚀Шифруйте конфиденциальные данные

Как упоминалось ранее, вирус Windows Powershell часто действует как программа-вымогатель и шифрует ваши файлы, запрашивая у вас деньги, прежде чем вернуть их вам. Однако вы можете использовать тот же подход, зашифровав свои файлы, чтобы никто не смог украсть ваши данные.

🚀Регулярно обновляйте свой антивирус

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

Заключение

Если вы хотите удалить вирус Windows Powershell.exe со своего компьютера, попробуйте восстановить настройки браузера по умолчанию, просканировать систему антивирусом, выполнить восстановление системы или переустановить ОС Windows.

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

Часто задаваемые вопросы

  • Существуют ли какие-либо конкретные способы защиты от вирусов Powershell?

    Убедитесь, что ваш Powershell обновлен, следите за подозрительными действиями, применяйте общие правила безопасности и политики ограничения выполнения. Вам также следует использовать надежный антивирус и регулярно обновлять его.

  • Могу ли я удалить Powershell?

    Вы можете удалить Powershell, но вирус может не позволить вам выполнить это действие, если ваше устройство уже заражено. Эти вирусы могут искать в вашей системе другие инструменты, которые они могут использовать.

  • Является ли Powershell вредоносным инструментом?

    Нет, PowerShell сам по себе не является вредоносным ПО. Однако этот инструмент могут использовать различные типы вирусов.

:/>  Ntp сервера, как узнать адрес

Привет! Сегодня мы рассмотрим важную тему – проверку безопасности паролей в Active Directory. Зачем это нужно? Потому что безопасные пароли – залог безопасности вашей организации. В этой статье вы узнаете, как администраторы и специалисты по информационной безопасности могут убедиться в работоспособности парольных политик и обнаружить слабые пароли.

Шаг 1: Предварительные требования:

Шаг 2: Копирование базы NTDS из теневой копии:

Теперь, так как прямое копирование базы NTDS невозможно, нам нужно воспользоваться теневой копией. Запустите PowerShell с правами администратора и выполните следующие команды:

$path="C:\New folder\"
cd $path
$vss=$null
$vss=Get-CimInstance -ClassName Win32_ShadowCopy -Property * | Select-Object DeviceObject,ID
vssadmin create shadow /for=C:
$vss=Get-CimInstance -ClassName Win32_ShadowCopy -Property * | Select-Object DeviceObject,ID
$vss[0]
PowerShell - создание теневой копии

К сожалению, при копировании данных непосредсвенно из PowerShell у меня возникали ошибки, поэтому выполните копирование из cmd, запущенном от имени администратора:

copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy317\Windows\NTDS "C:\new folder"
cmd - копирование данных из теневой копии

Шаг 3: Извлечение хешей паролей и анализ:

После создания теневой копии вернитесь в PowerShell, удалите теневую копию и выполните следующие команды для извлечения хешей паролей всех активных пользователей:

vssadmin.exe delete shadows /shadow="$($vss[0].ID)" /quiet
esentutl /r edb /d
import-module -name .\dsinternals
$key=Get-BootKey -Online
$dump=Get-ADDBAccount -all -DBPath '.\ntds.dit' -BootKey $key | Where-Object {$_.enabled -eq "True"}
$dump | where-object {$_.samaccounttype -eq "user"} | Format-Custom -View PwDump | out-file -FilePath users.pwdump -Encoding utf8
remove-item *edb*
remove-item *ntds*

Powershell - получение хэшей паролей пользователей

Важно!!! Полученный в результате файл является предельно критичным. Храните его соответсвующе и не допускайте его утечки! Я бы рекомендовал, удалять его безвозратно, сразу после анализа. Не оставляйте его на сревере после генерации.

Упрощённый вариант предыдущих шагов:

Я сделал программу, которая выполняет предущие шаги в атоматическом режиме за несколько секунд.

Проект программы на github, если кому-то нужны будут исходники – тут.

Если посчитаете, что прогамма вам полезна – донаты приветсвуются.

результат работы программы getADHashes

Шаг 4: Анализ хешей паролей и взлом:

Полученные хеши паролей могут быть проанализированы на предмет повторяющихся значений и слабых паролей (хэшей). В случае, если один и тот же пароль повторяется у множества пользователей – это повод забить тревогу, и предпринять некоторые организационные меры. 

Полученный список хэшей паролей из Active Directory с повторяющимися значениями паролей

В папке с программой можно сделать подпапку Dictionaries, и скопровать в неё нужные словари.

Также, в папке с программой нужно создать список уникальных хешей с имененм hacklist.txt. Оставить только уникальные хэши, можно, например, удалив дубликаты, импортировав ранее полученные данные в Excel.

Запускаем взлом командой:

hashcat.exe hacklist.txt Dictionaries\* -m 1000
Выполнение взлома паролей при помощи Hashcat

После завершения взлома, можно посмотреть список паролей в файле hashcat.potfile. Cопоставив хэши ненадёжных паролей с пользователями, можно заставить их сменить такие пароли.

Результат взлома

Заканчивая наш разговор о проверке паролей в Active Directory, помните, что обеспечение безопасности данных – это ключевая задача. Анализ и улучшение политик паролей помогут сделать вашу организацию более защищенной от потенциальных угроз.

Не забывайте при этом про нормы закона и этики.

Время на прочтение

Всем привет! Порой, написать графическую форму для консольного приложения может оказаться очень удобным решением, тем самым не нужно запоминать все ключи программы, особенно, если пользоваться им приходится изредка, тем самым автоматизируя работу с данным приложением в дальнейшем. Но, ситуация может быть обратной, когда приложение имеет только графический интерфейс, а вам нужно получить вывод его работы в консоли, например, для возможности передачи метрик в систему мониторинга. С тех пор как начал проводить все больше времени в консоли, заметил, что становится менее удобно переключаться на ранее привычные инструменты, лишний раз использовать мышь, держать открытыми излишние приложения или вкладки в браузере, особенно, если работаешь на удаленной машине без прямого доступа к графическому интерфейсу. У меня накопилась небольшая коллекция полезных модулей, большинство из которых написаны совсем недавно, успел привыкнуть при регулярном использовании и хотелось бы ими поделиться. Осознавая, что тенденция ухода Windows систем на территории РФ растет, тем не менее думаю еще очень много людей, кто так же как и я продолжают использовать данную систему и автоматизировать свою работу, возможно, представленные модули так же смогут пригодятся. Все модули опубликованы в репозитории на GitHub и менеджере пакетов Nuget, откуда их можно установить одной командой.

PowerShell модуль представляет собой набор функций, которых объединяет между собой файл с расширением psm1 и манифест psd1 (последний не обязателен для работы модуля, нужен для его описания). Модули используют для взаимодействия с приложением или целой системой (например, система хранения TrueNAS, резервного копирования Veeam, виртуализации VMWare или Hyper-V, различными системами баз данных и т.п.), с возможностью повторного применения описанных в нем функций на уровне системы и его массового распространения через менеджеров пакетов. Еще модуль можно воспринимать как cli (интерфейс командной строки) для конкретного приложения, тем самым позволяя взаимодействовать с ним оперируя параметрами в консоли, при этом имея возможность для дальнейшей автоматизации или интеграции с другими сервисами напрямую через язык PowerShell. Например, команда для вывода содержимого файлов в консоли Get-Content, или более привычный для Linux систем псевдоним cat по факту представляет PowerShell функцию, базирующуюся на .NET, которая в свою очередь входит в состав модуля Microsoft.PowerShell.Management.

Console-Translate

На протяжении нескольких лет я пользуюсь переводчиком DeepL практически на ежедневной основе. Меня не всегда устраивает то, что у него есть ограничение в 1500 символов, тем не менее, так как у него есть полноценное десктопное приложение, это удобная альтернатива браузерным решениям, которое всегда под рукой на горячей клавише. Сменив место работы, и получив ограничение в самостоятельной установке какого-либо стороннего программного обеспечения на рабочем ноутбуке, пришлось задуматься в сторону альтернативного и простого решения, так как пользоваться переводчиком и при этом консолью я реже не стал, пришла идея использовать единый интерфейс. Для доступа к переводу текста в консоли можно использовать REST API, к сожалению, получить бесплатный ключ доступа DeepL для России невозможно, но тут можно найти много альтернатив. Во-первых, существует проект DeepLX с открытым исходным кодом, с помощью которого можно запустить свой бесплатный API-сервер, который может быть доступен одновременно нескольким пользователям в сети. Во-вторых, каждый, кто использует расширение Google Translate в своем браузере может перехватить публичный API-ключ (используя интерфейс DevTools во вкладке Network) с возможностью его использования через любой REST-клиент в консоли. И в-третьих, существует немало бесплатных провайдеров для перевода текста с наличием API, например MyMemory, которая содержит одну из крупнейших баз для переводов. Все перечисленные сервисы получилось внедрить в один модуль Console-Translate, который можно установить в своей консоли с помощью одной команды:

Install-Module Console-Translate -Repository NuGet

Необходимо, чтобы предварительно у вас в системе уже был зарегистрирован менеджер пакетов Nuget:

Register-PSRepository -Name "NuGet" -SourceLocation "https://www.nuget.org/api/v2" -InstallationPolicy Trusted

Синтаксис простой, в первый параметр передается текст (если вы используете более одного слова, обязательно необходимо заключить весь передаваемый текст в кавычки), второй (через пробел) отвечает на язык назначения, например так:

> Get-Translate "Как дела?"
How are you?
> Get-Translate "Как дела?" de
Wie geht es Ihnen?

По умолчанию перевод происходит между Русским и Английским языком в обоих направлениях, с автоматически определением языка на уровне PowerShell. Т.к. на уровне API не всегда хорошо срабатывает определение языка, добавил достаточно простую реализацию, так как акцент сделан на двух языках, каждый раз происходит подсчет переданных букв с разбивкой (методом Char) на русские и английские символы, букв какого из языков окажется больше, тот и будет являться исходным языком, и соответственно второй будет являться языком назначения (пример на скриншоте ниже).

Перевод текста в консоли через PowerShell на Linux и Windows машинах
Перевод текста в консоли через PowerShell на Linux и Windows машинах

С появления версии PowerShell Core данный язык является кроссплатформенным, по этой причине модуль будет работать в системе Linux, где я так же часто его использую, как и сам язык в силу привычки.

:/>  Как включить центр обновления Windows 10: рабочие способы

CrystalDiskInfo

У программы CrystalDiskInfo нет командного интерфейса для прямого взаимодействия через консоль, есть возможность только сформировать файловый отчет, где содержится много лишней информации в текстовом виде. Помимо этого отчета, программа так же хранит информацию в конфигурационных ini-файлах, которые обновляются в процессе сканирования или изменения настроек. Модуль CrystalDisk-Cli читает эти конфигурационные файлы и выводит результат в формате OSObject или Collection (необходимо, что бы программа CrystalDiskInfo уже была установлена). Вывод работы модуля будет выглядеть так:

Установить модуль CrystalDisk-Cli можно также одной командой:

> Install-Module CrystalDisk-Cli -Repository NuGet
> Import-Module CrystalDisk-Cli
> Get-DiskInfo
Name : WD PC SN740 SDDPNQD-1T00-10272243A5454811
Date : 2024/02/19 11:16:48
HealthStatus : 1
Temperature : 48
PowerOnHours : 1010
PowerOnCount : 448
Life : 100
HostWrites : 10322
HostReads : 10092
01 : 0
02 : 0
03 : 0
04 : 0
05 : 0
ReallocatedSectorsCount : 0
06 : 0
07 : 0
08 : 0
09 : 0
0A : 0
0B : 0
0C : 0
0D : 0
0E : 0
0F : 0

Если необходимо обновить информацию и получить актуальный отчет, используется параметр Report (если консоль не запущена с правами администратора, при запуске появится окно, которое запросит подтверждение). Само приложение производит автоматическое обновление с заданным промежутком времени, которое можно изменить в настройках программы, например каждые 5 минут, используя команду: Get-DiskInfoSettings -AutoRefresh 5 (при запуске без параметров вернет текущие настройки, для изменения настроек понадобится запустить консоль с правами администратора). Вот пример вывода для нескольких дисков:

Вывод работы модуля CrystalDisk-Cli
Вывод работы модуля CrystalDisk-Cli

Everything

Install-Module PSEverything -Repository NuGet
Find-Everything ".temp" -ComputerName plex-01 -Port 9999 -User every -Password thing # удаленное получение данных
Find-Everything ".temp" # локальное получение данных
$(Find-Everything ".temp").Count # посчитать количество файлов, подходящих под критерии поиска
Поиск файлов через модуль PSEverything
Поиск файлов через модуль PSEverything

Программа не содержит открытый исходный код, перед написанием модуля я ознакомился с правами лицензионного соглашения, которые крайне лояльны, и дают возможность интегрировать данное приложение для своих целей. Мне данный модуль очень мог автоматизировать поиск файлов для нескольких несложных скриптов, что было бы сложнее реализовать средствами PowerShell, не говоря про скорость работы, которая чаще не превышает 200мс (повышенная задержка при большом количестве найденных файлов вызвана не программой, а самим языком при обработке получаемых данных).

SpeedTest

У меня как-то была задача, реализовать мониторинг скорости интернета получаемую от провайдера на регулярной основе. Для примера, можно воспользоваться всеми известным Speedtest от Ookla, у данного сервиса уже присутствует cli-интерфейс, вывод которой можно распарсить, но это не единственный провайдер для предоставления подобный услуги и требует зависимость в виде исполнимого файла. В случае c встроенным Windows PowerShell версии 5.1 есть возможность использовать Internet Explorer через COM интерфейс, тем самым в браузере автоматизировать нажатие кнопок в фоновом режиме и забирать содержимое страницы прямо в консоль, для дальнейшей обработки и вывода в формате объекта, как это реализовано в модуле Ookla-SpeedTest-API. Вот пример:

Get-PackageProvider # проверяем, что провайдер пакетов nuget установлен
Find-PackageProvider # отобразить все допступные менеджеры пакетов
Install-PackageProvider nuget # установить менеджер пакетов nuget
Set-PackageSource nuget -Trusted # разрешаем установки пакетов из указанного источника
Find-Package Ookla-SpeedTest # ищем пакеты по названию во всех менеджерах
Install-Module Ookla-SpeedTest -Scope CurrentUser # установить модуль для текущего пользователя
### Запускаем модуль и забираем метрики
$test = Invoke-SpeedTest
$test | Select-Object date,download,upload
date download upload
---- -------- ------
19.02.2024 14:00:15 37263 19320
Измерение скорости интернета через Ookla Speedtest в PowerShell 5.1
Измерение скорости интернета через Ookla Speedtest в PowerShell 5.1

Используя такой модуль, можно настроить отправку метрик в базу данных и вывести данные на dashboard Grafana (такой пример с созданием службы есть на GitHub). Хотя данный подход уже является устаревшим, он не требует никаких зависимостей, но при этом не поддерживается в версии PowerShell Core. Для подобных целей правильнее использовать библиотеку Selenium (версии dotNET), например через браузер Chrome/Chromium, подробнее про установку зависимостей и создание модулей я уже писал пост на Habr. Вот пример вывода на примере OpenSpeedTest и LibreSpeedTest:

Измерение скорости интернета через Open и Libre Speedtest в PowerShell Core
Измерение скорости интернета через Open и Libre Speedtest в PowerShell Core

Сервер и клиент Syslog

Маловероятно, что вам понадобится запустить сервер для сбора логов на системе Windows, при условии, что чаще для этих целей используют сервера на базе Linux, к тому же имеется достаточно большое количество отличных альтернатив, например Visual Syslog. Но если у вас есть запрет на запуск какого-либо стороннего программного обеспечения на системах Windows (что в моем случае и послужило причиной) или например PowerShell скрипт, события работы которого необходимо настроить для передачи серверу Syslog, данный процесс можно автоматизировать с помощью модуля pSyslog. Для установки и запуска серверной части используйте следующие команды:

Install-Module pSyslog -Scope CurrentUser
Start-pSyslog -Port 514
Get-pSyslog # читает входящие сообщения в реальном времени
Show-pSyslog # читает локальный файловый журнал
Сервер Syslog
Сервер Syslog

Для отправки сообщения на любой сервер Syslog, используйте команду Send-pSyslog:

Отправка сообщения на сервер Syslog
Отправка сообщения на сервер Syslog

Серверная и клиентская часть базируются на классе .NET System.Net.Sockets, все источники документации и примеры работы есть в описании репозитория. Модуль поддерживает шифрование Base64, UDP Relay и ротацию локального журнала, который возможно настроить для получения метрик, например, по типу сообщения или содержимому. Протестировано в работе для версии Windows PowerShell на разных билдах до 3-х одновременных клиентов, также работает в версии Core.

Windows API

Модуль ps.win.api – это полноценный REST API и Web сервер на чистом PowerShell, серверная часть которого базируется на классе .NET HttpListener. Про то, как создать такой сервер я уже писал статью на Habr, с тех пор прошло не так много времени, тем не менее функционала стало больше, в том числе добавлен модуль, который позволяет запускать серверную часть в режиме фонового процесса и управлять им, а также он включает в себя большую часть используемых функций с возможностью удаленного взаимодействия с сервером для каждой команды, вывод которых будет одинаковый как для локальной, так и для удаленной машины. Все функции представляют из себя дополненный и более читаемый вывод уже встроенных WMI/CIM команд, результат которых можно получить с удаленный машины через данный модуль в PowerShell, или любой REST-клиент, например curl в Linux, без необходимости конфигурации WinRM или ssh.

Устанавливаем модуль и запускаем серверную часть на одной машине:

Install-Module ps.win.api -Repository NuGet -AllowClobber
Import-Module ps.win.api
Start-WinAPI
Test-WinAPI
Port Status
---- ------
8443 Open

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

Get-Smart
Get-Smart -ComputerName 192.168.3.100 -User rest -Pass api -Port 8443
Пример вывода температуры датчиков на локальной и удаленной Windows машинах
Пример вывода температуры датчиков на локальной и удаленной Windows машинах

Примеры работы и настройки можно найти в репозитории на GitHub. Также помимо запуска и остановки служб и процессов, добавлен функционал просмотра всех журналов событий Windows через Web-интерфейс с возможностью фильтрации вывода, пример для ssh подключений на скриншоте:

Пример фильтрации событий Windows для журнала OpenSSH/Admin
Пример фильтрации событий Windows для журнала OpenSSH/Admin

Get-Query

В системе Windows для просмотра в консоли списка текущих авторизованных пользователей, а также запущенных ими процессов присутствует встроенная программа query.exe, которая отдает вывод в текстовом формате. Модуль Get-Query преобразуя вывод команды в формат объекта, что позволяет использовать его для мониторинга активных пользовательских сессий, например, через активного Zabbix-агента, а также с помощью такого модуля (или любого другого подобного модуля в формате PSObject) можно заполнить таблицу DataGridView используемую в Windows Forms, данный подход я использовал в проекте RSA. Пример вывода для одного пользователя:

Install-Module Get-Query
Get-Query
User : lifailon
Session : console
ID : 1
Status : Active
IdleTime : отсутствует
LogonTime : 12.02.2024 13:08

Итог

По мимо перечисленных модулей, присутствуют модули на мониторинга Veeam репозиториев и заданий, а так же датчиков температуры системы через Open и LibreHardwareMonitor, статью про последний я также писал на Habr, где упоминал про кастомизацию терминала, используя профили для oh-my-posh. Всего модулей в различных репозитория огромное множество, менеджер Nuget насчитывает больше 392 тысяч пакетов, 30 тысяч из которых составляют модули для PowerShell и библиотеки, которые могут быть интегрированы через платформу .NET. Использование удобных именно для вас модулей заставляет меньше покидать терминал, а времяпровождение в консоли приносит все больше удовольствия, и как мне кажется, формирует полезную привычку в дальнейшем.