Golden Key 8.1 Prototype

31.03.10

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

В этот раз не будет внешней компоненты, не будет программной оболочки. В этот раз все – средствами 1С, все просто и достаточно эффективно …

Скачать файлы

Наименование Файл Версия Размер
Golden Key 8.1 Prototype v1.01
.zip 9,18Mb
297
.zip 9,18Mb 297 Скачать

Немного теории и практики…

Хочу напомнить принцип, положенный в основу защиты Golden Key 7.7, основанный на предположении, что защита эффективна тогда, когда трудозатраты по ее взлому превышают стоимость разработки защищенной программы…

В этом смысле, Golden Key 8.1 Prototype с успехом может использоваться для защиты демо-версий недорогих коммерческих разработок. Но самое главное, что разработчик самостоятельно, без особого труда может управлять уровнем защиты своей программы, импровизируя и используя авторские уловки.

В версии 7.7 был предложен перекодировщик, заменяющий часть программного кода обращением к внешней компоненте. В текущей версии мы поместим часть программного кода в html-файл и перекодируем его любым из доступных средств, заменив помещенный в html программный код обращением к объекту «HTMLДокумент».

Маленькая ремарка…

На Инфостарте вы найдете несколько статей, предваряющих эту тему. Толчком послужил недавний разговор в топике одной из таких статей. Я заинтересовался одной разработкой, посвященной web-документам, предполагая, что автор предложит способ работы с объектами 1С внутри web. Но этого там не было. Я задал вопрос, но гуру ответили, что такое не возможно. Не будучи гуру, и не принимая однозначных ответов, я вспомнил, как когда-то запускал скрипты одного web-документа в составе другого. Решил проверить в 1С… После пары часов вспоминания синтаксиса javascript, оно взлетело…

Пример 1: Hello, world.

1. Создаем текстовый файл:



2. Создаем внешний отчет и помещаем на форму поле html документа, ставим признак «Видимость» в ЛОЖЬ. Добавляем в отчет макет с двоичными данными, куда записываем наш файл.

В методе «ПриОткрытии» отчета пишем:

Макет=ПолучитьМакет("Макет");
ИмяФ=КаталогВременныхФайлов()+"gk.html";
Макет.Записать(ИмяФ);
ЭлементыФормы.ПолеHMLДокумента1.Перейти(ИмяФ);


3. Добавляем на форму кнопку. И в обработчик нажатия пишем:

Процедура Кнопка1Нажатие(Элемент)
Сообщить(ЭлементыФормы.ХТМЛ.document.parentWindow.hello());
КонецПроцедуры


Сохраняем, проверяем, радуемся.

Пример 2: работаем со справочником 1С в web-файле.

1. Посмотрим на следующий 1С код:

Мас=Новый Массив;
Рез=Справочники.Номенклатура.Выбрать();
Пока Рез.Следующий() Цикл
Если НЕ Рез.ЭтоГруппа тогда
Мас.Добавить(Рез.Ссылка);
Конецесли;
КонецЦикла;
Для Каждого Зн Из Мас Цикл
Сообщить(Зн);
КонецЦикла;


2. Переделаем его, поместив блок работы со справочником в процедуру:

Процедура Работа(Мас,Спр)
Рез=Спр.Выбрать();
Пока Рез.Следующий() Цикл
Если НЕ Рез.ЭтоГруппа тогда
Мас.Добавить(Рез.Ссылка);
Конецесли;
КонецЦикла;
КонецПроцедуры

Процедура Кнопка1Нажатие(Элемент)
Мас=Новый Массив;
Рез=Справочники.Номенклатура;
Работа(Мас,Спр);
Для Каждого Зн Из Мас Цикл
Сообщить(Зн);
КонецЦикла;
КонецПроцедуры


3. Спрячем функцию «Работа» в html-документ, добавив

function Job(Mas,Spr)
{ var Res;
Res=Spr.Выбрать();
while(Res.Следующий())
if(! Res.ЭтоГруппа)
Mas.Add(Res.ссылка);
}


