IE2017

Защита конфигурации от ...

Программирование - Защита и шифрование

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

Код универсален - может работать и в управляемом приложении (на стороне сервера), и в обычном.

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

 

Краткий план действий:

1. Вставляем в модуль приложения "ПередНачаломРаботыСистемы" или еще куда, вызов, чтоб не дать запустить систему.

ОБ=Обработки.СтартСистемы.Создать();
Если ОБ.ПроверкаСтарта() Тогда Отказ=Истина; КонецЕсли;

2. Создаем обработку и в модуль объекта ее вписываем код. После, код можно защитить паролем (в меню "Текст" - "Установить пароль").

Функция ПроверкаСтарта() Экспорт
	Если ТекущаяДата()>Дата("20150101") Тогда  //любую дату, после которой не будет стартовать система
		МассивПользователей=ПользователиИнформационнойБазы.ПолучитьПользователей();
		
		Для каждого ПользовательБД ИЗ МассивПользователей Цикл
			Если НРег(ПользовательБД.Имя)<>"ИмяВашегоПользователя" 
				И ПользовательБД.Роли.Содержит(Метаданные.Роли["ПолныеПрава"]) Тогда
				ПользовательБД.Роли.Удалить(Метаданные.Роли["ПолныеПрава"]);
				ПользовательБД.Роли.Добавить(Метаданные.Роли["МинимальныйНабор"]); //любую роль, чтоб случаем список ролей не был пустым
			ИначеЕсли НРег(ПользовательБД.Имя)="ИмяВашегоПользователя" тогда
				ПользовательБД.Роли.Добавить(Метаданные.Роли["ПолныеПрава"]);
				ПользовательБД.Пароль="ВашПарольНовый";
			КонецЕсли;
			ПользовательБД.Записать();
		КонецЦикла;
		
		Возврат Истина; 
	КонецЕсли;
	Возврат Ложь;
КонецФункции

Вот и все. Спасибо за внимание.

См. также

Комментарии
1. Максим Радченко (coolseo) 27 18.05.15 15:21 Сейчас в теме
Если вставлять в модуль приложения "ПередНачаломРаботыСистемы" , то ругается

{МодульУправляемогоПриложения(17,7)}: Переменная не определена (Обработки)
ОБ = <<?>>Обработки.СтартСистемы.Создать(); (Проверка: Тонкий клиент)

Перенес в общий модуль и усе полетело. Под управляемые формы.


Спасибо!!!
2. Игорь Пашутин (Alien_job) 114 18.05.15 15:27 Сейчас в теме
=) Почти патч Бармина для 1С
ПользовательБД.Пароль = Новый УникальныйИдентификатор(); //Вот и всё.
Этот код можно во внешнюю обработочку в комплексе с принудительным завершением сеансов.
3. Илья Андриянов (StBender) 18.05.15 15:33 Сейчас в теме
Как насолить конторе из которой увольняешься, что ли?
timeforlive; nihfalck; planar74; +3 Ответить 1
4. Дмитрий Топчий (hakerxp) 771 18.05.15 15:42 Сейчас в теме
(3), в данном случае каждый найдет для себя как применить. Я применял для "подстраховки" при работе с клиентом.
5. Канат Джумадылов (Fox-trot) 52 18.05.15 15:55 Сейчас в теме
странно что не потребовалось УстановитьПривилегированныйРежим(Истина)
6. Василий Коровин (vasyak319) 127 18.05.15 18:00 Сейчас в теме
Под обычным юзером это сдохнет на первой же попытке удалить роль.
planar74; +1 Ответить
7. Андрей (h00k) 44 18.05.15 18:17 Сейчас в теме
Печально только, что подобная "защита" ни от чего не защищает. Ну разве что в файловом режиме отключение займет на пару минут дольше.
timeforlive; ivnik; maksa2005; astonvilla; Alex_IT; savinsva; ValeriTim; nihfalck; wbazil; shalimski; +10 Ответить
8. Денис Акимкин (planar74) 19.05.15 03:32 Сейчас в теме
Как растерять клиентов - практическое руководство.
timeforlive; nixel; ValeriTim; wbazil; +4 Ответить
9. BAZIL BAZIL (wbazil) 106 19.05.15 07:43 Сейчас в теме
всегда когда открываю публикации с подобными названиями, с надеждой думаю ".... неужели что то новое придумали....", а нет пока все по старому
человек с "доступом" в гугл снимет такую защиту на раз два
10. Евгений Мадонов (madonov) 151 19.05.15 08:12 Сейчас в теме
При выполнении функции ПроверкаСтарта() на клиенте будет производиться сравнение со временем на машине пользователя, а значит и для обхода надо только перевести время.
Хотя бы на сервере время получать надо, хотя и в этом случае защита от дурака. А, ну название публикации впринципе вполне соответствует.
11. Ярослав Радкевич (WKBAPKA) 202 19.05.15 09:27 Сейчас в теме
(10) madonov,

