|
Вопрос # 1 506/ вопрос решён / |
|
Добрый день!
В процессе разработке программы понял, что написать программу с её всем функциями это ещё пол дела! Второе дело это написать защиту от взлома. Хотел бы узнать, как это лучше сделать.
Так как я пишу программу для Интернета, сразу пришла в голову мысль о том, что бы организовать авторизации на удаленном сервере, только пока незнаю как это лучше сделать? Было бы хорошо, если часть программы вообще на удаленный сервер поместить и в момент загрузки программа дописывалась? В конечном итого хотелось бы добить вот такой схемы – при загрузки программы появляется окошка с вводом пароля и логина, далее идет авторизация на удаленном сервере, после прохождения авторизации загружается программа.
Так же мне интересно узнать какими другими способами защитить программа от копирования?
Большое спасибо за внимание, жду вашего мнения.
 |
Вопрос задал: Cool (статус: Посетитель)
Вопрос отправлен: 17 апреля 2008, 15:30
Состояние вопроса: решён, ответов: 3.
|
Ответ #1. Отвечает эксперт: Вадим К
Здравствуйте, Cool!
Догружать программу можно с инета, но... кто мешает скачать один раз эти части и приложить рядом? абсолютно никто. Хотя в целом эта идея не нова. Но для такого рода программ надо надёжное соединение с интернетом. А в некоторых частях России, к примеру, с этим проблемы - деньги. Врядли кто то будет платить за канал в месяц больше, чем стоит ваша программа:)
О самой защите - поищите в вопросах, неоднократно проскакивало.
Но надо помнить следующее:
- нет невзламываемых защит. Всё вопрос только времени и/или денег. Иногда паяльника:)
- Защита должна быть такой, что бы программу было дешевле купить, чем ломать.
- Иногда проще купить готовую защиту, пусть она и не идеальна, но ... иногда проще заплатить.
Но можно взлом обернуть на свою пользу. Один человек когда то сделал такую защиту - программа проверяла свою циклическую суму, и если она не совпадала, то не завершала работу, как обычно делают "писаки", а выводила сообщение "пора покормить быков, позвоните по такому то телефону". Люди звонили, спрашивали: "какие быки?" тут уже человек обяснял, что программа полученна незаконным способом и говорил, как разрулить эту ситуацию. И он получал свои деньги и клиентов.
Ещё один вариан заключается в поддержке - что будете клиенту помогать, отвечать на вопросы - а он за это платит раз в месяц небольшую сумму. А также есть "премиум обслуживание" - человек может заказать нужную ему функциональность. Лучше по рублику в месяц с каждого клиента, чем один раз, но много.
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 18 апреля 2008, 00:20
Оценка за ответ: 5
|
Ответ #2. Отвечает эксперт: Матвеев Игорь Владимирович
Здравствуйте, Cool!
На счет того, что подгружать часть программы из интернета и вообще на счет авторизации через интернет полностью согласен с предыдущим экспертом: такая схема годится лишь для крупных программных продуктов или для узкого круга клиентов, хотя вцелом эта схема может обеспечить самые высокие степени защиты от взлома, но я бы к примеру такую программу и устанавливать не стал, поискал бы аналог, мало ли что Ваша программа отсылает на сервер...
Вцелом для не слишком крупных программ можно посоветовать следующее:
1. Никогда не генерировать пароль/код для непосредственной сверки с введенным пользователем вариантом - такие программы даже ломать неинтересно;
2. Наилучший вариант - шифрование критических участков кода программы с использованием гаммы, получаемой из имени пользователя/пароля, в этом случае в начало шифруемого кода необходимо вставлять заплатки, сообщающие о том, что программа незарегистрированна в случае попытки их исполнения. Также нужно поместить сюда штрих-код - несколько байт, которые не попадут под выполнение (ноподобии jmp @@off; db 00h, 13h, ..., 27h; @@off:), для проверки правильно ли был расшифрован код. Я всегда рекомендую именно эту схему, т.к. использовал ее несколько раз и пока не знаю о взломе моих программ;
3. Самое простое, но и наиболее важное: всегда пакуйте свою программу мощными протекторами, не паковщиками вроде UPX или FSG, а именно протекторами: ASProtect, Armadillo, Yoda's protector и др. Это очень сильно усложняет взлом, такие защиты не снимаются автоматически а на ручное их снятие уходит много времени, да и 80% потенциальных взломщиков просто не смогут этого сделать;
И еще, я например в программу установки своих программ, после лицензии иногда добавляю текст с просьбой к потенциальным взломщикам сообщить о результатах их работы, чтобы вместе найти слабые места защиты. Как я уже говорил? мне неизвестны удачные попытки взлома моих программ, но я уверен, многие взломщики могут ответить, ведь большинство из них вполне сознательные люди и ломают они программу не для получения прибыли или нанесения вреда Вам, а из простого интереса.
Ответ #3. Отвечает эксперт: Drozdov D.V.
Здравствуйте, Cool!
согласен с предыдущими ответами, интернет это плохо, а если нета нет?
Привежите прогу к диску или ключу подключаемому к одному из портов, а прше
проверка контрольной суммы.
Один из премеров проверки, необходимо решить как распространять будите.
Приложение: Переключить в обычный режим- function GetCheckSum(FileName: string): DWORD;
- var
- F: file of DWORD;
- P: Pointer;
- Fsize: DWORD;
- Buffer: array [0..500] of DWORD;
- begin
- FileMode := 0;
- AssignFile(F, FileName);
- Reset(F);
- Seek(F, FileSize(F) div 2);
- Fsize := FileSize(F) - 1 - FilePos(F);
- if Fsize > 500 then Fsize := 500;
- BlockRead(F, Buffer, Fsize);
- Close(F);
- P := @Buffer;
- asm
- xor eax, eax
- xor ecx, ecx
- mov edi , p
- @again:
- add eax, [edi + 4*ecx]
- inc ecx
- cmp ecx, fsize
- jl @again
- mov @result, eax
- end;
- end;
-
- procedure TForm1.Button1Click(Sender: TObject);
- begin
- ShowMessage(IntToStr(GetCheckSum('c:Autoexec.bat')));
- end;
-
 |
Ответ отправил: Drozdov D.V. (статус: 4-ый класс)
Время отправки: 19 апреля 2008, 21:18
|
Мини-форум вопроса
Всего сообщений: 4; последнее сообщение — 19 апреля 2008, 06:09; участников в обсуждении: 2.
|
Cool (статус: Посетитель), 18 апреля 2008, 08:45 [#1]:
Большое спасибо за ответы.
Да брать лучше абонентскую плату!
Какими инструментами организовать авторизацию на удаленном сервере?
Что ставить на удаленный сервер?
|
|
Cool (статус: Посетитель), 18 апреля 2008, 09:01 [#2]:
И ещё как доканчивать программу и дописывать?
|
|
Вадим К (статус: Академик), 18 апреля 2008, 23:45 [#3]:
Ну дописывать программу это жестоко звучит. И я думаю, так просто не справитесь в первое время. А вот скачать длл, которую потом динамически подгрузить - раз плюнуть.
Удалённый сервер может работать абсолюно на любом программном обеспечении. Но можно не изобретать велосипед и поставить на сервер апач и загружать файлы по протоколу http. Можно и шифрование сделать, и авторизацию. В этом случае можно докачивать например с помощью компонента idHTTP. На сайте в разделе статьи есть примеры.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Cool (статус: Посетитель), 19 апреля 2008, 06:09 [#4]:
Спасибо большое, вот только сейчас прорисовывается общая схема...
|
31 января 2011, 20:02: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|