Иногда при создании программ возникает необходимость
несколько ограничить доступ к вашему продукту. В таких случаях обычно все
используют стандартную форму в VB – Log In Dialog полагая, что это даёт стопроцентную защиту.
На самом деле это совсем не так! Меня давно интересовал
вопрос о том возможно ли как-то подглядеть пароль из файла EXE
и я понял, что действительно можно. Сегодня мы поговорим о том, как можно
узнать пароль в программе EXE и о том, как защитить
вашу программу от подобного рода взломов. Итак для начала создадим новый проект
(Standart EXE)
и кроме основной формы добавим в проект форму Log In Dialog (делается это с помощью диалогового окна Add Form,
изображённого на предыдущей картинке). Теперь откроем код формы ЛогИн и увидим
в процедуре обрабатывающей щелчок на кнопку cmdOK:
'check for correct password
If txtPassword = "password" Then
'place code to here to pass the
'success to the calling sub
'setting a global var is the easiest
LoginSucceeded = True
Me.Hide
Else
MsgBox "Invalid Password, try again!", , "Login"
txtPassword.SetFocus
SendKeys "{Home}+{End}"
End If
То есть если вы введёте в поле txtPassword
пароль “password”, то LoginSucceeded
будет равняться True (пользователь ввёл верный
пароль!), если же вы впишете что-то другое, то выйдет сообщение "Invalid Password, try again!". Затем сделайте
форму ЛогИн стартовой и скомпилируйте ваш проект – File/Make Project1.exe
(Файл/Компилировать Project1.exe).
Теперь откройте вашу программу с помощью Блокнота и посмотрим на файл EXE в виде текста.
Выберите в Блокноте Поиск/Найти и введите в поле Образец
строку “p a s s w o r d” то есть
наш пароль с пробелами между буквами. Нажмите Найти далее и смотрите, что
случилось!
Не удивляйтесь, но он действительно нашёл наш пароль!
Компилятор совсем никак не прячет данные в переменных даже текстовые. Вот так!
Не верится? Так попробуйте ещё раз! Поменяйте код в ЛогИне:
If txtPassword = "password" Then
Например на:
If txtPassword = "ABCDE-12345" Then
и проверьте ещё раз! Совпадений быть не может. Теперь вы
знаете, что пароль в стандартном ЛогИне можно подглядеть. И читатель скажет:
“Что это он всё стандартный, стандартный, а что можно сделать свой придумывать,
новый?”. Отвечу – оставить прежний, но доработать! Как? Давайте
поэксперементируем. Сменим стандартный код кнопки cmdOK
на следующий:
Private Sub cmdOK_Click()
Dim A As String, B As As String, C
As String, D As String
A = “p”
B = “a”
C = “s”
D = “w”
A = A + B + C + D
'check for correct password
If txtPassword = A Then
'place code to here to pass the
'success to the calling sub
'setting a global var is the easiest
LoginSucceeded = True
Me.Hide
Else
MsgBox "Invalid Password, try again!", , "Login"
txtPassword.SetFocus
SendKeys "{Home}+{End}"
End If
End
Sub
Проверяем!
Всё таки он есть, правда в другом виде. Как же нам запутать
кракера, который попытается найти пароль к вашей программе разглядывая её в
виде текста? Может запутать пароль в прямом смысле? Попробуем!
Private Sub cmdOK_Click()
Dim A As String, B As As String, C
As String, D As String
B = “a”
D = “w”
C = “s”
A = “p”
A = A + B + C + D
'check for correct password
If txtPassword = A Then
'place code to here to pass the
'success to the calling sub
'setting a global var is the easiest
LoginSucceeded = True
Me.Hide
Else
MsgBox "Invalid Password, try again!", , "Login"
txtPassword.SetFocus
SendKeys "{Home}+{End}"
End If
End
Sub
Смотрим!
Изменилось? Да! Правда если честно не знаю как вас, но меня
такая защита не устраивает. А если пароль будет коротким? Например DAN. У нас выйдет в Блокноте A ^ N ^ D. И что? За одну минуту
можно подобрать пароль поменяв полжение букв! Тогда путаницу попробуем вставить
в процедуру Form_Load, а
проверять переменную А будем в cmdOK. Идея! Пробуем. Да
действительно, найти его невозможно!
Ну, что ж? Теперь вы знаете как защитить программу от
нежелательного доступа. Но это не всё! Вы ещё приобрели опыт в том как вскрыть
пароль. Если хотите узнавать пароли к программам вашего противника (или
конкурента), то пользуйтесь этим и никогда не рассказывайте про эту статью :)
ОК? Хочу добавить, что слишком большие программы Блокнот открывать не может и
всегда будет спрашивать разрешение открыть Wordpad’ом.
В Wordpad’е отыскать пароль может составить трудности,
так как Wordpad отображает данные программы не с
пробелами (например “p a s s w o r d”), а с какими-то квадратиками. Но всё равно кто ищет, тот всегда
найдёт! Если поиск составил трудности, то можно при помощи Поиска найти “I n v a l i d P a s s w o r d, t r y A g a i n“. Поверьте,
пароль будет где-то поблизости!
Если вам понравилось, то вы можете написать программку,
которая сама будет отыскивать пароли в программе! Я что-то подобное уже делал,
получилось. Нужно найти закономерности с учётом которых ставится пароль (например
около чего он находится). Думаю, эта статья не оставит вас равнодушными и вы
сразу приметесь улучшать свою программу (или ломать чью-то :)). Дерзайте!
Daniyar Atadjanov