gifts2017

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

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

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

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

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

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

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

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

См. также

Подписаться Добавить вознаграждение

Комментарии

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

Так что все эти фантазии бред. Только ВК... другого выхода нет..
3. Дуб (Дуб) 22.10.08 09:35
(2) допустим. Применительно к v8 убедил (почти).
Но ВК - это права админа для регистрации. Которых может и не быть..
4. Дуб (Дуб) 22.10.08 09:55
(2) кстати, я говорил о защите от прямого вскрытия.
Более толковые аргументы есть?
С поправкой на саму статью (если её прочесть).
5. Доржи Цыденов (support) 22.10.08 10:03
Хорошая статья, наглядно отражает ошибочное мнение про защиту, зачем минусовать? Можно в ответ написать подробное объяснение.
6. Дуб (Дуб) 22.10.08 10:06
(5) так словами мнения-то говорить кто-нить будет? С аргументами.
denisdwh; +1 Ответить
7. Андрей Скляров (coder1cv8) 22.10.08 10:15
Для простого отчета/обработки достаточно таких методов как:
1. обфускация исходного кода
2. обфускация байт-кода
3. шифрование кода
4. штатный пароль/поставка без исходного кода
Этого более чем достаточно, что бы "ломать" отчет стало НЕ ВЫГОДНО.

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

ЗЫ: А вообще ПРЕДОПЛАТА рулит! :)
support; TrishinPA; cs25; denisdwh; lomok; German; +6 Ответить 1
8. Андрей Скляров (coder1cv8) 22.10.08 10:17
(2) Зачем минусовать? Мне лично, интересно было почитать мнение автора, хоть и несколько наивное :)
9. Дуб (Дуб) 22.10.08 10:19
(7) это - бесспорные утверждения. Которые, кстати, я в статье не отбрасывал. Обфускацию, правда, не упомянул. Предоплату - не обсуждал в силу предмета статьи.
И про большие решения речь не шла.
Повторюсь - речь шла о дополнительном "туннеле". И о том, что можно обработку изначально давать урезанную. Т.е. клиент, отказываясь от оплаты, узнаёт об истечении срока пост-фактум. И при выцеплении кода из кэша получает уже урезанную версию.
10. Дуб (Дуб) 22.10.08 10:20
(8) говорю-же: ночные бдения :).. А опята киданий (и попыток киданий) у меня хватает..
11. Герман (German) 22.10.08 10:35
(3) если обработку взять из Temp её еще и проще декомпилировать .. так как она уже распакована..

Насчёт прав админа, это единственная сложность в ВК.
Мне эти "рассуждения" не понравились, потому как нечего информативного не несут .. просто запутаете многих людей, которые пытаются сделать первые шаги в этом. Люди потратят время на заранее обреченные вещи..
12. RobberHood (RobberHood) 22.10.08 12:57
Усё хорошо. Если видишь,что клиент - гомик, и денег у него повсей видимости нет,тогда незачем с ним связываться.
А если связался,то не ограничивайся защитой только данного отчета или конфигурации.Твой ответ должен быть ,как ответ России Грузии:
Нанести максимальный ущерб !!! Удалить не только свой отчет ,но и большую(доступную) часть программ на Сервере и в Локалке.

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

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

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

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

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

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

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

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

Дуб, см. http://infostart.ru/projects/559, и тамже мой комментарий под №8.
37. Дуб (Дуб) 29.10.08 17:31
(35),(36) Принято. Убедили. Почти. Вот теперь бы то же самое - под *.NET бы...
38. AlexQC (alexqc) 29.10.08 18:22
Первый же вопрос: А НЕТ-то нафига?

А вообще, я конечно ВК под НЕТ не писал, но предполагаю, что их метод регистрации точно такой же - ведь 1Ска ничего про НЕТ не знает, т.е. запуск идет через обычный ком и загрузчик в "неуправляемой" (неНЕТовской) части компоненты. Если же имеется в виду, что для установки НЕТа админские права нужны - ну так это уже задача другого плана: вы ж не будете, например, с ВК весь дистрибутив НЕТ распространять? И установка НЕТа все-таки не обычное действие, это аналог например установки драйвера - вас же не удивляет что драйвера под админом ставятся?
39. Дуб (Дуб) 30.10.08 08:14
(38) Предположение неверное. Framework является частью Windows и не требует отдельной установки (точнее - устанавливается автоматически при очередном обновлении, хотя, конечно, его, как и прочие пакеты обновления, можно отдельно скачать и отдельно установить).
А по "первому же" вопросу - продолжив ряд "нафига" - упрёмся в Ассемблер.
C#, например, очень удобный, приятный в работе язык. Писать на нём - одно удовольствие.
40. - - (Rebelx) 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) Ну, так как? Отвечать за свои слова будем?
43. Михаил Усков (MMF) 30.10.08 14:54
идеи, конечно, детские. Окромя запутывания кода (толи обфускатором, толи просто идиотской индивидуальной манерой написания {тут мы вспомним Пита и ему икнется}) в деле защиты кода для 8-ки ничего не взлетит, имхо
44. - - (Rebelx) 30.10.08 16:02
(41) я про Катран, для снятия защиты еще нужен ключ. если ты про что другое - давай посмотрим
45. Андрей Скляров (coder1cv8) 30.10.08 16:09
46. АЛьФ (АЛьФ) 30.10.08 16:14
2(44) Круто! Человек в (31) говорит о КЗК, а ты, отвечая ему, оказывается, о Катране говоришь. Вот ведь... Чудесная логика...
47. - - (Rebelx) 30.10.08 16:20
(45) да нет, я привык отвечать за свои слова, просто надо быть уверенным, что говорим об одном и том же.
48. - - (Rebelx) 30.10.08 16:22
(46) - "чего-то, что стоит сравнимых денег со стоимостью КЗК-2", КЗК-2 как я вижу стоит 5000р, а Катран мы покупали примерно за 4000 ~3750
и речь идет про 8.x
49. АЛьФ (АЛьФ) 30.10.08 16:46
2(48) Да ладно, съехал уже.
50. Дуб (Дуб) 30.10.08 17:15
(43) вот, блин.. Я им про методику - они мне про платформу.
(46) Что-то мне кацца, что сейчас ещё и не такие ходы конём пойдут ;)
51. FFFF FFF (Gasdrubal) 12.09.11 13:03
а как насчет обычного шифрования текстов модулей при помощи RSA? кажется в 1СПП было что - то похожее, по крайней мере один мой знакомый хвастался.
также хорошая идя - скомпилированные модули, как говорилось выше.

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