Методы зашиты VB программы от копирования.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 09.01.2006 (Пн) 4:38

Вот вспомнил тут. Была у меня какя-то программка которая просила ввести код. Так вот там защита была такая:
1)Ультрагипермультинавороченная система кодирования и шифрования.
2)Кнопка ОК была спрятана за пределами формы.

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

Так вот это, наверное, пердел тупости. Запускаешь программу с помощью Shell с параметром WindowMaximize, и жмешь кнопочку и работешь не 30 дней, а сколько влезет. Удивительно что создатели навороченного алгоритма защиты не догадались скрыть кнопочку или хотябы дисэнаблить её.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

kif
Постоялец
Постоялец
 
Сообщения: 736
Зарегистрирован: 10.12.2001 (Пн) 18:06
Откуда: Украина, Одесса

Сообщение kif » 09.01.2006 (Пн) 11:49

FleX_2004 писал(а):2GAGArin 1) на пальцах это хорошо, но мог бы и примерчик кинуть.
2) Теперь потеоретизируем=)
GAGarin писал(а):Суть идеи завязать работу проги на какую-то дополнительную "константу"

раз завязать на константу, то я не против :) пусть берет эту константу и хавает =) слабым местом будет проверка правильности серийника с нужным тебе. как бы ты ее не реализовывал, исключая случаи с несимметричным шифрованием таким как RSA где шифруешь на открытый ключ содержимое серийника - а расшифровываешь на закрытом ключе, который дает - итог: расшифровать могу, а зашифровать не могу тк нету открытого ключа, который по закрытому не вычисляется, она очень просто (в подавляющем большинстве случаев) снимается. А вот при RSA ключ действительно хорошо защищен... НО мало того что тебе не надо делать проверку - тебе надо использовать в своей программе ДАННЫЕ из этого полученного ключа, НАПРИМЕР : в вычислении А= const1 +const2 * const3 \func(const4) ИСПОЛЬЗОВАТЬ вместо const1 итп Присланные данные !НО не алгоритмом весов (например: а=21*43-key(4)+<<нормальное значение key(4)>> - такое просто вырезается и остается а=21*43)
те данные НУЖНЫЕ ДЛЯ РАБОТЫ ПРОГРАММЫ ПРИСЫЛАЮТСЯ КАК КЛЮЧ. - это самый сложный тип зашиты для кракеров(смотря конечно как он реализован=) но даже слабо организованный тянет на твердую ТРИ.
вот например bayasaa накрутил в своей защите.... ойойой... просто жуть... всяких там номеров биосов итд итп не пересчитать как он этот ключик получает. кучу циклов написал... а итог... защита свелась к одной единственной строчке : if введенный_ключ = правильному_ключу then запускать нормально прогу
else
выдавать сообщение что я хочу денег
end if
это защита одного байта. никогда так не делайте, если конечно не хотите надурить взломщика и показать что ваша защита - защита от ребенка =)))))


Это все хорошо, но если этот ключь не будет содержать информации о пользователе или об организации , то никто мне, купившему программу, не помешает ее перепродать еще 5 раз за пол цены вместе с ключем.
так, что применительно к бухгалтерии, например, я думаю, в ключь должны входить: наименование организации, счет, фио исполнителя и или его код и, например, пароль к базе данных mdb, т.е. данные идентифицирующие конкретного пользователя таким образом, чтобы не было никакого смысла ее продавать, короче мысль ясна... :-)
Братья и сестры, что вы делаете???
Ведь вы же братья и сестры.

kif
Постоялец
Постоялец
 
Сообщения: 736
Зарегистрирован: 10.12.2001 (Пн) 18:06
Откуда: Украина, Одесса

Сообщение kif » 09.01.2006 (Пн) 14:01

FleX_2004
Выложи ХАФФМАНА, пожалуйста :-)
Братья и сестры, что вы делаете???
Ведь вы же братья и сестры.

kif
Постоялец
Постоялец
 
Сообщения: 736
Зарегистрирован: 10.12.2001 (Пн) 18:06
Откуда: Украина, Одесса

Сообщение kif » 10.01.2006 (Вт) 9:38

за хаффмана отдельное спасибо :-)
Братья и сестры, что вы делаете???
Ведь вы же братья и сестры.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 10.01.2006 (Вт) 11:06

FleX_2004 писал(а):2Хакер ты либо нихрена в этом не понимаешь

в чём, в этом?

FleX_2004 писал(а): либо просто читать не умеешь. так что читай и думай... да и у некоторых мозгов не хватит понять то что написано... например ты когда нибудь дорабатывал чужой код?... если нет - то попробуй.....


Т.е. ты не согласен с тем что я написал? Хочешь сказать возможно написать абсолютно невзламываемую программу.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

kif
Постоялец
Постоялец
 
Сообщения: 736
Зарегистрирован: 10.12.2001 (Пн) 18:06
Откуда: Украина, Одесса

Сообщение kif » 10.01.2006 (Вт) 12:01

