Целью статьи не является создание вредоносного приложения. Полученный в результате код можно использовать в качестве примера создания GUI с помощью PowerShell. Пару лет назад я уже освещал тему создания подобного кода с помощью VBScript, правда тогда не обошлось без «костыля» в виде ActiveX DLL. В этот раз есть возможность решить вопрос «нативными» средствами.
Для начала нарисуем интерфейс нашего локера.
Честно говоря я не представляю себе скрипт, для создания интерфейса которого может возникнуть необходимость использовать WPF — красота тут ни к чему. В общем на любителя. По-моему проще через Windows Forms.
Открываем PowerShell ISE, рисуем:
- форму без границ, во весь экран, поверх всех окон, слегка прозрачную, оттенка синего цвета
- кнопку для проверки введенного кода разблокировки
- текстовое поля для ввода кода разблокировки
- поле, содержащее текст приглашения ввести код разблокировки
$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) . . .
Как запустить выполнение скрипта в «боевых» условиях — догадайтесь сами .
Дисклеймер: за «допиливание» полученного кода с целью противозаконного использования автор ответственности не несет.
Как запустить выполнение скрипта в «боевых» условиях — догадайтесь сами .
Дисклеймер: за «допиливание» полученного кода с целью противозаконного использования автор ответственности не несет.
Источник: angelkeeper.wordpress.com
Целью статьи не является создание вредоносного приложения. Полученный в результате код можно использовать в качестве примера создания GUI с помощью PowerShell. Пару лет назад я уже освещал тему создания подобного кода с помощью VBScript, правда тогда не обошлось без «костыля» в виде ActiveX DLL. В этот раз есть возможность решить вопрос «нативными» средствами.
Для начала нарисуем интерфейс нашего локера.
Честно говоря я не представляю себе скрипт, для создания интерфейса которого может возникнуть необходимость использовать WPF — красота тут ни к чему. В общем на любителя. По-моему проще через Windows Forms.
Открываем PowerShell ISE, рисуем:
- форму без границ, во весь экран, поверх всех окон, слегка прозрачную, оттенка синего цвета
- кнопку для проверки введенного кода разблокировки
- текстовое поля для ввода кода разблокировки
- поле, содержащее текст приглашения ввести код разблокировки
$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) . . .
Как запустить выполнение скрипта в «боевых» условиях — догадайтесь сами .
Дисклеймер: за «допиливание» полученного кода с целью противозаконного использования автор ответственности не несет.
Как запустить выполнение скрипта в «боевых» условиях — догадайтесь сами .
Дисклеймер: за «допиливание» полученного кода с целью противозаконного использования автор ответственности не несет.
Источник: angelkeeper.wordpress.com
0 коммент.:
Отправить комментарий