Ещё пара слов о защите разработок..

22.10.08

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

Ночные мысли о механизмах защиты кода..
В очередное ночное бдение со своей новорождённой дочкой, пришла мне в голову мысль, которой хочу поделиться и о которой хочу посоветоваться.
Тема древняя, обсуждалась миллион раз, и тем не менее...
Как, передавая заказчику работы до полной оплаты, усложнить возможность неоплаты работ? Понятное дело, что договорная база, подписанное ТЗ и т.п.? позволят разрулить вопрос через суд. Но личного опыта судебных исков не имею, и начинать не хочу. Предпочтительно вводить механизмы, ограничивающие работоспособность разработки по времени. Такой опыт есть и эффективность его (для меня) - факт.
Вот тут и возникает вопрос: коль скоро речь - об 1С, в которой разберётся первый встречный дурак (по крайней мере - в пределах удаления кода, включающего ограничения), имеет смысл придумать что-нибудь посложнее. Т.е. можно вообще не думать, и купить КЗК от АЛЬФа, но, насколько помню - разработка сугубо для v7, к тому же стоит денюшку. А мы ещё своего не отбили.
Можно воспользоваться штатным сокрытием кода от 1С. Т.е. в v8 можно скрыть код любых модулей (кроме модулей форм), а в v7 - код внешних отчётов.
Но, как показывает практика, достаточно пофлудить на тематических форумах, представившись юной девушкой и предоставив подобающую фотку, и обязательно найдётся энтузиаст, который расскажет, как обойти защиту платформы. Или, того лучше, сам это сделает: ему - закрытый код, от него открытый.
Это было предисловие.

Итак: меня посетила мысль.
Во-первых - это должна быть внешняя обработка (отчёт), во-вторых обработка не должна вообще передаваться клиенту.
Вариант с использованием ВК не рассматриваю, поскольку нужна регистрация библиотек. Не всегда реально.
В итоге схема такая.
1. пишется *.exe, в котором в качестве ресурса подключены обработки 1С (как двоичные данные). При запуске программа проверяет условия (допустима ли работа с внешним отчётом и если допустима, то в каком режиме) и по результатам из своего ресурса формирует в текущем каталоге сам файл внешнего отчёта (единственного, или одного из нескольких - с ограничениями).
2. в 1С обработка вызывается вспомогательной обработкой-стартером, которая вызывает п.1, ждёт, скажем, пару секунд, и запускает обработку, которая должна была сформироваться в результате работы п.1
3. в самой обработке (итоговой, той, которая и скрывается в ресурсах исполняемого файла) при открытии выполняется удаление собственного файла.
Т.е. до запуска обработки не было на диске и после запуска обработки нет на диске. Всё в памяти.
К сожалению, каждая манипуляция занимает некоторое время, так что лучше, используя Обработку Ожидания, давать задержку на пару секунд перед следующим шагом.
4. И обработка-стартер и рабочая обработка должны быть закрыты штатными средствами (туннель в туннеле).

Проверял на тестовых примерах - идея работает.

Теперь оговорюсь: понятно, что мало-мальски вменяемый спец и вскрыть защиту платформы сможет, и сообразит, куда и как кешируется файл обработки, и (если кешируется уже урезанный вариант) сумеет вытащить данные из *.exe...
Здесь напомню: если себестоимость взлома кода превышает себестоимость покупки - взлом невыгоден.
На практике бывает так: недобросовестный заказчик ищет программиста, который за 1/10 от стоимости разработки её взломает. Если сложность защиты такова, что работа спеца соответствующего уровня будет дороже, чем сама разработка - заказчику проще будет оплатить. Ну а если для заказчика взлом - дело принципа.. Что-ж.. Форс-мажор.. Впрочем, таковых не встречал.

Описанный метод требует минимальных навыков программирования (не 1С), так что имеет ограничения. Не в том суть
Интересно обсудить саму методику.
Ну и, до кучи, будем считать, что речь идёт об отчётах. Т.е. скорость запуска не принципиальна и пара секунд погоды не сделает.

Ваши мнения, товарищи. Желательно - с аргументами. Желательно - из личного опыта.

См. также

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

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

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

1 стартмани

09.02.2023    2223    9    aximo    4    

2

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

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

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

2 стартмани

30.01.2023    1657    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    2983    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    3829    7    vit59    2    

6

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

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

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

10 стартмани

16.06.2022    10292    79    ZhokhovM    12    

40

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

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

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

2 стартмани

09.03.2022    5654    3    ge_ni    9    

2

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

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

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

1 стартмани

27.12.2021    4556    2    idm80    11    

