Привязка конфигурации к диску

14.04.10

Разработка - Защита ПО и шифрование

Простой способ определить по id HDD, используют ли твою работу на постороннем компьютере

Скачать исходный код

Наименование Файл Версия Размер
ЗащитаОтДурака.epf
.epf 5,96Kb
229
.epf 5,96Kb 229 Скачать

//Модуль приложения который можно запоролить или не включать в поставку

Процедура ПриНачалеРаботыСистемы()
ПодключитьОбработчикОжидания("ЗащитаОтДурака",60,Истина) ;

КонецПроцедуры()

Процедура ЗащитаОтДурака() экспорт
// Создаем объект FileSystemObject
FSO = Новый COMОбъект("Scripting.FileSystemObject");
// Получаем ссылку на объект
Drive = FSO.GetDrive("C") ;
//в конфу предварительно добавляем константу НомерС
Если константы.НомерС.Получить() <> Строка(Drive.SerialNumber) тогда
Предупреждение("Вы используете более одной копии программы! Обратитесь к разработчику");
ЗавершитьРаботуСистемы(Ложь);
Иначе
КонецЕсли
КонецПроцедуры; 

Для клиентов которые заплатили, устанавливаем номер константы обработкой ЗащитаОтДурака.epf в первые 60 секунд работы системы и работаем)

См. также

Запрет глобального поиска в конфигурации

Защита ПО и шифрование Платформа 1С v8.3 1С:Бухгалтерия 3.0 Абонемент ($m)

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

1 стартмани

09.02.2023    2249    9    aximo    4    

2

Как защитить pdf файл

Защита ПО и шифрование Абонемент ($m)

Для установки защиты pdf документа, полученного в 1С, написано консольное приложение на c#., использующее одну зависимость pdfSharp.dll. В результате работы приложения ограничены операции над документом и записаны метаданные. С помощью аргументов командной строки можно управлять работой приложения.

2 стартмани

30.01.2023    1701    1    olevlasam    3    

3

Универсальный синтаксический анализатор ASN.1 для декодирования .key, .cer, .der, .p7m, .p7s, .crt, .pem

Защита ПО и шифрование Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Универсальный синтаксический анализатор ASN.1, который может декодировать любую допустимую структуру ASN.1 DER или BER, независимо от того, закодирована ли она в кодировке Base64 (распознаются необработанные base64, защита PEM и begin-base64) или в шестнадцатеричном кодировании.

1 стартмани

04.12.2022    3037    12    keyn5565`    0    

13

Шифрование строки на основе мастер-пароля в 1С Предприятие 8.3.19

Защита ПО и шифрование Платформа 1С v8.3 Абонемент ($m)

Демонстрация возможностей шифрования строки на основе мастер-пароля в 1С Предприятие 8.3.19. AES без zip файла, RSA, PKDF2. (c использованием библиотеки С# через com).

2 стартмани

31.08.2022    3878    7    vit59    2    

6

Обфускатор байт-кода

Защита ПО и шифрование Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Обработка, позволяющая запутывать и шифровать байт-код, поставлять модули без исходных текстов и т.д. Протестировано на платформе 8.3.23.1739.

10 стартмани

16.06.2022    10489    82    ZhokhovM    12    

41

Как уберечь конструкторскую документацию от воровства конкурентами?

Защита ПО и шифрование Платформа 1С v7.7 Платформа 1С v8.3 Абонемент ($m)

Как уберечь конструкторскую документацию от воровства конкурентами? Недавно столкнулся с этой проблемой. Заказчик серьёзно обеспокоен утечкой информации о конструкторских разработках в адрес конкурентов, за счет подкупа исполнителей, занимающихся производством по конструкторской документации, операторов технологического оборудования и обрабатывающих центров по изготовлению деталей и сборочных единиц.

2 стартмани

09.03.2022    5698    3    ge_ni    9    

2

Защита конфигураций, обработок, расширений 1С онлайн, управление версиями

Защита ПО и шифрование Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Система построена на веб платформе, все управление происходит на сайте в личном кабинете пользователя.

1 стартмани

27.12.2021    4605    2    idm80    11    

9
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. SergeyT2006 14.04.10 03:13 Сейчас в теме
А если с базой работают несколько пользователей? Или база на одной машине, а запускаем по сети? Диск будет определяться для локальной машины.
Однобокая система защиты какая-то ;)
+
2. Re:аниматор 338 14.04.10 04:39 Сейчас в теме
Термин "ЗащитаОтДурака" имеет другой смысл ...
+
3. Русский 47 14.04.10 05:06 Сейчас в теме
Кому надо, те используют ключи HASP, вынося часть конфы в DLL, и привязав эту DLL к ID ключа HASP.
+
4. alexk-is 6534 14.04.10 08:14 Сейчас в теме
(0) Выглядит как-то сыровато. Программный код можно было бы раскрасить получше.
+
5. shurik_shurik 14.04.10 08:51 Сейчас в теме
Как для простенькой конфы на одного пользователя.... пройдет..
Или ввести в конфу закрытый справочник серийных номеров, можна даже контролировать количество лицензий...
Или не справочник, а закрытый код с жестко прописаными серийниками, или.......
Вариантов масса....
+
6. DMon 120 14.04.10 09:36 Сейчас в теме
Не очень практично. А если у пользователя вышел из строя винт? ...или переустановили операционную систему (при этом установив другой винчестер и грузятся с него)? Как вариант простенькой защиты - пойдет! :)
+
7. Re:аниматор 338 14.04.10 11:17 Сейчас в теме
ПодключитьОбработчикОжидания("ЗащитаОтДурака",60,Истина) ;

а зачем обработчик? разве при начале работы нельзя это проверять? или предполагается что винты на ходу будут меняться)))
+
8. simgo83 69 14.04.10 11:21 Сейчас в теме
(7) нет не на ходу)))), фантазия у Вас конечно есть)
пауза в 60 секунд для "Для клиентов которые заплатили, устанавливаем номер константы обработкой ЗащитаОтДурака.epf в первые 60 секунд работы системы и работаем)"
+
9. pricec 45 14.04.10 13:08 Сейчас в теме
использую такой прием в своих разработках - идея вполне работоспособная.По трудозатратом не сравнима с dll(тоже кстати делал на с++).А вариант с хаспом стоит денег.Так что для небольшого авторского коллектива этот вариант самое то! Всем рекомендую.
+
10. vde69 925 14.04.10 14:00 Сейчас в теме
вся эта защита строится на закритии модуля приложения...
нельзя закрывать его!!! ни один нормальный заказчик не купит такую конфу.

закрыть можно отдельный модуль, но не глобальный...
+
11. orefkov 1152 14.04.10 14:18 Сейчас в теме
Насколько я помню, drive.SerialNumber использует для работы метод WinAPI GetVolumeInformation - который возвращает не "железный" серийный номер харда, а программный серийный номер тома (volume serial number), устанавливаемый при форматировании раздела.
Данный номер может как измениться при переформатировании раздела, так и быть изменен программно для любого раздела на требуемый.
Получение настоящего серийного номера харда, зашиваемого производителем индивидуально для каждого винта - несколько более сложная задача.
CaSH_2004; +1
13. simgo83 69 14.04.10 16:03 Сейчас в теме
(11) давайте подумаем как узнать из 1с "Получение настоящего серийного номера харда, зашиваемого производителем индивидуально для каждого винта - несколько более сложная задача."
+
15. orefkov 1152 14.04.10 21:43 Сейчас в теме
(13)
А что тут думать - прыгать надо.
Если серьезно - зависит от оси.
Под 9х использовалась дыра, через которую можно было выполнить свой код в ring0, напрямую обращаясь к устройству, под 2К - через обращение к драйверу диска (но вроде не работало со флэшками). Это все требует WinAPI, то есть реализуемо через ВК. Под XP и старше - точно не знаю, вроде бы появилась возможность через WMI, но я лично не проверял. Это уже можно сделать и без ВК, на VBScript'е.
Ну а так метод сойдет, как первый ров перед крепостной стеной. Крестьянское ополчение остановит, пехоту чуть задержит. Кавалерия перескочит.
Synoecium; venger; +2
16. venger 2121 14.04.10 23:52 Сейчас в теме
(15) На локальном компе средствами WMI вывод всех свойств и их значений WMI класса Win32_DiskDrive (информация о дисковых накопителях HDD):
	Попытка
		Locator = Новый COMОбъект("WbemScripting.SWbemLocator");
	Исключение
		Сообщить(ОписаниеОшибки());
	КонецПопытки;
	ServicesSet = Locator.ConnectServer(".");
	ObjectSet = ServicesSet.InstancesOf("Win32_DiskDrive");
	Для Каждого Item Из ObjectSet Цикл
		Для Каждого Свойство Из Item.Properties_ Цикл
			Сообщить(Свойство.Name + " = " + Свойство.Value);
		КонецЦикла;			
	КонецЦикла;

Показать

juker; +1
17. venger 2121 14.04.10 23:57 Сейчас в теме
(15) +16, в классе WMI "Win32_LogicalDisk" искать бесполезно, логические диски, а так вроде средствами WMI все, помимо "Win32_DiskDrive"...
+
18. venger 2121 15.04.10 00:03 Сейчас в теме
(15) +17, помимо класса "Win32_DiskDrive", но что, например, в свойстве "PNPDeviceID" этого класса, есть там серийник харда или нет.У меня, например, там и производитель, и модель, а потом наверно серийник...
+
12. ra9000 8 14.04.10 15:01 Сейчас в теме
Спасибо развеселили.
+
14. awa 2603 14.04.10 18:30 Сейчас в теме
Ничего нового в статье нет, всё это давно описано, например Простые примеры реализации демо-версий обработок на платформе «1С:Предприятие 8».
Неплохо бы пользоваться поиском по сайту прежде чем размещать свои публикации.
venger; simgo83; +2
19. orefkov 1152 15.04.10 09:04 Сейчас в теме
Ну и вот http://technet.microsoft.com/ru-ru/sysinternals/bb897436.aspx - прога от микрософта, позволяющая установить желаемый volume serial number.
+
20. simgo83 69 15.04.10 10:53 Сейчас в теме
а может серийник диска брать из реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Disk\En­um
смотрите значение параметра "0"
+
21. venger 2121 15.04.10 11:51 Сейчас в теме
(20) Это тоже, что и (только если дисков несколько или вставлены флешки, то будет параметр не только 0, но и 1, и 2 8-) ):
	Locator = Новый COMОбъект("WbemScripting.SWbemLocator");
	ServicesSet = Locator.ConnectServer(".");
	ObjectSet = ServicesSet.InstancesOf("Win32_DiskDrive");
	Для Каждого Item Из ObjectSet Цикл
		Сообщить(Item.Caption+": "+Item.PNPDeviceID);
	КонецЦикла; 
+
22. venger 2121 15.04.10 12:34 Сейчас в теме
(20) +21, а это из реестра вариант, из ветки, что предложена в 20-м посте, тот же результат:
	Locator = Новый COMОбъект("WbemScripting.SWbemLocator");
	ServicesSet = Locator.ConnectServer(".");
	ObjectSet = ServicesSet.InstancesOf("Win32_ComputerSystem");
	ИмяКомпьютера="";
	Для Каждого Item Из ObjectSet Цикл
		ИмяКомпьютера=Item.Name;
	КонецЦикла; 	
	Значение="";
	HKEY_LOCAL_MACHINE = 2147483650;
	ПутьККлючу = "SYSTEM\CurrentControlSet\Services\Disk\Enum";
	ИмяПараметра = "0";
	Reg = ПолучитьCOMОбъект("winmgmts:{impersonationLevel=impersonate}!\\" +
	ИмяКомпьютера + "\root\default:StdRegProv");
	Reg.GetStringValue(HKEY_LOCAL_MACHINE, ПутьККлючу, ИмяПараметра, Значение);
	Сообщить("Значение параметра ветки реестра: " + Значение);	
	Пока ПустаяСтрока(СокрЛП(Значение))=Ложь Цикл	
		ИмяПараметра=Строка((Число(ИмяПараметра)+1));
		Reg.GetStringValue(HKEY_LOCAL_MACHINE, ПутьККлючу, ИмяПараметра, Значение);
		Если ПустаяСтрока(СокрЛП(Значение))=Ложь Тогда
			Сообщить("Значение параметра ветки реестра: " + Значение);	
		Иначе
			Прервать;
		КонецЕсли;
	КонецЦикла;
Показать
simgo83; +1
23. simgo83 69 15.04.10 12:39 Сейчас в теме
Есть у кого опыт определения серийника через SCSI комманды???, т.к. WMI уже формируется на основе данных, предоставляемых ДРОВАМИ!!!, и как там сформировано будет от версии к версии - неизвестно. Насколько я знаю(если что не так - поправьте), там постфиксы добавляются, если серийник короче скольких-то символов.
"IDE\DiskST3500418AS_____________________________CC38____\5&­1726dd96&0&0.0.0"
+
24. venger 2121 15.04.10 12:46 Сейчас в теме
(23) После второго слеша и идет серийник, скорее всего...
+
25. igor_gk 49 15.04.10 18:16 Сейчас в теме
26. YRAtomic 99 17.04.10 16:11 Сейчас в теме
Ну вот привязались к диску :)))

Есть же еще куча железа с айдишками
+
27. venger 2121 19.04.10 10:57 Сейчас в теме
(26) Проц, например;-)
+
28. simgo83 69 19.04.10 18:46 Сейчас в теме
(27)для варианта с процессором какой скрипт нужно тогда использовать?
+
30. venger 2121 20.04.10 11:39 Сейчас в теме
(28) Если для локального компа, то примерно так:
	Попытка
		Locator = Новый COMОбъект("WbemScripting.SWbemLocator");
	Исключение
		Сообщить(ОписаниеОшибки());
	КонецПопытки;
	ServicesSet = Locator.ConnectServer(".");
	ObjectSet = ServicesSet.InstancesOf("Win32_Processor");
	Для Каждого Item Из ObjectSet Цикл
		Сообщить("ProcessorId: "+Item.ProcessorId);
	КонецЦикла; 
Показать
simgo83; +1
29. MrDen 434 20.04.10 00:33 Сейчас в теме
Если код закрытый, то можно привязываться к чему угодно, иначе не стоит
Параметры можно брать разные и HDD, и системы и тд. и тп.
+
31. Yurken 21.04.10 09:25 Сейчас в теме
А как это реализовать на 7.7
+
32. venger 2121 21.04.10 14:43 Сейчас в теме
(31) Например, так: http://infostart.ru/public/69066/

Я имею ввиду доступ к WMI, остальное по 7.7 очевидно....
+
33. arjuna 23.04.10 19:30 Сейчас в теме
удалено, уже все написано в предыдущем посте.
+
34. avavadim 07.10.11 22:08 Сейчас в теме
Спасибо за полезную мысль которую можно доработать...
+
35. kr_andr 23.11.11 11:03 Сейчас в теме
36. пользователь 16.04.13 11:08
Сообщение было скрыто модератором.
...
37. ixijixi 1794 23.07.13 00:06 Сейчас в теме
я бы автоматизировал процесс установки константы

Если константы.НомерС.Получить() = "" тогда // первый запуск
константы.НомерС.Установить(Строка(Drive.SerialNumber))
ИначеЕсли константы.НомерС.Получить() <> Строка(Drive.SerialNumber) тогда
Предупреждение("Вы используете более одной копии программы! Обратитесь к разработчику");
ЗавершитьРаботуСистемы(Ложь);
КонецЕсли


А по сабжу конечно очень ограниченное применение найдется
+
38. Tarlich 116 11.10.13 23:42 Сейчас в теме
т.е такое решение актуально если база не сетевая и пользуется на одном компе
Интересно : а если константу НомерС сделать ХранилишемЗначений
ТЗ и хранить серийники винтов , проверять при открытии ....
+
39. Bond 14.10.14 16:22 Сейчас в теме
Кто подскажет, для проверки номера серийника процессора, можно ли вызвать функцию на сервере и получить данные сервера? или так или иначе будет возвращать номер локального компа?
+
Внимание! Тема сдана в архив