FleX_2004
не находит функцию CopyMem, подкинул ему RtlMoveMemory - VB вылетел :-(
Братья и сестры, что вы делаете???
Ведь вы же братья и сестры.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 10.01.2006 (Вт) 13:03

kif вот тут методов компресии хоть вилами грузи - одного хаффмана шесть видов

http://www.vbstreets.ru/VB/Sources/42704.aspx
Лучший способ понять что-то самому — объяснить это другому.

kif
Постоялец
Постоялец
 
Сообщения: 736
Зарегистрирован: 10.12.2001 (Пн) 18:06
Откуда: Украина, Одесса

Сообщение kif » 10.01.2006 (Вт) 13:45

:shock: да уж, спасибо. :-)
Братья и сестры, что вы делаете???
Ведь вы же братья и сестры.

kif
Постоялец
Постоялец
 
Сообщения: 736
Зарегистрирован: 10.12.2001 (Пн) 18:06
Откуда: Украина, Одесса

Сообщение kif » 10.01.2006 (Вт) 16:09

уже разобрался, спасибо :-)
Братья и сестры, что вы делаете???
Ведь вы же братья и сестры.

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 11.01.2006 (Ср) 10:59

FleX_2004
мне не кайф ничего делать... вот FleX_2004 за меня щас все сделает... ведь он крут... чего ему стоит

Ты на свою подпись посмотри :)
Спасибо.

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 11.01.2006 (Ср) 12:06

FleX_2004 писал(а):вот вам для прочтения http://www.codenet.ru/progr/other/hack_solon.php - там все доступно расписано....(особенно или 7 или 17 стр... называется "методы неявного контроля"

Только там 17 страницы нету. Пишется? :)

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 11.01.2006 (Ср) 13:01

Раз уж зашла речь про методы компрессии, может кто-нибудь знает алгоритм (или библу), хорошо и быстро сжимающий текст? Из того зоопарка лучший из хаффманов 300 кило сжимает до 60% от оригинала за 1-2 секунды, LZSS до 20%, но делает это секунд 20. Остальные вообще не заслуживают внимания.
Лучший способ понять что-то самому — объяснить это другому.

GPP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 351
Зарегистрирован: 02.11.2005 (Ср) 8:02
Откуда: г.Невельск о.Сахалин

Сообщение GPP » 15.01.2006 (Вс) 17:02

По моему тема себя исчерпала! Или я не прав?
GPP(c) Gorlo Pavel Programming

GPP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 351
Зарегистрирован: 02.11.2005 (Ср) 8:02
Откуда: г.Невельск о.Сахалин

Сообщение GPP » 16.01.2006 (Пн) 4:47

FleX_2004, что значит 2 :lol:
GPP(c) Gorlo Pavel Programming

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 16.01.2006 (Пн) 10:49

2 = to
to GPP = (обращение) к GPP
Моду создают модоки, а распространяют модозвоны.

GPP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 351
Зарегистрирован: 02.11.2005 (Ср) 8:02
Откуда: г.Невельск о.Сахалин

Сообщение GPP » 16.01.2006 (Пн) 17:35

hCORe, ну так че делать та будем? НАДО ДУМАТЬ!!!
GPP(c) Gorlo Pavel Programming

Roman-vb
Обычный пользователь
Обычный пользователь
 
Сообщения: 91
Зарегистрирован: 24.01.2006 (Вт) 18:31
Откуда: БРЯНСК

Сообщение Roman-vb » 26.01.2006 (Чт) 13:39

У вас в проекте должно быть 2 формы : одна - программа Hello World, а вторая - регистрация. Сначала сделаем самое легкое - программу Hello World , в этой статье я не буду говорить как это делать, это все описанно в первой программе только скажу, что имя формы у меня в программе - prog

Далее делаем форму с именем frmSn. На ней должны быть такие элементы :

Этикетка (Label) : Caption - Серийный номер
Этикетка (Label) : Caption - Регистрационный код
Текстовое поле (TextBox) : Свойство Text должно быть пустым, имя - txtSn
Текстовое поле (TextBox) : Свойство Text должно быть пустым, имя - txtRc
Кнопка (CommandButton) : Имя - Command1, Caption - Регистрировать
Кнопка (CommandButton) : Имя - Command2, Caption - О регистрации
Кнопка (CommandButton) : Имя - Command2, Caption - Выход





--------------------------------------------------------------------------------

Программирование в коде

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

Option Explicit - заставляем объявлять все переменные

Dim sn as Long - Объявляем "большую" переменнубю sn - это серийный номер

Dim rc as Long - Объявляем "большую" переменнубю rc - это регистрационный код

Dim result as Long - это "служебная" переменная потом поймете для чего она нам нужна

Dim result2 as Single - это также "служебная" переменная

Dim reg As String - Это регистрация - если зарегистрированно то она равна 1 если нет - то 0

При начале работы программа первым делом должна проверить - зарегистрированна ли она. Пишем в разделе Form_Load( )

If Dir("c:\r.txt") = "" Then - Проверяем - есть ли файл r.txt на диске С и если нету тогда...

reg = 0 - Придаем регистрации значение - 0 (незарегистрированно)