4. Сохраняем, помещаем текстовый файл в шаблон, как и прежде, а код 1С переделываем:

Процедура Кнопка1Нажатие(Элемент)
Мас=Новый Массив;
Спр=Справочники.Номенклатура;
ЭлементыФормы.ХТМЛ.document.parentWindow.Job(Мас,Спр);
Для Каждого Зн Из Мас Цикл
Сообщить(Зн);
КонецЦикла;
КонецПроцедуры


Сохраняем, проверяем, радуемся.

Собственно, третий пример, как, наверное, многие уже поняли, должен относиться к запросам, ведь спрятать текст запроса в html-файл представляется интереснее всего. Приведу этот пример без комментариев:

Html:

function Zapros(z)
{
var t;
t= "ВЫБРАТЬ\n"+
" Номенклатура.Ссылка\n"+
"ИЗ\n"+
" Справочник.Номенклатура КАК Номенклатура\n"+
"ГДЕ\n"+
" (НЕ Номенклатура.ЭтоГруппа)\n"+
" И (НЕ Номенклатура.ПометкаУдаления)";
z.Текст=t;
var Res=z.Выполнить().Выбрать();
return Res;
}

1С:

Процедура Кнопка1Нажатие(Элемент)
З=Новый Запрос;
Рез=ЭлементыФормы.ХТМЛ.document.parentWindow.Zapros(З);
Пока Рез.Следующий() Цикл
Сообщить(Рез.Ссылка);
КонецЦикла;
КонецПроцедуры


Осталось перекодировать наш html-файл, добавив в него какой-либо подсчет числа запусков, либо ограничение на дату, либо ограничение на количество обрабатываемых данных. И наша защищенная от недобросовестных клиентов демо-версия программы готова!

 

Программная часть

Идею прятанья запросов в web-документ я постарался воплотить в обработке, которую прилагаю. Она помогает не заморачиваться с javascript и избежать части ручной работы. В качеств перекодировщика предлагается HTML Guardian 7, Trial, входящий в состав обработки. При первом запуске будет предложено его установить. То, что он триал и добавляет рекламу на страничку - не страшно: мы ведь не хотим показывать наш html-документ, наоборот, мы хотим его прятать :)

 

 

Наш прототип не исключает ручную работу, а напротив, предполагает ее и позволяет систематизировать. В двух словах, работа заключается в создании новых строк в таблице, для каждой из которых в нижнем окне добавляем текст запроса, который хотим поместить в web-документ. Название скриптовых функций можно придумать, а можно сгенерировать кнопкой на панели кнопок.

Важно отметить пару моментов:

1. Текст запроса не должен содержать кавычек

2. Если в функции требуются дополнительные параметры, то их нужно перечислить через запятую в колонке «Доп. Параметры функции»

Собственно, на этом - все. Сохраняем наш проект, генерируем html-файл с уже готовым скриптом. Осталось только внести корректировку в программу, которая заключается в

1. Добавлении макета с нашим html-документом

2. Инициализацией его при открытии

3. Замене текстов запросов на обращения к скриптам html

В прилагаемом архиве имеется шаблон отчета с процедурой инициализации и примером работы скрытого текста запроса.

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

 

Если ваш запрос предполагает параметры, то их необходимо поместить в список и передать на вход скриптовой функции (см. спецификацию).

Самое приятное - перекодировка! Посмотрите, во что превратился самый простой запрос из прилагаемого шаблона:

Думаете, это легко будет восстановить? Попробуйте!

Изюминкой Golden Key Prototype является то, что не предлагается методов ограничения использования авторских обработок. Но дается возможность каждому автору реализовать свой уникальный метод. Конечно, здесь пригодилось бы знание javascript. Думаю, желающие вполне освоят создание простейших скриптов за один вечер.

Буду рад услышать конструктивные предложения всех заинтересованных коллег.

