PDA

Показать полную графическую версию : [Горячий вопрос] Защита своего дистрибутива!


Страниц : 1 2 [3] 4 5 6 7 8 9 10 11 12 13

XXXler
23-09-2006, 14:51
Можно сию фигню превратить в exe (AutoIT, SFX etc), назвать понеприметней, копировать через txtsetup+dosnet, добавлять на автозапуск из HKLM\...\Run в HiveSys.inf.

При первом запуске при несоответствиии BIOS ID просто писать в реестр HKLM\SYSTEM\Setup\SystemSetupInProgress=1, в противном случае удалять себя из автозагрузки и помечать exe на удаление при следующем запуске системы (HKLM\System\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations)

При "левом" биосе: следующая перезагрузка и ... красивое окошко "блаблабла, система установлена не до конца, установите еще раз".

Думаю это рядового юзера отвадит от клонирования и использования этого дистрибутива, а начинающим пиратам прийдется немного попотеть чтобы вычислить, что именно не дает работать форточкам.

amel27
23-09-2006, 16:47
применяемые методы зависят от целей:

1. Защита "от дурака" - т.е. всех кто любит тыкать в дисковод все подряд или нажимать setup.exe. Чаще это сами админы и авторы защищаемых дистрибов... это я о себе. :)
2. Защита от самонадеянного пользователя - как корпоративного так и домашнего. Такие обычно не заходят за границы п.1 хотя могут отработать все возможные варианты кося "под дурака" и не переходя при этом "границу ответственности".
3. Защита от хакеров всех мастей, совсем не обязательно злонамеренных (тут вроде все типа хакеры).

ИМХО: если п.1 и п.2 можно и нужно решать (в рамках форума), то ориентация на п.3 бесперспективна т.к. тянет за собой целый ворох поблем от моральных до юридических (как уже справедливо заметили Boa Soft и simplix). Посему для меня функциональность и удобство применения важней "закрученности" метода защиты, хотя если такая защита не мешает работе то почему бы и нет... :)

EgOrus
23-09-2006, 21:29
Здесь уже столько вариантов озвучили, в т.ч. и сам автор темы привел инструкцию с MSFN, тема начала жить своей жизнью :-)
Конкретных же готовых решений никто не дал, и это правильно, незачем давать "врагу" ключ к решению задачи, пусть каждый для себя сам решит стоит ли ему защищаться и если да, то как это сделать.
Кстати никто не предложил вариант защиты с помощью паролей на загрузку используемый в BCDW или EasyBoot.

VseDoFeNi
23-09-2006, 22:09
защиты с помощью паролей на загрузку используемый в BCDW
Который при сборке iso просто спрятать. Ну и можно для забывчивых(вроде меня) ставить софтинку, извлекающую диск при выключении или ребуте.

alcos
24-09-2006, 06:56
Прочёл тут ваши беседы и решил тоже написать как я защищаю свой диск да и вообще о защите. Естественно, знающий человек с этим справится, но не без труда.

А вот привязку к железу делать нельзя, так как вы сами не сможете даже установить свою сборку никому с другим железом, если не оставите для себя лазейку.

Я объединил на одном диске:
Три винды XPce изменённый вид, XPce стандартная и Server 2003ce rus (ce - Corporate Edition)
LiveCD iNFR@ CD PE 6.2a
LiveCD Utility Boot CD v3.3 Specialist
HirenBootCD v8.3
Весь Acronis
ERD Commander 2005
и ещё много чего.

1. У меня диск загрузочный через BCDW v2.0, следовательно, чтобы нельзя было им воспользоваться мы вводим пароль в файле настроек. Причём он хранится в MD5Hash: B7A71D8799CF6DD75B711A7F52DE6675 виде и восстановить его невозможно, насколько я знаю обратного алгоритма нет, а может уже и есть. Можно только отключить его, если знать где. Если править и перезаписывать диск, то тоже надо знать как.

2. Я создавал меню автозапуска диска программой AutoRun Pro Enterprise и там тоже есть несколько функций защиты. Даже можно сделать диск номерным
The CD Key is: AAAA-AAAA-AAAA-AAAA
The Serial Number is: 1111111111
что введёт в недоумение простого пользователя, стащившего дистрибутив. Но это защищает только созданное меню автозапуска и ничто не мешает просто зайти на диск через проводник и скопировать то, что вам надо.

3. Обычный перепрожиг диска, как простая защита от копирования (для незнающих - это запись большего объёма данных, чем умещается на диске, не все дисководы это поддерживают), но, тут тоже есть подводные камни, приведу пример: у меня два дисковода Plextor (поддерживает перепрожиг) и LG (не поддерживает перепрожиг). Записываю на Plextor-е с перепрожигом 1.5-15Мб и LG уже не может считать диск простым копированием на HDD. Вероятно с другими дисководами будут те же проблемы, но сам Plextor считывает диск без проблем.