9
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Vitek 22.10.08 09:22 Сейчас в теме
Видел в одной конфе, "жизнено важный код" переносят во внешние обработки, которые просто напросто засовывают в ВК.
2. German 413 22.10.08 09:31 Сейчас в теме
Модуль любой открытой(созданной) обработки находится в $User\Temp\v8_*.tmp.

Так что все эти фантазии бред. Только ВК... другого выхода нет..
3. Дуб 79 22.10.08 09:35 Сейчас в теме
(2) допустим. Применительно к v8 убедил (почти).
Но ВК - это права админа для регистрации. Которых может и не быть..
11. German 413 22.10.08 10:35 Сейчас в теме
(3) если обработку взять из Temp её еще и проще декомпилировать .. так как она уже распакована..

Насчёт прав админа, это единственная сложность в ВК.
Мне эти "рассуждения" не понравились, потому как нечего информативного не несут .. просто запутаете многих людей, которые пытаются сделать первые шаги в этом. Люди потратят время на заранее обреченные вещи..
14. Дуб 79 22.10.08 13:51 Сейчас в теме
(11) "потратят время" на что?
И чего информативного ты хотел?
Я порассуждал вслух, предложил вариант. А ты цедишь сквозь зубы обрывками комментарии (кстати, толковые комментарии), перекладывая их кучами пустых слов.
Коль скоро ты решил отреагировать - так реагируй адекватно, по делу.
И потом - "первые шаги" - это что такое? У меня в своё время всё выливалось в очередную закупку КЗК (в чём не вижу ничего плохого, кстати). И почему не рассмотреть все возможные пути действий, их плюсы и минусы?

(12) будем считать это шуткой..
15. German 413 22.10.08 14:39 Сейчас в теме
(14) Сделай сам.
Вот уважаемый вам рецепт для защиты конфы в серверном варианте.
Берете снифер врубаете его по порту сервера. (1542).

И смотрите какие данные там идут... при открытии документа. :000

Кодируем ключом (2048) записи(модуля) в таблице Config, cоответственно в конфигураторе уже ее не откроешь.
Сервер будут отдавать эти упакованные записи клиенту. Клиент при попытке их распаковать будет вываливаться с ошибкой "Ошибка формата потока". Поэтому пред клиентом ставим распаковщик на основе WinPcap http://www.winpcap.org/default.htm. которому и передаем ключ. Распакованные модуль передается непосредственно клиенту. Клиент получает уже привычный для него набор данных. И кеширует его в $User\Temp наше дело это оперативно убрать. .....
Сразу предупреждаю вопросы от том что ....." и для внешней обработки модуль из $User\Temp тоже можно убрать!!!" попробуйте не получится. И потом подумайте почему.

