Пишем профессиональную защиту GPcH (www.dotfix.net) Хакер, номер #074, стр. 074-112-1 Ликбез о защите прог на Visual Basic Мне встречалось множество статей о том, как написать проверку регистрации в shareware-прогах. В большинстве своем их авторы - люди, в защите несведущие, и методики их помогут защитить только от начинающих крэкеров - таких, которые не релизят свои крэки, и об их «грандиозных взломах» знают лишь немногие. Настоящую опасность представляют крэкеры, входящие в хак-группы и публикующие релизы на сайтах, любимых поисковиками типа astalavista. Сегодня мы будем разбирать защиту именно от таких крэкеров. Языки программирования Про защиту программ, написанных на Delphi и C++, рассказано уже довольно много. Большинство авторов сходятся на мнении, что лучше всего использовать всем известные навесные защиты, последние версии которых мощно защищают таблицу импорта и код. Совсем иначе обстоит дело с программами на Visual Basic 6.0. Навесные защиты пока не научились защищать VB-код и снимаются не сложнее упаковщиков (подробнее можно прочитать в одной из моих статей на www.dotfix.net), что сильно огорчает VB-программеров. Давай разберемся, с чем же это связано. Начнем с таблицы импорта, то есть с той самой таблички, что хранит адреса и имена вызываемых программой функций. Она в основной своей массе вызывает не стандартные API-функции, а их аналоги из библиотеки MSVBVM60.DLL. Это, вместе с необходимостью подстраиваться под все версии VB (а каждая версия VB привязывает создаваемое приложение к собственной версии рантайм-библиотеки MSVBVMXX.DLL, где XX - номер версии VB), создает большие проблемы для навесной защиты. Не будем вникать в проблемы защиты импорта, а поговорим немного про навесную защиту методом спертых байт. Она представляет собой перемешивание с мусором части кода программы (обычно несколько десятков байт от точки входа) и мешает крэкеру восстановить программу после снятия с нее навесной защиты. Этот метод также не прокатит в программах, написанных на VB, потому что на точке входа в программу можно замусорить лишь две ассемблерные инструкции: push <смещение кода программы> и call <MSVBVM60.ThunRTMain>, остальное инициализируется самой функцией ThunRTMain, и перед ее вызовом все должно быть в незашифрованном виде. В основном именно это не дает создать нормальную навесную защиту для программ, написанных на VB. Ниже я расскажу про наиболее сложные и неломаемые защиты, которые ты можешь реализовать сам в своих программах. Итак, приступим. Метод глючной арифметики Для начала напишем функцию, генерящую правильный пароль. В нее будет передаваться имя пользователя, а она должна, отталкиваясь от него, генерить уникальный пароль, действительный только для этого имени. Самое простое - использовать криптовку XOR'ом. При этом процедуры генерации кода по имени и наоборот могут выглядеть так, как это изображено ниже. Генерация пароля из имени пользователя 'циклично шифруем каждый символ имени пользователя числом n, которое варьируется от 0 до 10 Public Function GetPass(sName As String) Dim n As Byte For i = 1 To Len(sName) sPass = sPass & Hex(Asc(Mid$(sName, i, 1)) Xor n) |