Хочу обратить внимание на слово "Prototype" в названии. Все это придумывалось и делалось за одну ночь, потому как срочно потребовалось одному клиенту с шаловливыми ручонками не дать  возможности использовать обработку, не заплатив ;)

Поэтому, не судите строго.

 



История обновлений

Версия 1.01

1. Добавлено тестирование на корректность текстов запросов
2. Убрал колонку "С параметрами". Она не нужна, поскольку достаточно проанализировать текст запроса на наличие символа "&"
3. Добавлена колонка с дополнительными переменными

Тестирование на корректность текстов запросов помогает выявить возможные ошибки при построении html-файла. Для запуска тестирования просто нажмите кнопку с ключиком на панели кнопок, либо выберите соответствующий пункт в меню «Действия»

Дополнительные переменные могут потребоваться, в случае, если, например, текст запроса состоит из нескольких частей:

ВЫПОЛНИТЬ
Выразить(Таблица.Наименование КАК Строка("+Дл+")) КАК Наименование

В этом случае, нужно указать параметр Dl в колонке дополнительных параметров, а текст запроса переписать:

ВЫПОЛНИТЬ
Выразить(Таблица.Наименование КАК Строка("+Dl.toString()+")) КАК Наименование

 

 

 

 

 

 

 

 

 

См. также

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

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

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

1 стартмани

09.02.2023    2211    9    aximo    4    

2

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

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

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

2 стартмани

30.01.2023    1654    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    2964    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    3812    7    vit59    2    

6

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

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

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

10 стартмани

16.06.2022    10221    77    ZhokhovM    12    

39

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

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

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

2 стартмани

09.03.2022    5633    3    ge_ni    9    

2

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

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

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

1 стартмани

27.12.2021    4545    2    idm80    11    

9
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Yasen 490 30.03.10 09:30 Сейчас в теме
Отлично!
Но если у клиента отключен JS?
2. O-Planet 6431 30.03.10 09:31 Сейчас в теме
(1) Хочет посмотреть демку - включит :)
3. afanasko 35 30.03.10 12:32 Сейчас в теме
4. пользователь 31.03.10 00:34
Сообщение было скрыто модератором.
...
5. awa 2602 31.03.10 00:49 Сейчас в теме
Думаете, это легко будет восстановить? Попробуйте!

Попробовал. Получилось.
Может надо как-то по особенному настраивать HTML Guardian?
O-Planet, не мог бы ты выложить какую-нибудь готовую защищенную обработку? Или хотя бы зашифрованный тобой html-файл?
7. O-Planet 6431 31.03.10 05:52 Сейчас в теме
(5) А это как если не секрет? :) Я что-то в сети мало нашел инфы про дешифрование гуардиана.
11. awa 2602 31.03.10 09:41 Сейчас в теме
(7) Ты опять наступаешь на те же грабли, что и в голден кее для семерки. Любое шифрование подразумевает под собой момент дешифровки. Чтобы браузер смог отобразить HTML-страничку, она должна быть расшифрована.

Впрочем, я в этих всяких веб-технологиях ничего не понимаю.
У меня стоит Google Chrome (нравится мне он очень!), открыл в нем сформированную с помощью HTML Guardian страничку, полюбовался на сплошные рекламы, и открыл через меню "Управление текущей страницей" - "Разработчикам" - "Консоль JavaScripts". И, о чудо!, вижу там расшифрованный исходный текст HTML странички. Свою функцию увидел я там в таком виде:
// \u043F\u0440\u0438\u043C\u0435\u0440
function awa(z)
{
  var t="\u0412\u042B\u0411\u0420\u0410\u0422\u042C\n"+
" \u0421\u0441\u044B\u043B\u043A\u0430 \u041A\u0410\u041A \u0421\u0441\u044B\u043B\u043A\u0430\n"+
"\u0418\u0417\n"+
" \u0414\u043E\u043A\u0443\u043C\u0435\u043D\u0442.\u0417\u0430\u044F\u0432\u043A\u0430\u041D\u0430\u041F\u043E­\u043A\u0443\u043F\u043A\u0443 \u041A\u0410\u041A \u0417\u0430\u044F\u0432\u043A\u0430\u041D\u0430\u041F\u043E­\u043A\u0443\u043F\u043A\u0443";
  z.\u0422\u0435\u043A\u0441\u0442=t;
  var Res=z.\u0412\u044B\u043F\u043E\u043B\u043D\u0438\u0442\u044C();
  return Res;
}
Показать