Описанная технология будет работать с такой же скоростью что и обычная .. модуль любого открытого объекта кешируется клиентом.
Удачи...
16. Дуб 79 22.10.08 16:12 Сейчас в теме
(15) а теперь - как это исполнить? Т.е. технически как это реализуемо? Допустим (частый случай), клиент использует комбинированный доступ: терминально и по сети. При этом у меня, как у стороннего разработчика, нет прав ни устанавливать ПО, ни перенастраивать действующее ПО.
Мои действия?
И, пожалуйста, не надо "выкать". У меня комплекс неполноценности от этого разыгрывается ;)
17. German 413 22.10.08 17:00 Сейчас в теме
(16) да никак ... ты :) такое ощущение все пытаешься мне палки в колеса вставить.
18. Дуб 79 22.10.08 17:12 Сейчас в теме
(17) вовсе нет. Я и тему-то поднял ввиду ограниченности прав в большинстве случаев. Понятно, что проще всего - ВК пользовать. Дёшево и сердито. И статей полно по разработке.
А тут вся фишка - в "петлянии", в том, чтобы не имея доп. прав, проконтролировать использование своей разработки.
То, что идея не понравилась - я понял.
Теперь хочу конструктива.
Не к тому, что я - д'Артаньян, а остальные - козлы. Просто, может есть простые и очевидные способы, которых я не вижу.
19. coder1cv8 3468 22.10.08 17:18 Сейчас в теме
(18) Все простые и очевидные способы я перечислил. Зачем ещё что-то изобретать? Какого конструктива ещё не хватает?... :)
20. Дуб 79 22.10.08 17:25 Сейчас в теме
(19) для особо одарённых - уточни:
1. обфускация исходного кода - это понятно
2. обфускация байт-кода - это что за зверь? В 1С язык интерпретируемый. Какой байт-код?
3. шифрование кода - какими средствами? Снова ВК?
4. штатный пароль/поставка без исходного кода - это опять понятно..
По п.3 - однозначно согласен. По п.1 - любой студент тупо вручную сможет справиться с восстановлением кода. Вопрос времени, а так - работа тупая. По п.4 уже говорил, что при мне такие вещи вскрывались людьми, не имеющими представления о защите/взломе. Просто за якобы-красивые глаза..
21. coder1cv8 3468 22.10.08 17:40 Сейчас в теме
(20)
1. восстановить код-то можно... Но ты будешь разбираться в алгоритме где все переменные/процедуры названы перем1/проц1? Я - НЕТ. :)
2. "байт-код" - это скомпилированная обработка, как я себе представляю. Т.е. то что получается если ты устанавливаешь пароль или говоришь поставлять без исходного кода. Его тоже можно обфусцировать, таким образом ни один декомпилятор, ни за какие красивые глазки его на автомате не вытащит. Впрочем, в этом вопросе есть здесь более сведущие люди :)
3. Можно с ВК, можно без. Это дело вкуса.
4. см. п. 2.
22. Дуб 79 22.10.08 17:46 Сейчас в теме
(21) т.е. п.2 и п.4 - одно и то же? Понятно. Сужаем круг :)
Просто бороться с обфускацией может тупой студент, время которого стоит копейки. Допускаю ситуацию, когда будет выгоднее взять на месяц (типа "испытательный срок") студента с условием "разобраться с задачей". И он разберётся.
А вот по поводу "Можно с ВК, можно без" - здесь поподробнее, пожалуйста.
Кстати, поставка без исходного кода с v7 как сообщается? Это-ж вроде только для v8?
23. coder1cv8 3468 22.10.08 18:02 Сейчас в теме
(22)
Если я, к примеру, закрою обработку с использованием всех 4-х приведенных методов, то ни один студент её НЕ взломает ни за месяц, ни за год (судя по тому какие нынче студенты пошли :)).
А что подробнее? Я тут в одной своей статье приводил пример, как можно ключевые моменты, типа проверки срока использования демоверсии, написать на VBScript Encoded.
Я говорю тока про v8, семерки я в глаза не видел...
24. Дуб 79 23.10.08 08:25 Сейчас в теме
(23) статью , кстати, помню. Забыл только, что она твоя :)
Кроме того, v7 не имеет механизмов, присутствующих в v8, так что вариант - не универсальный.
С другой стороны - универсальность, наверное, и не нужна.. Нужна функциональность.

Всё-таки повторюсь ещё раз: то, что описал я, подразумевает, что обработка не содержит заблокированных участков. Она в принципе является урезанной. Там и разбираться-то не с чем будет..
Впрочем, проехали. По ходу - не догоняете.
40. ValeriVP 1303 30.10.08 10:45 Сейчас в теме
(16) Как исполнить - используется ВК, для ее регистрации не надо прав при использовании RegsrvEx.
далее - как сделать с минимальными трудозатратами ВК? Взять готовую.
(31) Проблема в том, что решение за 3750 ломается студентом (или не студентом?) за 5мин.
(39) а мне язык D по описанию нравится. правда еще не пробовал
41. АЛьФ 30.10.08 12:30 Сейчас в теме
2(40) Здорово! Давай я тебе зашлю защищенную обработку, а ты мне через 30 минут (в шесть раз больше времени тебе даю, чем ты тут высказал) ее обратно в открытом виде?
42. АЛьФ 30.10.08 14:42 Сейчас в теме
+(41) Ну, так как? Отвечать за свои слова будем?
44. ValeriVP 1303 30.10.08 16:02 Сейчас в теме
(41) я про Катран, для снятия защиты еще нужен ключ. если ты про что другое - давай посмотрим
45. coder1cv8 3468 30.10.08 16:09 Сейчас в теме
47. ValeriVP 1303 30.10.08 16:20 Сейчас в теме
(45) да нет, я привык отвечать за свои слова, просто надо быть уверенным, что говорим об одном и том же.
46. АЛьФ 30.10.08 16:14 Сейчас в теме
2(44) Круто! Человек в (31) говорит о КЗК, а ты, отвечая ему, оказывается, о Катране говоришь. Вот ведь... Чудесная логика...
48. ValeriVP 1303 30.10.08 16:22 Сейчас в теме
(46) - "чего-то, что стоит сравнимых денег со стоимостью КЗК-2", КЗК-2 как я вижу стоит 5000р, а Катран мы покупали примерно за 4000 ~3750
и речь идет про 8.x
49. АЛьФ 30.10.08 16:46 Сейчас в теме
2(48) Да ладно, съехал уже.
4. Дуб 79 22.10.08 09:55 Сейчас в теме
(2) кстати, я говорил о защите от прямого вскрытия.
Более толковые аргументы есть?
С поправкой на саму статью (если её прочесть).
8. coder1cv8 3468 22.10.08 10:17 Сейчас в теме
(2) Зачем минусовать? Мне лично, интересно было почитать мнение автора, хоть и несколько наивное :)
10. Дуб 79 22.10.08 10:20 Сейчас в теме
(8) говорю-же: ночные бдения :).. А опята киданий (и попыток киданий) у меня хватает..
5. support 4484 22.10.08 10:03 Сейчас в теме
Хорошая статья, наглядно отражает ошибочное мнение про защиту, зачем минусовать? Можно в ответ написать подробное объяснение.
6. Дуб 79 22.10.08 10:06 Сейчас в теме
(5) так словами мнения-то говорить кто-нить будет? С аргументами.
denisdwh; +1 Ответить
7. coder1cv8 3468 22.10.08 10:15 Сейчас в теме
Для простого отчета/обработки достаточно таких методов как:
1. обфускация исходного кода
2. обфускация байт-кода
3. шифрование кода
4. штатный пароль/поставка без исходного кода
Этого более чем достаточно, что бы "ломать" отчет стало НЕ ВЫГОДНО.

