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

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

защита обман роли кидалово

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

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

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

 

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

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

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

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

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

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

15

См. также

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

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

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


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

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

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

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

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

ну, тут должна быть более хитрая система, иначе простая подмена хоста сведёт защиту на нет.
25. vasyak319 130 21.05.15 10:57 Сейчас в теме
(21) Stim213, "в него ид клиента, от него - разрешение/отказ на продолжение работы функционала"

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

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


П.С.: Нет защит которые не ломаются, есть защиты с разной "себестоимостью" взлома. Причем в некоторых случаях, например мне скучно стало или достала рутина, экономическая составляющая взлома становится вторична, так-как процесс сам по себе интересный.
20. hakerxp 1660 20.05.15 16:49 Сейчас в теме
На сегодняшний день нет такой защиты, которую невозможно сломать. Все описанные способы в комментариях хороши и применимы к различным случаем. Я ж всего описал кусок кода, который можно далее использовать и расширять по Вашим нуждам.
23. V.Nikonov 119 21.05.15 10:44 Сейчас в теме
Система защищенная только при старте крайне легко "ломается". Эффективной защита станет если она будет многоступенчатой и блокирующей не только старт но и выполнение критически важного функционала! Разумеется шифрации должна подвергаться не только стартовая функция но и основной функционал.
Метка защиты может располагаться не только в виде "замаскированного файла" или обращения к Интернет-Базе лицензирования, но и в виде специфичных записей реестра. Защита через Интернет может и хороша, но требует обязательности наличия Интернета на клиенте, что не всегда получается...
Согласен, что любая защита не абсолютна! Весть вопрос в стоимости преодоления защиты. Паролирование текста модуля не самая надежное средство спрятать от посторонних глаз функционал. Запароленный код можно декодировать... Есть идеи размещения кода в отдельном шифруемом файле... Но, по моему проще, записать заказчика в черный список и принять для себя "финансовую потерю", чем городить огород с защитой... Предложенный вариант сработает только для Заказчиков-Дилетантов.
28. vasyak319 130 21.05.15 17:58 Сейчас в теме
Оффтопик, но вспомнилось: есть на свете чуваки, которые разрабатывают и продают конфу для ювелирки. В конфе всё, что можно, поставлено без исходных кодов и есть какой-то супергиперсервер защиты, которому нужен ключ, иначе конфа говорит "А теперь я буду обычной УТ 10.3".
Так вот, разработчикам, видимо, самим лениво было возиться со своей защитой, поэтому в куске кода, который решает, будет ли конфа ювелиркой или УТ 10.3, стоит проверка типа:

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


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