Ну тут понятно, русские буквы заменены на их коды в кодировке Unicode. Написав маленькую обработку по преобразованию такого текста я получил
// пример
function awa(z)
{
  var t="ВЫБРАТЬ\n"+
" Ссылка КАК Ссылка\n"+
"ИЗ\n"+
" Документ.ЗаявкаНаПокупку КАК ЗаявкаНаПокупку";
  z.Текст=t;
  var Res=z.Выполнить();
  return Res;
}
Показать

В общем слов нет. Как и защиты.
AllexSoft; d.zhukov; Silenser; szhukov; +4 Ответить
12. O-Planet 6431 31.03.10 10:24 Сейчас в теме
(11) Ты вот скажи, от юзеров оно защитит? 100%! Даже гуардиан. Но я ведь написал, что он - не окончательный вариант. Имеются более интересные перекодировщики. Сейчас подготовлю одну коммерческую разработку, как ты и просил, и попробуй... ;)
14. awa 2602 31.03.10 12:46 Сейчас в теме
(12) Для защиты от простых юзеров пойдет и пароль на модуль. По крайней мере пока, твоя защита не кажется сильнее пароля на модуль. Однако, подождём обещанную защищенную коммерческую разработку.
13. O-Planet 6431 31.03.10 12:44 Сейчас в теме
(11) Вот по этой ссылке http://www.belkamag.ru/index.php?priceorg:download качай "Прайс-органайзер 8.1". Типа программка, как и обещал...
15. awa 2602 31.03.10 14:26 Сейчас в теме
(13) Вскрылось на ура!
Макет1 у тебя - это HTML, закрытый каким-то PowerHTML.
Вот, для примера, одна из функций:
// ПолучитьСвойствоХарактеристики
function f_5619496224619844(z,Par)
{
  if(!GG_UU000)
    return Null;
  var t="ВЫБРАТЬ\n"+
"СвойстваОбъектов.Ссылка\n"+
"ИЗ\n"+
"ПланВидовХарактеристик.СвойстваОбъектов КАК СвойстваОбъектов\n"+
"ГДЕ\n"+
"СвойстваОбъектов.Наименование = &Наименование\n"+
"И СвойстваОбъектов.НазначениеСвойства = &НазначениеСвойства\n"+
"И (НЕ СвойстваОбъектов.ПометкаУдаления)";
  z.Text=t;
  var tek;
  for(var k=0; k<Par.Count(); k++)
  { 
    tek=Par.Get(k);
    z.SetParameter(tek.Presentation,tek.Value);
  }
  var Res=z.Execute();
  z.Text="";
  return Res;
}
Показать

Если разрешишь, выложу все))

Макет2 - внешняя обработка с запароленным модулем, в котором одна функция:
Функция ВыполнитьКоманду(МояСтрока) Экспорт
	Результат = Неопределено;
	Выполнить(МояСтрока);
	Возврат Результат;
КонецФункции


Ну и сам внешний отчет с запароленным модулем....