Если же вы продаете большие (дорогие) решения, то имеют смысл и затраты на защиту нормальную (вынос в длл-ки, ключи, от Интелис тут решение мелькало и т.д.)

ЗЫ: А вообще ПРЕДОПЛАТА рулит! :)
pvlunegov; support; TrishinPA; cs25; denisdwh; Vitek; German; +7 Ответить
9. Дуб 79 22.10.08 10:19 Сейчас в теме
(7) это - бесспорные утверждения. Которые, кстати, я в статье не отбрасывал. Обфускацию, правда, не упомянул. Предоплату - не обсуждал в силу предмета статьи.
И про большие решения речь не шла.
Повторюсь - речь шла о дополнительном "туннеле". И о том, что можно обработку изначально давать урезанную. Т.е. клиент, отказываясь от оплаты, узнаёт об истечении срока пост-фактум. И при выцеплении кода из кэша получает уже урезанную версию.
12. RobberHood 22.10.08 12:57 Сейчас в теме
Усё хорошо. Если видишь,что клиент - гомик, и денег у него повсей видимости нет,тогда незачем с ним связываться.
А если связался,то не ограничивайся защитой только данного отчета или конфигурации.Твой ответ должен быть ,как ответ России Грузии:
Нанести максимальный ущерб !!! Удалить не только свой отчет ,но и большую(доступную) часть программ на Сервере и в Локалке.

immortaldragom; German; +2 Ответить
13. Vitek 22.10.08 13:42 Сейчас в теме
(12)
"Если видишь,что клиент - гомик,и денег у него повсей видимости нет"
Ты ясновидец? К тому же иногда не платят те у кого эти самые деньги есть, просто жаба душит.

>Нанести максимальный ущерб !!! Удалить не только свой отчет ,но и большую(доступную) часть программ на Сервере и в Локалке.
А это уже вредительство, и под уголовное законодательство попадает кажется.
25. vovan519 276 23.10.08 13:17 Сейчас в теме
Была статья "v7: "Живые" пользователи...(монитор без ВК, нужен ворд)" на мисте или на T1С. Кто помнит, в интересном месте там оказался код...
К вопросу о защите небольших отчетов можно добавить.
п.5. Размещение части кода в нестандартных местах обработки.
26. Дуб 79 23.10.08 14:27 Сейчас в теме
27. fAngel 371 23.10.08 22:23 Сейчас в теме
видел классный пример с применением 1CPP шифрования и применения дополнительного глобального модуля,
но такой вариант не подойдет нужна 1СPP, как варианты для обычных модулей можно в StreamEditor.exe рас форматировать текст модуля и например двинуть все в право :-) сам видел как некоторые спецы дивились что в обработки нет кода в модуле :-)
28. vip 23.10.08 23:04 Сейчас в теме
> видел классный пример с применением 1CPP шифрования