Open "c:\r.txt" For Output As #2 -Открываем этот файл для записи

Print #2, reg -Записываем в него переменную reg

Close #2 -Закрываем его

Else -Если на диске С есть файл r.txt

Open "c:\r.txt" For Input As #2 -Открываем его для вытаскивания из него данных

Input #2, reg -Вытаскиваем из него переменную reg

Close #2 -Закрываем его

If reg = "1" Then -Если зарегистрированно то

prog.Show -Показываем форму prog

frmsn.Hide - Скрываем эту форму

End If - Заканчиваем проверку регистрации

End If - Заканчиваем проверку наличия файла
Дальше программа должна проверить : а в первый ли раз ее запускают, и если в первый, то сгенерировать серийный номер , показать его и записать в свою директорию в файл с именем sn.

If Dir("sn") = "" Then -Если нет файла sn - то есть программа запущена в первый раз то...

sn = Int(Rnd * 2000000) -Генерируем слуйчайный серийный номер

txtSN = sn -Записываем его в TextBox

Open "sn" For Output As #1 -Открываем файл sn для записи

Print #1, sn -Записываем в него переменную sn

Close #1 -Закрываем файл

Else -Иначе - то есть если файл sn - есть

Open "sn" For Input As #1 -Открываем файл sn для вынимания из него данных

Input #1, sn -Вытаскиваем из него переменную sn

Close #1 -Закрываем файл

txtSN = sn -Записываем серийный номер в TextBox

End If

Осталось совсем чуть-чуть. Но теперь и начинается самое интересное. Дело в том, что нужно проверит соответствие серийного номера - регистрационному коду. А так как номера у нас все время разные - то для их взаимосвязи нужна какая-либо формула. Например код должен быть равен номер поделить на 2. Но такой код быстро раскусят, найдут эту формулу. Итак : формула будет такая , делим номер на 2, округляем результат , и прибавляем 19 -это и будет код. Конечно такой код раскустить очень легко. Но вы можете придумать свой код, который не раскусят так быстро ( любую защиту можно обойти ). Итак, пишем в коде кнопки регистрация :

On Error GoTo 1 -При ошибке - идти на метку 1

rc = txtRC -Придаем значение переменной rc

result = Int (sn / 2) - Делим серийный номер на 2

result = result + 19 - Прибавляем к результату 19

If rc = result Then - Если получившееся число - целое то...

MsgBox "Спасибо за регистрацию", vbExclamation

reg = "1" - Регистрация равна 1 - зарегистрированно

Open "c:\r.txt" For Output As #2 -Открываем файл r.txt для записи

Print #2, reg -Записываем в него переменную reg

Close #2 -Закрываем его

prog.Show - Показываем форму prog

frmsn.Hide - Прячем форму frmsn

Else 'Иначе, то есть если результат не целое число

MsgBox "Извините, но код неверен", vbCritical

End If- Заканчиваем проверку

Exit Sub -Нужно для того, чтобы программа не пошла на метку 1

1 - Метка 1

MsgBox "Неправильно введен регистрационный код", vbCritical

Все.Программа готова, но нужно еще сделать несколько мелочей. В коде кнопки "О регистрации" напишите :

MsgBox "Для регистрации вы должны написать по адресу timurkar@mail.ru и указать ваш серийный номер", vbInformation - вместо timurkar@mail.ru напишите свой адрес или что то типа этого

В коде кнопки "Выход" - напишите

End
[/img]

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 26.01.2006 (Чт) 13:49

Roman-vb
Это что и это к чему?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

GPP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 351
Зарегистрирован: 02.11.2005 (Ср) 8:02
Откуда: г.Невельск о.Сахалин

Сообщение GPP » 26.01.2006 (Чт) 14:18

Кто-то решил нас удевить!? :D
GPP(c) Gorlo Pavel Programming

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 26.01.2006 (Чт) 15:02

Roman-vb походу ниасилил предыдущие страницы. 8)
Лучший способ понять что-то самому — объяснить это другому.

GAGArin
Неистовый флудер
Неистовый флудер
 
Сообщения: 1777
Зарегистрирован: 23.12.2002 (Пн) 12:46
Откуда: я тут взялся, не знаю...

Сообщение GAGArin » 26.01.2006 (Чт) 15:28

Гы :lol: Давно так не смеялся :lol: Защита просто экстра класса.

Wild VB Code for Food
Постоялец
Постоялец
 
Сообщения: 387
Зарегистрирован: 16.06.2005 (Чт) 17:34
Откуда: ты, друг? =)) Сообщений: 1234

Сообщение Wild VB Code for Food » 26.01.2006 (Чт) 17:40

По идее можно перехватить DeviceIoControl. Тогда идея с серийником винча неудачна.
Лучше думать чем жевать.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 26.01.2006 (Чт) 17:55

По моему человек ошибся разделом. Эт надо было в Треп... типа Юмор
Весь мир матрица, а мы в нем потоки байтов!

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 26.01.2006 (Чт) 18:26


Пред.След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 18

    TopList  
cron