Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 506

Раздел: Delphi » Прочее
/ вопрос решён /

Добрый день!

В процессе разработке программы понял, что написать программу с её всем функциями это ещё пол дела! Второе дело это написать защиту от взлома. Хотел бы узнать, как это лучше сделать.
Так как я пишу программу для Интернета, сразу пришла в голову мысль о том, что бы организовать авторизации на удаленном сервере, только пока незнаю как это лучше сделать? Было бы хорошо, если часть программы вообще на удаленный сервер поместить и в момент загрузки программа дописывалась? В конечном итого хотелось бы добить вот такой схемы – при загрузки программы появляется окошка с вводом пароля и логина, далее идет авторизация на удаленном сервере, после прохождения авторизации загружается программа.
Так же мне интересно узнать какими другими способами защитить программа от копирования?
Большое спасибо за внимание, жду вашего мнения.

Cool Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: 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% потенциальных взломщиков просто не смогут этого сделать;

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

Ответ отправил: Матвеев Игорь Владимирович (статус: Студент)
Время отправки: 18 апреля 2008, 02:53
Оценка за ответ: 5

Ответ #3. Отвечает эксперт: Drozdov D.V.

Здравствуйте, Cool!
согласен с предыдущими ответами, интернет это плохо, а если нета нет?
Привежите прогу к диску или ключу подключаемому к одному из портов, а прше
проверка контрольной суммы.
Один из премеров проверки, необходимо решить как распространять будите.

Приложение:
  1. function GetCheckSum(FileName: string): DWORD;
  2. var
  3. F: file of DWORD;
  4. P: Pointer;
  5. Fsize: DWORD;
  6. Buffer: array [0..500] of DWORD;
  7. begin
  8. FileMode := 0;
  9. AssignFile(F, FileName);
  10. Reset(F);
  11. Seek(F, FileSize(F) div 2);
  12. Fsize := FileSize(F) - 1 - FilePos(F);
  13. if Fsize > 500 then Fsize := 500;
  14. BlockRead(F, Buffer, Fsize);
  15. Close(F);
  16. P := @Buffer;
  17. asm
  18. xor eax, eax
  19. xor ecx, ecx
  20. mov edi , p
  21. @again:
  22. add eax, [edi + 4*ecx]
  23. inc ecx
  24. cmp ecx, fsize
  25. jl @again
  26. mov @result, eax
  27. end;
  28. end;
  29.  
  30. procedure TForm1.Button1Click(Sender: TObject);
  31. begin
  32. ShowMessage(IntToStr(GetCheckSum('c:Autoexec.bat')));
  33. end;
  34.  


Ответ отправил: Drozdov D.V. (статус: 4-ый класс)
Время отправки: 19 апреля 2008, 21:18


Мини-форум вопроса

Всего сообщений: 4; последнее сообщение — 19 апреля 2008, 06:09; участников в обсуждении: 2.
Cool

Cool (статус: Посетитель), 18 апреля 2008, 08:45 [#1]:

Большое спасибо за ответы.
Да брать лучше абонентскую плату!
Какими инструментами организовать авторизацию на удаленном сервере?
Что ставить на удаленный сервер?
Cool

Cool (статус: Посетитель), 18 апреля 2008, 09:01 [#2]:

И ещё как доканчивать программу и дописывать?
Вадим К

Вадим К (статус: Академик), 18 апреля 2008, 23:45 [#3]:

Ну дописывать программу это жестоко звучит. И я думаю, так просто не справитесь в первое время. А вот скачать длл, которую потом динамически подгрузить - раз плюнуть.
Удалённый сервер может работать абсолюно на любом программном обеспечении. Но можно не изобретать велосипед и поставить на сервер апач и загружать файлы по протоколу http. Можно и шифрование сделать, и авторизацию. В этом случае можно докачивать например с помощью компонента idHTTP. На сайте в разделе статьи есть примеры.
Галочка "подтверждения прочтения" - вселенское зло.
Cool

Cool (статус: Посетитель), 19 апреля 2008, 06:09 [#4]:

Спасибо большое, вот только сейчас прорисовывается общая схема...

31 января 2011, 20:02: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:54
Выполнено за 0.03 сек.