4. Диск оптимизирован (типа сжат) и простое копирование на HDD выдаст вам размер содержимого примерно 5.5Гб (и это не предел), что на обычный DVD не влазит. Через UltraISO оптимизация работает неправильно, диск потом не работоспособен (в новых версиях я не пробовал, может уже исправили этот косяк)

5. Можно большую часть всего содержимого загнать в SFX архив и запаролить, но тогда могут возникнуть проблемы с автоустановкой, ведь нельзя ввести пароль автоматически, если только попробовать через скрипты программы AutoIt.

6. В файле winnt.sif существует такой параметр AutoLogonCount=х, где Х есть количество автовходов в винду и после обнуления счётчика она требует ввести пароль, который был задан при автоустановке в файле winnt.sif и при незнании пароля или его начального местонахождения winnt.sif войти будет трудновато.

7. Ну и наконец мы добрались до StarForce v3. Существует пакет для малого бизнеса и домашних пользователей. Там даётся 10 специальных мастер-дисков на которые вы пишите свои данные. Потом генерите мастер-номер и отправляете его старфорсовцам, а они на основе вашего номера генерят (свой главный генератор они не распространяют) основной номер диска и отправляют вам обратно, теперь вы можете с мастер-диска делать свои копии, а копия с копии работать не будет без основного номера. Но за это всё надо платить и создать диск без ошибок, мастер-дисков то всего 10.
Я над своим диском уже год работаю и периодически вылазят разные мелкие ошибки.

Всё описанное расчитано на простого пользователя и знающий всё это с трудом "исправит"

Debugger
24-09-2006, 12:40
alcos
Через UltraISO оптимизация работает неправильно, диск потом не работоспособен (в новых версиях я не пробовал, может уже исправили этот косяк)
Работает, я только так и делаю.

amel27
26-09-2006, 06:31
Собственно поделка. Прошу не судить слишком строго, так как я не ставил себе цели создания «законченной вещи» - для меня это просто повод применить имеющиеся наработки. Все сделано только средствами AutoIT. Из дополнительных утилит используются DevCon, md5sum (GNU) и ctbios (freeware).

Общая идея:
Средствами CMD-утилит считываются различные параметры конфигурации ПК, при необходимости добавляется пароль, и от всего этого вычисляется MD5-хэш, который собственно и является "ключом" к установке. Вся логика оформлена в виде фейкового Setup.exe, в случае успешной авторизации извлекается оригинальный Setup и запускается на дальнейшее выполнение.

Типичная последовательность действий:

1. Настраиваем секцию [control] ini-файла, оставляем только необходимые способы проверки.
2. Запускаем скрипт с параметром "Detect", в результате будет скомпилирован скрипт Detect.Exe для этапа сканирования (дистрибутив для этого не требуется).
3. На целевых компьютерах запускаем скрипт Detect.Exe и сохраняем сгенерированные ключи.
4. Записываем ключи с разрешенных компьютеров в секцию [SignKeys].
5. Запускаем скрипт с параметром "Setup", в результате будет скомпилирован фейк-Setup для этапа установки, который уже будет содержать копию оригинального установщика. Осталось лишь заменить в дистрибутиве файл Setup.ex_ на вновь сгенерированный.

Кроме параметра /Detect поддерживается старый параметр /Scan, создающий фейк-сетап режима сканирования, может быть полезен для проверки компьютеров без установленной ОС Windows.

Более подробное описание настроек в readme.txt

линк: http://getfile.biz/51642

Dark Engel
26-09-2006, 10:46
amel27

Спасибо за еще один вариант. Но сразу вопрос в варианте с ProtectUA есть возможность привязки к нескольким материнским платам. А можно ли сделать сдесь такое же? Просто очень удобно сделал диск для своих друзей один на всех. А то пересобирать для каждого отдельно немного муторно.

amel27
26-09-2006, 13:11
Dark Engel
можно ли сделать сдесь такое же?Без проблем - если будет проявлен достаточный интерес добавлю поддержку нескольких строк в секции [sign]. Собственно принимаются любые предложения, в течении двух ближайших недель у меня еще будет время повозиться...

Dark Engel
26-09-2006, 14:09
amel27

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

Добавлено.

Например как я себе это представляю.

На дистриб натравливается ваша програмка. Она отрабатывает и выдает на гора екзешничек. Этот экзешник я раздаю всем кому нужен данный диск. Они его запускают на целевой машине и он выдает код. После этого они сообщают код мне, и я вставляю его в файл настроек, как изначально и преполагалось. Далее пароли, прошивка в дистр, сборка дистра, Тираж..... Ну и так далее. :)