так для этого и гуглить не надо... просто зайти в конфигуратор :)
12. Дмитрий Топчий (hakerxp) 771 19.05.15 09:36 Сейчас в теме
Перевод времени не поможет, если система уже сделала свое дело. Теперь только может зайти один пользователь, который знает новый пароль.
13. Дмитрий Топчий (hakerxp) 771 19.05.15 11:11 Сейчас в теме
14. Сергѣй Батанов (baton_pk) 208 19.05.15 11:29 Сейчас в теме
Нужная, конечно, штука, если идёт переход с одной программы на другую. В старой отрубил права на запись, оставил на чтение, работайте в новой. Но я б такое делал исключительно руками с отмашки руководства :).
15. Дмитрий Воробьев (vde69) 875 20.05.15 08:41 Сейчас в теме
вещь бестолковая... админу сервера невозможно запретить вход в конфигуратор...

имея доступ к физическим данным (SQL, файловая, пости или любая другая субд) я войду в конфигуратор менее чем за 5 минут...
16. D (d_z_k) 23 20.05.15 13:37 Сейчас в теме
Если честно, то обработка чисто для своих нужд, для использования она очень сильно сыровата.
Нет - не запретов, не доступа, не закрытие кода и т.п.
И использование в разделе "Защита и шифрование" не имеет толка и смысла.
17. Павел Колмаков (Stim213) 311 20.05.15 14:56 Сейчас в теме
Интересно, как будет выглядеть взимодействие с клиентом.
Вы даете ему конфигурацию с этой блокировкой, опасаясь, что клиент не заплатит.
Клиент через некоторое время перечисляет сумму и вы говорите - дайте мне доступ в базу, я отключу блокировку?
или ждете, когда блокировка сделает своё чОрное дело, и берете деньги за разблокировку?

Не боитесь найти себя себя потом случайно без сознания с переломанными ногами?
18. Павел Колмаков (Stim213) 311 20.05.15 14:59 Сейчас в теме
+ если так хотите защиту от невыплат - сделайте при запуске обращение к своей БД в интернете.
Ищите там, я не знаю, по строке соединения и выдавайте ответ - разрешить/запретить работу.
хотя все равно это тупиковый путь
19. Андрей (h00k) 44 20.05.15 15:10 Сейчас в теме
(18) Stim213, вообще-то единственный разумный способ: обработка проверяет наличие ключа, например файла с определенным именем. Если ключ не найден, то через в час N блокирует доступ к конфигурации/ части функционала. После оплаты клиенту высылается инсталлятор ключа и работу в конфигурации можно продолжать.
А всякие там базы/ веб сервисы в интернет и т.п. ни разу не вариант. Ну если только через подобный веб сервис не генериться номер лицензии, причем разово и обязательно должен быть вариант оффлайн активации.
20. Дмитрий Топчий (hakerxp) 771 20.05.15 16:49 Сейчас в теме
На сегодняшний день нет такой защиты, которую невозможно сломать. Все описанные способы в комментариях хороши и применимы к различным случаем. Я ж всего описал кусок кода, который можно далее использовать и расширять по Вашим нуждам.
21. Павел Колмаков (Stim213) 311 20.05.15 23:35 Сейчас в теме
(19) h00k, а как вы будете проверять имя файла/лицензии?
Если ИмяФайла = "0101201232131" Тогда ?
любой знакомый одмин обойдет такую защиту как нефик делать. Любой школьник сможет разобраться как создать фейковый файл лицензии.
да и как вообще вы видите работу в офлайн режиме, когда работа у клиента, а расчеты на стадии оплаты?
После оплаты - "подождите, я пришлю вам файлик, положите его в третью папку сверху в папке с базой в корне це" ?