Этого достаточно? Так как УТ у меня нет, то твой отчет я ни разу не запускал, и в чем состоит ограничение (а так же, что он делает)- понятия не имею. Или надо разобраться до конца?
AllexSoft; СергейКа; mba1979; venger; +4 Ответить
16. vip 31.03.10 14:53 Сейчас в теме
(15) Так его, болезного.
(0) Опять на Golden Key нашелся Ferrous Lock? :D
17. venger 2121 31.03.10 17:59 Сейчас в теме
18. O-Planet 6431 01.04.10 01:30 Сейчас в теме
(15) Ты крут и монстЁр :D Что ж, так и придется самому писать перекодировщик js, поскольку не умеют буржуи ничего. И еще 30 у.е. за такое просят. Впрочем, смею предположить, что не все смогут так легко найти то, что хотят. И потому это остается в силе: "Golden Key 8.1 Prototype с успехом может использоваться для защиты демо-версий недорогих коммерческих разработок." Но, как выяснилось, не на Инфостарте, потому как тут сидит awa...

(16) Да я и рад, в общем-то. Мне лучше здесь увидеть все, чем от клиентов получать сюрпризы. И у меня есть идейки, как все это обойти. Только нужно время. Вот ты скажи, почему в "коммерческих" шифраторах html нельзя было не тупо шифровать текст, а хотя бы динамически его формировать в процессе выполнения скрипта? Как пример - сделать виртуальную скрипт-машину, исходный код заменить набором смайликов, и по ним выполнять сценарий? NTKrnl так и работает, в общем-то...

(17) Ты ваще не в теме...
d.zhukov; mba1979; +2 Ответить
19. venger 2121 01.04.10 13:50 Сейчас в теме
(18) Семки на галерке заканчиваются;-)
6. Valerich 1633 31.03.10 04:43 Сейчас в теме
Очень интересно, надо взять на заметку
8. O-Planet 6431 31.03.10 05:58 Сейчас в теме
Если кому-то кажется что HTML Guardian - не серьёзно, то всегда можно выбрать любой из имеющихся в сети шифровальщиков: http://www.securitylab.ru/software/1232/

(А интересно, получится наложить один на другой? :) )
9. O-Planet 6431 31.03.10 05:59 Сейчас в теме
Кстати, обновил обработку. Появилась возможность контроля корректной совместимости текстов запроса с html и более продвинутые возможности по подготовке файлов.
10. O-Planet 6431 31.03.10 08:30 Сейчас в теме
Блин. Досадное недоразумение... В спецификации были перепутаны местами аргументы в методе "Добавить" у списка. Голову сломал, прежде чем нашел. Исправил...
20. d.snissarenko 152 05.04.10 13:41 Сейчас в теме
:idea: Даешь starforce в каждую обработку.
21. O-Planet 6431 05.04.10 14:01 Сейчас в теме
Так и будет... Реально, зацепил одну идею... Не хватает катастрофически времени.
22. Bacchus 07.04.10 11:00 Сейчас в теме
Пример 1

Процедура Кнопка1Нажатие(Элемент)
Сообщить(ЭлементыФормы.ХТМЛ.document.parentWindow.hello());
КонецПроцедуры

не работает - ЭлементыФормы.ХТМЛ.document.parentWindow.hello() возвращает COMОбъект

Пример 2 не работает - та же ерунда.

ну и сама обработка тоже не работает.
JS-разрешил , проверил на хтмл файлах из примерах.

Я не спец по IE8, поэтому считаю данное решение сильно ограниченным. Больше гемора решать проблемы нерабочей обработки из-за IE у клиента, чем продать ещё пару.

Сам использую похожий способ, но без IE8, а через JS Shell. Текст скрипта в макете зашифрован самим скрипом с паролем, и если пароль не верный, то функции не работают вообще. Для триала отдельный пароль и отдельный макет со скриптом с огрниченным функционалом.
23. Sintson 411 18.08.10 16:01 Сейчас в теме
Хотелось бы напомнить, что 1С задумывалась как открытая система.
Думаю что демку всегда можно сделать просто вырезав ключевой функционал или просто сделать хорошую презентацию, если уж мы начинаем претендовать на оригинальные идеи.
То, что один человек сделал - другой завсегда сломать сможет (Народная мудрость).
Оставьте свое сообщение