| 
| 
 | Вопрос # 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) Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |