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

14.04.10

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

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

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
ЗащитаОтДурака.epf
.epf 5,96Kb
230 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

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

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

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

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

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

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Информационная безопасность Защита ПО и шифрование Разработчик 1С 8.3 Бесплатно (free)

Вы вложили в одну процедуру всю ценность - формулу, коэффициенты, алгоритм, - продали обработку одному клиенту, а её тут же раздают дальше. Проверку ИНН прямо в коде вырезают за минуту: тело процедуры лежит рядом открытым текстом. Разбираю, как вместо этого зашифровать тело процедуры ключом из ИНН покупателя и получить готовый блок КодПодИНН для вставки в свою обработку: на чужом ИНН видно шифроблок, а не ваш алгоритм, и процедура не выполняется. Весь механизм на чистом BSL - потоковый шифр на штатном SHA-256 с нонсом, раздельные ключи и тег на HMAC, без СЛК и внешних компонент. И честно про потолок: почему это конфиденциальность логики, а не жёсткая привязка. В комплекте бесплатная демо-обработка.

вчера в 11:10    285    nedomolkov.ivan    8    

4

Информационная безопасность Инструменты администратора БД Защита ПО и шифрование Системный администратор Разработчик 1С 8.3 1С 8.5 Россия Абонемент ($m)

Внешняя обработка для копии базы: заменяет персональные и коммерческие данные — наименования, ФИО, ИНН/КПП/ОГРН/СНИЛС с верными контрольными цифрами, телефоны, почту, счета, контактную информацию БСП, регистр ФИО физлиц. Правила по метаданным, предпросмотр, протокол. Любая конфигурация.

1 стартмани

10.11.2026    173    2    Drfreeman    3    

2

Защита ПО и шифрование Разработчик 1С 8.3 1С:Библиотека стандартных подсистем Абонемент ($m)

Настоящее современное криптостойкое шифрование с помощью сертификатов.

9 стартмани

01.09.2026    1156    3    SerVer1C    9    

10

Защита ПО и шифрование Разработчик 1С 8.3 1С:Библиотека стандартных подсистем Россия Абонемент ($m)

Дешифровка PEM файлов с SGN пакетом. PEM - стандартизированный текстовый формат текстовых контейнеров, используемый для безопасного хранения и передачи криптографических ключей, SSL/TLS-сертификатов и запросов на подпись (CSR). (Privacy-Enhanced Mail). SGN - стандартизированное расширение файла, содержащего отсоединенную (detached) электронную цифровую подпись для целевого документа. Пример файла: reportfile.zip.sgn.pem

1 стартмани

21.08.2026    769    0    DrZombi    1    

8

Защита ПО и шифрование Разработчик 1С 8.3 1С:Розница 2 Бесплатно (free)

Учебная обработка показывает, как 1С шифрует номер карты публичным ключом RSA перед отправкой в платёжный шлюз и подписывает тело запроса - на чистом встроенном языке, без COM, .NET и внешних компонент. Почти все реализации RSA в 1С зовут .NET через COM, а он требует регистрации сборки и не работает на Linux и в тонком клиенте. Здесь RSA написан целиком на BSL: длинная арифметика, деление Кнута, возведение в степень по модулю. Корректность сверена с эталоном на больших числах байт в байт. Демо-ключ 256 бит, всё локально, одной кнопкой. Код открыт.

07.08.2026    1306    14    nedomolkov.ivan    2    

3

Защита ПО и шифрование Разработчик Бесплатно (free)

Платёжный шлюз принимает номер карты только зашифрованным по RSA, а почти все реализации RSA в 1С зовут .NET через COM - и это молча ломается на Linux-сервере, в тонком клиенте и на голой Windows без regasm. Разбираю, как написать RSA целиком на встроенном языке: как хранить большие числа лимбами по основанию миллион, откуда берётся деление Кнута и square-and-multiply, почему первая версия считала 25 секунд и как это ускорилось в 8 раз. С проверкой байт в байт против внешнего эталона на больших числах.

07.08.2026    2129    nedomolkov.ivan    3    

4

Защита ПО и шифрование Разработчик 1С:Предприятие 8 Бесплатно (free)

Платформенная защита модулей конфигураций, внешних обработок и расширений 1С легко «взламывается» общедоступными декомпиляторами, а использование СЛК (Система лицензирования и защиты конфигураций) часто избыточно из-за необходимости установки дополнительного ПО и покупки ключей. Рассмотрим использование методики защиты логики через обфускацию байт-кода, а именно частный случай использования метода, который позволит привязать решение к «железу» пользователя без использования внешних компонент и онлайн-активации.

19.02.2026    4699    1c-izh    10    

9

Защита ПО и шифрование Разработчик Бухгалтер Пользователь 1С:Предприятие 8 Россия Абонемент ($m)

Обработка для подписи с помощью сертификата (ЭЦП) произвольных файлов, средствами платформы 1С.

5 стартмани

19.06.2025    2611    4    krundel    2    

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

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