amel27
26-09-2006, 16:04
Dark Engel
А можно как нибудь сделать что бы был не нужен первый этап установки?
В принципе можно уже сейчас, распаковав и переименовав сгенерированный в режиме "Scan" файл Setup.exe - этот скрипт лишь копирует в System32 две указанные выше утилиты и выполняет команду "Devcon Find" (на сообщение о перезагрузке можно не обращать внимания). Но в этом случае придется поиграть с параметром DevFind, чтобы результат работы "DevCon Find" не отличался в пред-установочном окружении и после полной установки системы. Совпадение можно гарантировать только при полном повторении всех условий - именно поэтому я в руководстве указал требование имитации установки при сканировании, в других ситуациях я просто не тестировал...

В любом случае не советую использовать маску всех устройств (DevFind=*). Например, включение перечислителя ACPI поставит результат в зависимость от настроек BIOS, а USB* соответственно от подключенных USB-устройств. Кстати, все перечисляемые DevCon-ом устройства можно просмотреть в ветке реестра [HKLM\SYSTEM\CurrentControlSet\Enum].

Dark Engel
26-09-2006, 16:18
amel27

В любом случае не советую использовать маску всех устройств (DevFind=*). Например, включение перечислителя ACPI поставит результат в зависимость от настроек BIOS, а USB* соответственно от подключенных USB-устройств. Кстати, все перечисляемые DevCon-ом устройства можно просмотреть в ветке реестра [HKLM\SYSTEM\CurrentControlSet\Enum].

В таком случае возможно стоит предусмотреть несколько наборов предустановок? Я просто плохо в железе вообще понимаю. :(

borzoy
26-09-2006, 18:21
XXXler

amel27

Boa Soft

не могли бы вы более падробнее рассказать
я понимаю для вас и участников форума, но вот простому юзеру не очень понятно тем более я тока начал этим заниматься

simplix
26-09-2006, 23:41
Напишу и свой способ, тем более он успешно прошёл тесты и достоин быть одним из вариантов защиты :) Юзать на XP Rus Corp SP2.

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

Первым делом компилим следующий код:

;Encrypt.exe
ReadINIStr $0 $EXEDIR\Winnt.sif UserData ProductKey
Exec '"$EXEDIR\WINNT32.EXE" /ENCRYPT:"$0:30" /UNATTEND:"$EXEDIR\Winnt.sif'

Это можно и вручную сделать, но так проще. Число 30 означает, в течение скольких дней после установки защиты ключ дистрибутива будет вводиться автоматически - сейчас установлен один месяц, можно изменить на конкретный день или диапазон. Эта команда шифрует ключ установки таким образом, что в любые другие дни ключ нужно будет вводить вручную. Как пользоваться: помещаем Encrypt.exe в каталог i386, где уже лежит файл Winnt.sif с рабочим ключом установки, меняем системную дату компьютера на начало того периода, в который система должны устанавливаться с диска (например если мы поставим дату на 02.11.06 и в скрипте укажем период на 30 дней, то система будет работоспособной, если перед установкой в биосе поставить любой день диапазона 02.11.06-02.12.06), и только после этого запускаем Encrypt.exe. Убеждаемся, что в Winnt.sif вместо ключа содержится зашифрованная строка и удаляем Encrypt.exe (больше он не нужен) и меняем системную дату компа на правильную. Защита установлена, но если дата не совпадёт с нужной, программа установки запросит ввести ключ вручную, а это нам совсем не нужно. Поэтому копируем из дистрибутива три файлика: Syssetup.dl_, Winnt32u.dll и Activ.ht_. Распаковываем Syssetup.dl_ и Activ.ht_. Редактором ресурсов (рекомендую PE Explorer) удаляем из Syssetup.dll диалог 208 и из Winnt32u.dll диалог 158 (актуально для XP Rus Corp), сохраняем изменения (не забываем воспользоваться Modifype и Killwfp.lst, сами файлы не используются системой никак и существуют исключительно на этапе установки, так что система от этого не пострадает). Таким образом даже если дата не будет соответствовать серийнику, он никогда не будет запрошен - система установится без него, но запросит активацию, а нам не нужно чтобы юзер мог ввести свой код, поэтому в распакованном файле Activ.htm в самом конце удаляем строчки:

<td>
<BUTTON ID="btnNext" class="buttons" TABINDEX=6 ACCESSKEY="Д"><label for=btnNext><id id="LocalBtnNext_Text"><u>Д</u>алее</id></label></BUTTON>
</td>

Теперь если будет предложена активация винды, юзер не сможет ввести свой код, т. к. тупо будет отсутствовать кнопочка "Далее". Запаковываем обратно Syssetup.dl_ и Activ.ht_. Остаётся устранить последнюю потенциальную дырку - безопасный режим, в который юзер может загрузиться и с которого может запустить какой-нибудь AntiWPA и ломануть эту активацию. Для этого компилим следующую вещь:

