gifts2017

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

Опубликовал Дмитрий Топчий (hakerxp) в раздел Программирование - Защита и шифрование

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

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

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

 

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

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

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

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

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

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

См. также

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

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

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


Спасибо!!!
2. Игорь Пашутин (Alien_job) 18.05.15 15:27
=) Почти патч Бармина для 1С
ПользовательБД.Пароль = Новый УникальныйИдентификатор(); //Вот и всё.
Этот код можно во внешнюю обработочку в комплексе с принудительным завершением сеансов.
3. Илья Андриянов (StBender) 18.05.15 15:33
Как насолить конторе из которой увольняешься, что ли?
timeforlive; nihfalck; planar74; +3 Ответить 1
4. Дмитрий Топчий (hakerxp) 18.05.15 15:42
(3), в данном случае каждый найдет для себя как применить. Я применял для "подстраховки" при работе с клиентом.
5. Канат Джумадылов (Fox-trot) 18.05.15 15:55
странно что не потребовалось УстановитьПривилегированныйРежим(Истина)
6. Василий Коровин (vasyak319) 18.05.15 18:00
Под обычным юзером это сдохнет на первой же попытке удалить роль.
planar74; +1 Ответить
7. Андрей (h00k) 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) 19.05.15 07:43
всегда когда открываю публикации с подобными названиями, с надеждой думаю ".... неужели что то новое придумали....", а нет пока все по старому
человек с "доступом" в гугл снимет такую защиту на раз два
10. Евгений Мадонов (madonov) 19.05.15 08:12
При выполнении функции ПроверкаСтарта() на клиенте будет производиться сравнение со временем на машине пользователя, а значит и для обхода надо только перевести время.
Хотя бы на сервере время получать надо, хотя и в этом случае защита от дурака. А, ну название публикации впринципе вполне соответствует.
11. Ярослав Радкевич (WKBAPKA) 19.05.15 09:27
(10) madonov,

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

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

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

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

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

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

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


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

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


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