Visual Basic, .NET, ASP, VBScript
 

   
 
Описание для автора не найдено
 
     
   
 

Иногда при создании программ возникает необходимость несколько ограничить доступ к вашему продукту. В таких случаях обычно все используют стандартную форму в VBLog 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

 
     

   
   
     
  VBNet рекомендует