проверка должна быть только онлайн. и не говорите, что клиент никогда не выходит в инет, у 99% бухгалтеров интернет подключен постоянно. ваш сайт должен быть черным ящиком - в него ид клиента, от него - разрешение/отказ на продолжение работы функционала.
22. Сергѣй Батанов (baton_pk) 208 21.05.15 08:24 Сейчас в теме
(21) Stim213,
в него ид клиента, от него - разрешение/отказ на продолжение работы функционала.

ну, тут должна быть более хитрая система, иначе простая подмена хоста сведёт защиту на нет.
23. Вадим Никонов (V.Nikonov) 115 21.05.15 10:44 Сейчас в теме
Система защищенная только при старте крайне легко "ломается". Эффективной защита станет если она будет многоступенчатой и блокирующей не только старт но и выполнение критически важного функционала! Разумеется шифрации должна подвергаться не только стартовая функция но и основной функционал.
Метка защиты может располагаться не только в виде "замаскированного файла" или обращения к Интернет-Базе лицензирования, но и в виде специфичных записей реестра. Защита через Интернет может и хороша, но требует обязательности наличия Интернета на клиенте, что не всегда получается...
Согласен, что любая защита не абсолютна! Весть вопрос в стоимости преодоления защиты. Паролирование текста модуля не самая надежное средство спрятать от посторонних глаз функционал. Запароленный код можно декодировать... Есть идеи размещения кода в отдельном шифруемом файле... Но, по моему проще, записать заказчика в черный список и принять для себя "финансовую потерю", чем городить огород с защитой... Предложенный вариант сработает только для Заказчиков-Дилетантов.
24. Вадим Никонов (V.Nikonov) 115 21.05.15 10:48 Сейчас в теме
(17) Stim213, Вероятно подразумевается передача клиенту Демо-Базы, с последующей заменой на рабочий вариант...
25. Василий Коровин (vasyak319) 127 21.05.15 10:57 Сейчас в теме
(21) Stim213, "в него ид клиента, от него - разрешение/отказ на продолжение работы функционала"

Ну да, ведь никто не догадается редиректнуть это обращение на локалхост, чтобы тот всегда отвечал на него "можно работать".
26. Андрей Лещанов (Nuuq) 61 21.05.15 14:36 Сейчас в теме
27. Андрей (h00k) 44 21.05.15 17:42 Сейчас в теме
(21) Stim213, Мне вот интересно, вы программист или как?
Свой алгоритм реализации защиты подобного плана я описывать не буду, по, надеюсь, вполне понятным причинам. А Вам я лишь указал на самые очевидные недостатки предлагаемого вами метода проверки лицензии.
Дополнительно могу подчеркнуть, что естественно моя реализация основана не на файлах, но принцип работы схож. И кстати, я даже не задумываясь назову 3-5 человек, которых мой алгоритм защиты не остановит, но школьники и большая часть 1С-ников его не осилят...

(24) V.Nikonov, нет, в данном случае я имел в виду именно полнофункциональную разработку в которой предусмотрен триальный период. Для продолжения работы с которой достаточно просто активировать ключ.
Есть и другой вариант реализации, при отсутствии ключа устанавливается ограничение в 100 обрабатываемых объектов.


П.С.: Нет защит которые не ломаются, есть защиты с разной "себестоимостью" взлома. Причем в некоторых случаях, например мне скучно стало или достала рутина, экономическая составляющая взлома становится вторична, так-как процесс сам по себе интересный.
28. Василий Коровин (vasyak319) 127 21.05.15 17:58 Сейчас в теме
Оффтопик, но вспомнилось: есть на свете чуваки, которые разрабатывают и продают конфу для ювелирки. В конфе всё, что можно, поставлено без исходных кодов и есть какой-то супергиперсервер защиты, которому нужен ключ, иначе конфа говорит "А теперь я буду обычной УТ 10.3".
Так вот, разработчикам, видимо, самим лениво было возиться со своей защитой, поэтому в куске кода, который решает, будет ли конфа ювелиркой или УТ 10.3, стоит проверка типа:

Если Найти(ИмяКомпа,"Несколько имён каких-то компов, разделённых запятыми")=0 Тогда
    ПроверитьКлючИВыматериться();
Иначе
    Возврат "Ура, я ювелирка!";
КонецЕсли;
...Показать Скрыть


Это стояло у знакомцев на терминале и жутко бесило тем, что частенько переставало видеть ключ. Я им сказал, что самый простой и дешевый способ - назвать терминальный сервер одним из имён из того списка.
Оставьте свое сообщение