Чего? Какого шифрования?
33. alexqc 150 29.10.08 11:31 Сейчас в теме
(28) У 1С++ есть класс DynaCrypt, с методами ЗашифроватьСтроку и РасшифроватьСтроку. Возможно это и имелось ввиду.
29. 26.10.08 07:50 Сейчас в теме
Да, неплохо. В восьмерке можно обработку генерить на лету, из двоичных данных.
Соответственно, двоичные данные зашифровать.
МОжно обойтись и без EXE-файла. ;-)
30. Дуб 79 27.10.08 09:01 Сейчас в теме
(29) так ведь опять-таки - я же не о конкретной реализации, а об идеологии... Конечно можно. Тут ведь вся фишка в том, чтобы полнофункциональную обработку вообще не предоставлять (точнее - предоставлять только на период тестовой эксплуатации).
31. Ветер в поле 3 29.10.08 09:52 Сейчас в теме
Зачем изобретать велосипед?
Тратить кучу времени на защиту чего-то, что стоит сравнимых денег со стоимостью КЗК-2...
Сложно потратить один раз 3750 р. и заниматься потом зарабатыванием денег. Частенько проще зарабатывать больше, чем экономить.
34. Дуб 79 29.10.08 12:39 Сейчас в теме
(31) экономия, вообще-то, здесь ни при чём. Зачем тогда вообще что-то кодить? Лучше искать уже готовое и пригибать к своим задачам. Только всегда ли это правильно?
(32) ответь, как зарегистрировать ВК, не имея прав админа? Простой вопрос, надеюсь получить простой ответ ;)
35. JohnyDeath 301 29.10.08 12:52 Сейчас в теме
(34) ответь, как зарегистрировать ВК, не имея прав админа? Простой вопрос, надеюсь получить простой ответ ;)
ответ в профиле у кого ты спрашиваешь.
37. Дуб 79 29.10.08 17:31 Сейчас в теме
(35),(36) Принято. Убедили. Почти. Вот теперь бы то же самое - под *.NET бы...
32. alexqc 150 29.10.08 11:27 Сейчас в теме
Фактически - то что должно быть исполнено, должно быть по-любому прочитано :). То есть, неважно, КАК будет зашифрован код, в конце-концов где-то он появится в явном виде. Отсюда мораль: у клиента не должно быть доступа до реального исходника ВООБЩЕ. То есть рулят только обфускаторы и бинарники (байт-код либо ВК с нужным функционалом). У 8ки, насколько мне известно, обработки могут поставляться без исходников, с только байт-кодом. У 77 то же самое делает КЗК-2. А то что для внешних компонент нужны админские права - это заблуждение.
36. alexqc 150 29.10.08 15:03 Сейчас в теме
JohnyDeath, спасибо за поддержку :)

Дуб, см. http://infostart.ru/projects/559, и тамже мой комментарий под №8.
38. alexqc 150 29.10.08 18:22 Сейчас в теме
Первый же вопрос: А НЕТ-то нафига?

А вообще, я конечно ВК под НЕТ не писал, но предполагаю, что их метод регистрации точно такой же - ведь 1Ска ничего про НЕТ не знает, т.е. запуск идет через обычный ком и загрузчик в "неуправляемой" (неНЕТовской) части компоненты. Если же имеется в виду, что для установки НЕТа админские права нужны - ну так это уже задача другого плана: вы ж не будете, например, с ВК весь дистрибутив НЕТ распространять? И установка НЕТа все-таки не обычное действие, это аналог например установки драйвера - вас же не удивляет что драйвера под админом ставятся?
39. Дуб 79 30.10.08 08:14 Сейчас в теме
(38) Предположение неверное. Framework является частью Windows и не требует отдельной установки (точнее - устанавливается автоматически при очередном обновлении, хотя, конечно, его, как и прочие пакеты обновления, можно отдельно скачать и отдельно установить).
А по "первому же" вопросу - продолжив ряд "нафига" - упрёмся в Ассемблер.
C#, например, очень удобный, приятный в работе язык. Писать на нём - одно удовольствие.
43. MMF 679 30.10.08 14:54 Сейчас в теме
идеи, конечно, детские. Окромя запутывания кода (толи обфускатором, толи просто идиотской индивидуальной манерой написания {тут мы вспомним Пита и ему икнется}) в деле защиты кода для 8-ки ничего не взлетит, имхо
50. Дуб 79 30.10.08 17:15 Сейчас в теме
(43) вот, блин.. Я им про методику - они мне про платформу.
(46) Что-то мне кацца, что сейчас ещё и не такие ходы конём пойдут ;)
51. Gasdrubal 12.09.11 13:03 Сейчас в теме
а как насчет обычного шифрования текстов модулей при помощи RSA? кажется в 1СПП было что - то похожее, по крайней мере один мой знакомый хвастался.
также хорошая идя - скомпилированные модули, как говорилось выше.

кстати, есть виды длл без регистрации
Оставьте свое сообщение