VBCoding Статьи Visual Basic 6 Visual Basic Защита программ методом «Глючная арифметика»

Visual Basic 6
Защита программ методом «Глючная арифметика»
Введение
В этой статье я рассмотрю один из методов защиты платного софта от взломщиков - глючная арифметика. С его помощью Вы сможете частично избежать нелегального пользования версиями Вашего продукта.

Описание
Суть метода заключается в том, что при вызове процедуры, в аргументе которой используется результат какого-либо расчета, в конце вычисления необходимо плюсовать разницу длины строки имени пользователя, указанного при регистрации, и полученного при расшифровке ключа. Если ключи равны, и результат разницы – ноль, то общий результат вычисления не изменится. Иначе программа начнет выдавать неправильные результаты и ошибки (последнее произойдет, если не поставлен On Error…).

Реализация метода
Пусть функция GetUser расшифровывает ключ активации и возвращает соответствующее имя пользователя, а функция UName возвращает имя пользователя, введенное через интерфейс регистрации, которое сохранено в реестре или ini файле.

Рекомендуется разставить разницу длин GetUser и UName и тому подобные проверки везде, где используются числа.

Примеры использования «глючной арифметики»:
Me.Show Len(UName) - Len(GetUser) ‘Показывает текущую форму

‘Показывает модальную форму frmStart
frmStart.Show 1 + Len(UName) - Len(GetUser)

‘Показывает сообщение
MsgBox "test!", vbInformation + vbOKOnly + Len(UName) - Len(GetUser)

FileNumber = FileNumber + 1 - 2 + 1 - Len(UName) + Len(GetUser)

‘Проверка активации
Dim X As Integer
X = 123
If X + 1 + Len(UName) - _
Len(GetUser) - 5 <> X + 1 - 5 Then End

Теперь, если пароль неправильный, длины строк могут быть не равны и произойдет ошибка.

Можно использовать разные процедуры, способы сравнения и вычисления.

В Visual Basic версии 6 есть интересная функция CallByName. Она позволяет вызывать процедуру по ее имени, передавая его через строковую переменную. Это дает возможность хранить зашифрованное название процедуры и расшифровывать его в ходе выполнения кода, используя в качестве части пароля разницу длин строк GetUser и UName и тому подобные вычисления.
Синтаксис CallByName:
CallByName(Object As Object, ProcName As String, CallType As VbCallType, Args() As Variant)

Выводы
Не следует использовать этот метод при проверке только что введенного ключа, так как пользователь может случайно ошибиться.

На жалобы пользователей насчет постоянных ошибок, Вы можете смело отвечать, что не гарантируете работоспособность взломанной версии программы.

Взломщику будет очень тяжело убрать из программы все «ловушки», так что рекомендую поставить в код как можно больше таких «проверок».

Рекомендую предупреждать об используемой защите пользователей. Если пользователь знает, что такая «глючность» произошла из-за взлома программы, он может принять решение купить лицензированную версию.

Помните! Если Ваша программа очень полезная – ее все равно рано или поздно взломают.

Автор Таранов Влад( Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript ).
Статью можно публиковать на Интернет-ресурсах с сохранением ссылки на сайт автора http://www.vbcoding.org.ua .

Желаю всем приятного программинга ;).
 

Добавить комментарий


Защитный код
Обновить

 
VBCoding Статьи Visual Basic 6 Visual Basic Защита программ методом «Глючная арифметика»  
Powered by Exponenta -