закрыть можно отдельный модуль, но не глобальный...
11. orefkov 1158 14.04.10 14:18 Сейчас в теме
Насколько я помню, drive.SerialNumber использует для работы метод WinAPI GetVolumeInformation - который возвращает не "железный" серийный номер харда, а программный серийный номер тома (volume serial number), устанавливаемый при форматировании раздела.
Данный номер может как измениться при переформатировании раздела, так и быть изменен программно для любого раздела на требуемый.
Получение настоящего серийного номера харда, зашиваемого производителем индивидуально для каждого винта - несколько более сложная задача.
CaSH_2004; +1 – Ответить
13. simgo83 71 14.04.10 16:03 Сейчас в теме
(11) давайте подумаем как узнать из 1с "Получение настоящего серийного номера харда, зашиваемого производителем индивидуально для каждого винта - несколько более сложная задача."
15. orefkov 1158 14.04.10 21:43 Сейчас в теме
(13)
А что тут думать - прыгать надо.
Если серьезно - зависит от оси.
Под 9х использовалась дыра, через которую можно было выполнить свой код в ring0, напрямую обращаясь к устройству, под 2К - через обращение к драйверу диска (но вроде не работало со флэшками). Это все требует WinAPI, то есть реализуемо через ВК. Под XP и старше - точно не знаю, вроде бы появилась возможность через WMI, но я лично не проверял. Это уже можно сделать и без ВК, на VBScript'е.
Ну а так метод сойдет, как первый ров перед крепостной стеной. Крестьянское ополчение остановит, пехоту чуть задержит. Кавалерия перескочит.
Synoecium; venger; +2 – Ответить
16. venger 2127 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);
		КонецЦикла;			
	КонецЦикла;

Показать

17. venger 2127 14.04.10 23:57 Сейчас в теме
(15) +16, в классе WMI "Win32_LogicalDisk" искать бесполезно, логические диски, а так вроде средствами WMI все, помимо "Win32_DiskDrive"...
18. venger 2127 15.04.10 00:03 Сейчас в теме
(15) +17, помимо класса "Win32_DiskDrive", но что, например, в свойстве "PNPDeviceID" этого класса, есть там серийник харда или нет.У меня, например, там и производитель, и модель, а потом наверно серийник...
12. ra9000 15 14.04.10 15:01 Сейчас в теме
Спасибо развеселили.
14. awa 2619 14.04.10 18:30 Сейчас в теме
Ничего нового в статье нет, всё это давно описано, например Простые примеры реализации демо-версий обработок на платформе «1С:Предприятие 8».
Неплохо бы пользоваться поиском по сайту прежде чем размещать свои публикации.
venger; simgo83; +2 – Ответить
19. orefkov 1158 15.04.10 09:04 Сейчас в теме
Ну и вот http://technet.microsoft.com/ru-ru/sysinternals/bb897436.aspx - прога от микрософта, позволяющая установить желаемый volume serial number.
20. simgo83 71 15.04.10 10:53 Сейчас в теме
а может серийник диска брать из реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Disk\En­um
смотрите значение параметра "0"
21. venger 2127 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 2127 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, ПутьККлючу, ИмяПараметра, Значение);
		Если ПустаяСтрока(СокрЛП(Значение))=Ложь Тогда
			Сообщить("Значение параметра ветки реестра: " + Значение);	
		Иначе
			Прервать;
		КонецЕсли;
	КонецЦикла;
Показать
23. simgo83 71 15.04.10 12:39 Сейчас в теме
Есть у кого опыт определения серийника через SCSI комманды???, т.к. WMI уже формируется на основе данных, предоставляемых ДРОВАМИ!!!, и как там сформировано будет от версии к версии - неизвестно. Насколько я знаю(если что не так - поправьте), там постфиксы добавляются, если серийник короче скольких-то символов.
"IDE\DiskST3500418AS_____________________________CC38____\5&­1726dd96&0&0.0.0"
24. venger 2127 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 2127 19.04.10 10:57 Сейчас в теме
(26) Проц, например;-)
28. simgo83 71 19.04.10 18:46 Сейчас в теме
(27)для варианта с процессором какой скрипт нужно тогда использовать?
30. venger 2127 20.04.10 11:39 Сейчас в теме
(28) Если для локального компа, то примерно так:
	Попытка
		Locator = Новый COMОбъект("WbemScripting.SWbemLocator");
	Исключение
		Сообщить(ОписаниеОшибки());
	КонецПопытки;
	ServicesSet = Locator.ConnectServer(".");
	ObjectSet = ServicesSet.InstancesOf("Win32_Processor");
	Для Каждого Item Из ObjectSet Цикл
		Сообщить("ProcessorId: "+Item.ProcessorId);
	КонецЦикла; 
Показать
29. MrDen 435 20.04.10 00:33 Сейчас в теме
Если код закрытый, то можно привязываться к чему угодно, иначе не стоит
Параметры можно брать разные и HDD, и системы и тд. и тп.
31. Yurken 21.04.10 09:25 Сейчас в теме
А как это реализовать на 7.7
32. venger 2127 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 2178 23.07.13 00:06 Сейчас в теме
я бы автоматизировал процесс установки константы

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


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