;Protect.exe
CopyFiles /SILENT $EXEDIR\Protect.exe $SYSDIR\Protect.exe
WriteRegStr HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" "Shell" "Explorer.exe,Protect.exe"
ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" "ProductId"
IntCmp $0 0 false false true
false:
WriteRegDWORD HKLM SYSTEM\Setup SystemSetupInProgress 1
Delete /REBOOTOK $EXEDIR\Protect.exe
Reboot
true:
WriteRegStr HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" "Shell" "Explorer.exe"
Delete /REBOOTOK $EXEDIR\Protect.exe

Или берём готовый Protect.exe. Смысл его такой - если система установлена с пустым серийником, т. е. с неправильной датой, и юзер загрузил её в безопасном режиме, она автоматически уйдёт в ребут и заблокируется, а без безопасного режима его будет поджидать активация без кнопки "Далее". Тупик короче. Если ключ в системе есть, скрипт не сделает ровным счётом ничего, поэтому ничем не повредит, даже если будет запущен на рабочем компе. Как использовать: сделать из него аддон методом Svcpack (кстати если немного поправить скрипт (в строчке CopyFiles /SILENT $EXEDIR\Protect.exe $SYSDIR\Protect.exe), переименовав Protect.exe в какой-нибудь KBxxxxxx.exe с соответствующей иконкой, на глаз будет сложно отличить его от обновления). А если взломщик его всё-таки удалит, система от этого рабочей не станет, и не станет даже если удалит Winnt.sif - только если будет правильная дата, система установится как обычно, так же, как бы она установилась без защиты вообще.

Такая защита - только идея и первый шаг. Кому нужно - доработайте её так, чтобы было по-настоящему трудно ломать (хотя и эту защиту среднестатистический юзер не сломает, т. к. облом вылезет только после полной установки винды перед первым входом в систему админа, а отследить где и как закопано не прочитав эту статью - не так просто). Принцип защиты не затрагивает лицензионное соглашение и по сути редактирование ресурсов можно приравнять к патчу Uxtheme.dll, т. е. это не варез и защита не направлена на взлом системы или ослабление её защиты, наоборот защищает её от неавторизованого доступа, если диски с дистрибутивами хранятся в общедоступном месте. Аминь.

Ilja77
27-09-2006, 00:24
А как насчет того, чтобы просто хранить свой диск от чужих рук? Для товарищей, которые хотят взять у меня винду, есть обрезок - WinXP SP2 с интегрированным DirectX и все...

simplix
27-09-2006, 01:14
Ilja77
Смысл темы в том, что это просто интересно, как можно его защитить :)
На практике мне лично никакая защита даром не нужна, т. к. мну сторонник свободного ПО. И за мир во всём мире :biggrin:

_xakep_
27-09-2006, 08:05
Здравствуйте!
Спасибо Вам за изложенные выше способы, есть очень интерессные методы.
Правда мне, как программеру, легше написать свой софт для защиты дистрибутива. Дать юзеру после установки системы пару дней на активацию, после чего потребовать от него код или специально сгенерированый под его машину ключевой файтик, который будет созданый мною же. Так я смогу знать к кому попал мой диск.
Плюс этого метода в том, что мне не нужно пересобирать свой дистриьутив. Программка автоматом все сгенерирует, юзеру нужно быдет только взять у меня файлик.
Если получется че-нибудь толковое, то поделюсь программкой.

Vovanchik
27-09-2006, 08:50
честно говоря немного шокирован таким развитием этой темы....
такое впечатление что тут собралась толпа трудоголиков которым очень не лень тестировать свою сборку на различных комбинациях железа...

я вот наоборот создал народный вариант. и выпустил его в сеть. так меня идеями по оптимизации и выловленными глюками просто завалили.мне тока оставалось их исправлять и выкладывать обновленные исправленные версии.
так что на даннный момент после двухгодичного широкомасштабного тестирования я могу сказать что создал абсолютно стабильный и надежный диск который работоспоссобен практически на любой комбинации железа. причем на всех уровнях - от доса до дистрибутива виндов любых и livecd.

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

simplix
27-09-2006, 09:38
я вот наоборот создал народный вариант. и выпустил его в сеть.
так что на даннный момент после двухгодичного широкомасштабного тестирования я могу сказать что создал абсолютно стабильный и надежный диск который работоспоссобен практически на любой комбинации железа. причем на всех уровнях - от доса до дистрибутива виндов любых и livecd.
Аналогично, только год :)

prokazzza
27-09-2006, 11:02
amel27

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




© OSzone.net 2001-2012