Целью статьи не является создание вредоносного приложения. Полученный в результате код можно использовать в качестве примера создания GUI с помощью PowerShell. Пару лет назад я уже освещал тему создания подобного кода с помощью VBScript, правда тогда не обошлось без "костыля" в виде ActiveX DLL. В этот раз есть возможность решить вопрос "нативными" средствами.
Для начала нарисуем интерфейс нашего локера.
Честно говоря я не представляю себе скрипт, для создания интерфейса которого может возникнуть необходимость использовать WPF - красота тут ни к чему. В общем на любителя. По-моему проще через Windows Forms.
Открываем PowerShell ISE, рисуем:
- форму без границ, во весь экран, поверх всех окон, слегка прозрачную, оттенка синего цвета
- кнопку для проверки введенного кода разблокировки
- текстовое поля для ввода кода разблокировки
- поле, содержащее текст приглашения ввести код разблокировки
Добавим логику приложения: функцию проверки введенного кода и обработчики событий
(в том числе запретим закрытие приложения до тех пор, пока пользователь не введет требуемый код).
Выполняем скрипт в PowerShell ISE (F5) . . .
Как запустить выполнение скрипта в "боевых" условиях - догадайтесь сами :).
Дисклеймер: за "допиливание" полученного кода с целью противозаконного использования автор ответственности не несет.
Для начала нарисуем интерфейс нашего локера.
Честно говоря я не представляю себе скрипт, для создания интерфейса которого может возникнуть необходимость использовать WPF - красота тут ни к чему. В общем на любителя. По-моему проще через Windows Forms.
Открываем PowerShell ISE, рисуем:
- форму без границ, во весь экран, поверх всех окон, слегка прозрачную, оттенка синего цвета
- кнопку для проверки введенного кода разблокировки
- текстовое поля для ввода кода разблокировки
- поле, содержащее текст приглашения ввести код разблокировки
Add-Type -AssemblyName System.Windows.Forms $Form = New-Object System.Windows.Forms.Form $Form.TopMost = $true $Form.FormBorderStyle = 0 # None $Form.BackColor = '#3333ff' $Form.WindowState = 2 # Maximized $Form.ShowInTaskbar = $false $Form.Opacity = 0.8 $Button = New-Object System.Windows.Forms.Button $Button.Text = 'OK' $Button.ForeColor = '#ffffff' $Button.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",12,1,3) # Normal, Bold $Button.Anchor = 0 # None $Button.Width = 200 $Button.Height = 30 $Button.Left = ($Form.ClientSize.Width - $Button.Width)/2 $Button.Top = ($Form.ClientSize.Height - $Button.Height)/2 + 60 $Form.Controls.Add($Button) $TextBox = New-Object System.Windows.Forms.TextBox $TextBox.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",12,0,3) # Normal, Bold $TextBox.Anchor = 0 # None $TextBox.Width = 200 $TextBox.Left = ($Form.ClientSize.Width - $TextBox.Width)/2 $TextBox.Top = ($Form.ClientSize.Height - $TextBox.Height)/2 + 30 $Form.Controls.Add($TextBox) $Label = New-Object System.Windows.Forms.Label $Label.Font = New-Object System.Drawing.Font('Times New Roman',22,3,3) # Italic, Bold $Label.ForeColor = '#ffffff' $Label.AutoSize = $false $Label.Dock = 5 # Fill $Label.TextAlign = 32 # MiddleCenter $Label.Text = "Пожалуйста, введите код:" $Form.Controls.Add($Label) $Form.ShowDialog() | Out-Null
Добавим логику приложения: функцию проверки введенного кода и обработчики событий
(в том числе запретим закрытие приложения до тех пор, пока пользователь не введет требуемый код).
Add-Type -AssemblyName System.Windows.Forms $Form = New-Object System.Windows.Forms.Form $Form.TopMost = $true $Form.FormBorderStyle = 0 # None $Form.BackColor = '#3333ff' $Form.WindowState = 2 # Maximized $Form.ShowInTaskbar = $false $Form.Opacity = 0.8 $Button = New-Object System.Windows.Forms.Button $Button.Text = 'OK' $Button.ForeColor = '#ffffff' $Button.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",12,1,3) # Normal, Bold $Button.Anchor = 0 # None $Button.Width = 200 $Button.Height = 30 $Button.Left = ($Form.ClientSize.Width - $Button.Width)/2 $Button.Top = ($Form.ClientSize.Height - $Button.Height)/2 + 60 $Form.Controls.Add($Button) $TextBox = New-Object System.Windows.Forms.TextBox $TextBox.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",12,0,3) # Normal, Bold $TextBox.Anchor = 0 # None $TextBox.Width = 200 $TextBox.Left = ($Form.ClientSize.Width - $TextBox.Width)/2 $TextBox.Top = ($Form.ClientSize.Height - $TextBox.Height)/2 + 30 $Form.Controls.Add($TextBox) $Label = New-Object System.Windows.Forms.Label $Label.Font = New-Object System.Drawing.Font('Times New Roman',22,3,3) # Italic, Bold $Label.ForeColor = '#ffffff' $Label.AutoSize = $false $Label.Dock = 5 # Fill $Label.TextAlign = 32 # MiddleCenter $Label.Text = "Пожалуйста, введите код:" $Form.Controls.Add($Label) $notClose = $true # глобальная переменная - не позволять закрывать форму # функция проверки введенного кода function checkCode() { $code = '12345' if ($TextBox.Text -eq $code) { $notClose = $false $Form.Close() } } # функция-обработчик события для текстового поля function keyDown() { $ret = 'Return' if ($_.KeyCode -eq $ret) { Invoke-Expression "checkCode" } } # функция-обработчик события закрытия формы function formClosing() { if ($notClose) { $_.Cancel = $true } } # обработчик события для кнопки $Button.add_Click({ Invoke-Expression "checkCode" }) # обработчик события для текстового поля $TextBox.add_KeyDown({ Invoke-Expression "keyDown" }) # обработчик события закрытия формы $Form.add_FormClosing({ Invoke-Expression "formClosing" }) $Form.ShowDialog() | Out-Null
Выполняем скрипт в PowerShell ISE (F5) . . .
Как запустить выполнение скрипта в "боевых" условиях - догадайтесь сами :).
Дисклеймер: за "допиливание" полученного кода с целью противозаконного использования автор ответственности не несет.
Комментариев нет:
Отправить комментарий
Комментарий будет опубликован после модерации