Защита разработок от копирования (Обычная и Управляемая форма)




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2024-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

99 Comments

  1. karpik666

    Кому интересно, сайт для проверки регулярных выражений: http://regexr.com/

    Reply
  2. karpik666

    Обновлено 28.03.2016:

    Добавлена в дерево кнопка «Заполнить идентификатор», позволяющая вместо guid использовать свой идентификатор, например представить переменную как набор символов «______»

    Reply
  3. shakmaev

    Спасибо, хоть небольшая альтернатива всегда платной Нетленки. Однако, ваша обработка очень похожа на http://infostart.ru/public/15907/. Не она ли тут?

    Reply
  4. karpik666

    (3) shakmaev,

    Данная разработка является идейным продолжением разработки coder1cv8 [2 in 1] «Обфускация кода 1С» и «RegExp Тестер». В ней исправлены большинство ошибок разработки данного автора: корректно распознаются директивы компиляции, области, инструкции препроцессора, комментарии, корректно заменяются переменные (не знаю, как у вас, но у меня разработка автора просто так не шифровала код, все равно оставались какие-то частично не зашифрованные переменные.)

    Все указано в тексте публикации.

    Reply
  5. shakmaev

    (4) принял. Не вчитался, прошу прощения.

    Reply
  6. lopatin

    «используйте данную разработку, и тогда предполагаемый злоумышленник, глядя на такой код, просто плюнет и начнет писать свой»

    Некоторые пишут такой код, что начинаешь плеваться и проходишь мимо…

    Жалко иногда приходится исправлять ошибки в таком коде, тут уже мимо ни как не получится пройти..

    Reply
  7. karpik666

    (6) lopatin, да, сам через такое проходил, это в большей степени связано с тем, что в 1С низкий порог вхождения в сферу, но в тоже время полно достойных разработчиков.

    Reply
  8. rayastar

    русский менталитет не делиться своими трудами

    спасибо что ты есть, гитхаб

    Reply
  9. karpik666

    (8) rayastar, не считаю, что только русские так шифруются, большинство коммерческих разработок с закрытым исходным кодом, тот же фотошоп, или даже windows,

    Reply
  10. SGordon1

    поясните смысл шифровки закрытого кода винддовс…

    Reply
  11. karpik666

    (10) SGordon1, закрытый код не шифруется, однако я привел данный пример, как один из вариантов исключения модификации исходного кода программы, в принципе в 1с тоже можно исключить текст модуля из поставки, однако есть всем известный декомпилятор, который обходит такую защиту.

    Reply
  12. so-quest

    плюсик за трудолюбие.

    Reply
  13. SGordon1

    (9) karpik666 так шифруются, , большинство коммерческих разработок с закрытым исходным кодом, тот же фотошоп, или даже windows,

    Это я написал?

    Reply
  14. karpik666

    (13) SGordon1, хм, тогда так:

    не считаю, что только русские так «шифруются«.

    Большинство коммерческих разработок с закрытым исходным кодом, тот же фотошоп, или даже windows,

    Reply
  15. timeforlive

    Как же потом делать отладку, если в процессе работы пользователь выявил ошибку программы (особенно при «фатал ерроре»)?

    Reply
  16. karpik666

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

    Reply
  17. karpik666

    Так, уже 27 скачиваний, и что ни у кого нет никаких пожеланий или замечаний?

    Reply
  18. Steelvan

    Пожелания и замечания могут быть только в случае практического использования, видимо все только любопытства ради скачивают.

    Но 43 плюса как бы намекают 🙂

    Reply
  19. МимохожийОднако

    (16) мы всегда предполагаем, что код отлажен. Однако периодически нарываемся на необходимость правки своего кода. Для этого случае есть возможность декодирования или надо держать в архивах копию с читаемым кодом? Сталкивался с ситуацией, когда разработчик перестал поддерживать обработку, а клиенту надо помочь.

    Reply
  20. karpik666

    (20) МимохожийОднако, конечно должна быть копия программы с читаемым кодом, для этого и нужны «исходники». Такая же проблема может возникнуть, когда обфусцируется байт-код, но что-то не слышал, чтобы разработчики его деобфусцировали, каждый раз когда нужно отлаживать код, для этих целей используются исходники программы.

    Reply
  21. karpik666

    (20) МимохожийОднако, а по поводу поддержки отвечу вопросом на вопрос: а что если фирма 1С разорится и перестанет поддерживать свои релизы, а в релизе будет ошибка? Разве можно будет поправить эту ошибку?

    Reply
  22. wolfsoft

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

    Reply
  23. Mavin

    Сам я долго уже пользуюсь обработкой «Обфускация кода 1С» и она вполне удовлетворяла меня. Правда иногда приходилось код немного подстроить под обработку, чтобы после обфускации без ошибок компилировался. Решил проверить тот самый код на этой обработке, но оказалось что обработка выдала некорректный результат. Методом исключения, ошибку можно увидеть например на таком коде:

    Функция Процедура1() Экспорт

    Текст = «//»;

    Возврат Текст;

    КонецФункции

    Функция Процедура2() Экспорт

    Текст = «//»;

    Возврат Текст;

    КонецФункции

    Reply
  24. karpik666

    (24) Mavin, понял, некорректно отрабатывает поиск по слову Процедура или комментарию, спасибо, сейчас постараюсь исправить

    Reply
  25. Mavin

    (25) причина думаю точно не в имени функции (это я для примера так сделал), а скорей всего в том, что в комментарии такой слэш есть «//». Причем, если оставить только одну функцию, то результат корректный.

    Reply
  26. karpik666

    (26) Mavin, разобрался. Действительно проблема была в символах // в строке.

    Обработку исправил. Сейчас должно все корректно учитывать.

    Reply
  27. Mavin

    (27) Теперь обработка выдала результат:

    Функция Процедура1() Экспорт x34f5fdf9d4054708942e4b249b39edc8 = 123; Возврат x34f5fdf9d4054708942e4b249b39edc8; КонецФункции

    который естественно не компилируются, поскольку 123 это явно не строка. Причем вместо 123 должно стоять все тот же текст «//» (шифрованием не пользовался).

    Reply
  28. karpik666

    (28) Mavin, разобрался, использовал для тестирования notepad++, а там группировки проставляется через слэш, а оказывается в RegExp нужно использовать «$»

    Reply
  29. Steelvan

    (8) rayastar,

    По поводу прятать есть отличная сказка про дядю Скруджа, которая очень хорошо показывает менталитет некоторых западных народов.

    Reply
  30. AnryMc

    (2)

    Оказывается, «для продвижения публикаций», кроме разноцветной рекламы внизу статьи, можно «поднимать» ветку обсуждений сообщениями об обновлениях не редактирую статью…

    ЗЫ Что это со мной сегодня? Съел наверно что то…

    ЗЫЫ Не проще ли вынести то что не хочешь в модуль с паролем? Трудоемкость поиска «ломалки» для запароленного модуля не намного меньше от «восстановления» исходника …

    Reply
  31. Dementor

    (23) wolfsoft, с языка сняли 🙂

    (20) МимохожийОднако, смотрите шире. Кроме сотрудников на ставке и всяких франчей еще есть фрилансеры. И иногда их пытаются обмануть с оплатой. Это как раз для случая, когда клиенту нужно показать работающий код для тестирования, который он после кражи не сможет использовать, получить вознаграждение и далее отдать полноценную работу.

    Reply
  32. karpik666

    (33) AnryMc, и к чему это? по-моему это уже мое личное дело как продвигать публикации, причем это не запрещено правилами инфостарта, в данном случае ссылки разделены по тематике, также я не выставляю все свои работы, а только те, что считаю интересными. Также эти ссылки появляются в поле «см. также».

    Reply
  33. karpik666

    (34) Dementor, мне кажется, если продукт уже готов, то клиент конечно же сможет его использовать даже с такой «защитой», однако если в коде есть явная ошибка, то диагностика ее для клиента уже будет серьезной проблемой.

    Reply
  34. AnryMc

    (35)

    Что это со мной сегодня? Съел наверно что то…
    Reply
  35. TODD22

    (37) AnryMc,

    Что это со мной сегодня? Съел наверно что то…

    Грибы из брокколи?

    Reply
  36. Agapov_Stas

    (33) AnryMc,

    ЗЫЫ Не проще ли вынести то что не хочешь в модуль с паролем? Трудоемкость поиска «ломалки» для запароленного модуля не намного меньше от «восстановления» исходника …

    Запароленные модули — ломаются за 1-2 минуты )

    Reply
  37. Agapov_Stas

    (36)

    мне кажется, если продукт уже готов, то клиент конечно же сможет его использовать даже с такой «защитой», однако если в коде есть явная ошибка, то диагностика ее для клиента уже будет серьезной проблемой.

    ну если в код зашить ограничение по дате и зашифровать — то думаю не сможет … именно для этих целей мне данная обработка интересна

    разобрался, использовал для тестирования notepad++, а там группировки проставляется через слэш, а оказывается в RegExp нужно использовать «$»

    Текущий файл уже с исправленной ошибкой ?

    Reply
  38. karpik666

    (33) AnryMc, для обычной формы конечно можно и в модуль объекта поместить, но если этот не обфусцировать, то его всем известный декомпилятор щелкнет как орешки, но я пришел к шифратору когда стал делать разработку для управляемых форм, много ли вы серверного кода помещаете в модуль объекта? Если делать код оптимизированным, то вообще код не следует использовать директиву «НаСервере», что сразу исключает модуль объекта, поэтому я помещаю такой код на форму, но с директивой «НаСерверебезКонтекста».

    Reply
  39. karpik666

    (41) Agapov_Stas, да, исправленный

    Reply
  40. adhocprog

    Спасибо, попробуем! )

    Reply
  41. artfa

    (3) shakmaev, та обработка не поддерживает инструкции препроцессора

    Reply
  42. AnryMc

    (42)

    много ли вы серверного кода помещаете в модуль объекта?

    А разве пароль не ставиться и на общие модули?

    Reply
  43. sashs1980

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

    Reply
  44. sashs1980

    в модуле более 100 процедур и функций, в результате 23 только процедуры и ни одной функции

    Reply
  45. karpik666

    (46) AnryMc, если речь идет о внешней обработке, то тут код никак не поместишь в общий модуль

    (47) sashs1980, ограничений не должно быть, отправьте в личку пример кода, который не распознался, возможно я чего-то не учел в алгоритме.

    Reply
  46. Agapov_Stas

    (43) Подскажите какой программой делали Gif -ку ? (Неплохо смотрится — а то той что я делаю частенько коряво получается )

    Reply
  47. Agapov_Stas

    (46) AnryMc, пароль снимается в три секунды

    Reply
  48. karpik666

    (50) Agapov_Stas, вначале снял видео, а затем импортировал в фотошоп и сохранил как веб, есть ограничение на 500 кадров в анимации.

    Reply
  49. karpik666

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

    Reply
  50. МимохожийОднако

    (34) Dementor, я согласен. Однако я исхожу из личной практики. У меня на 500 случаев только 1-2 раза обманывали. А вот долги возвращали (добровольно) даже через 10 лет. Ворованное или неоплаченное впрок не пойдёт. Карма важнее )) Я ни в коем-случае не против этой обработки. Но встретившись пару-тройку раз с клиентами, которых кинули на поддержке с подобными обработками, я пришёл к тому, что пусть мне будет стыдно, но свой код я скрывать не буду. Кому надо тот поправит.

    Reply
  51. Agapov_Stas

    (53) скачал — попробовал на обработке

    Перестала работать )

    не отрабатывает запрос после обфускации ((

    Reply
  52. CyberCerber

    Приветствую!

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

    Я хочу защитить код своей обработки тогда, когда создаю для нового заказчика демоверсию, которая перестанет работать через определенное время. Поэтому прописываю триал период в коде.

    Вот что получилось после вашего преобразования:

    Процедура ПривязатьОплаты() Экспорт Если ТекущаяДата() > Дата(2016,4,1) Тогда Возврат; КонецЕсли;

    Т.е. ничего вообще не изменилось. До этого выкладывали на ИнфоСтарте обфускатор кода, он меня тоже до конца не устроил, но у него лучше получалось.

    Reply
  53. Agapov_Stas

    (56) CyberCerber, да — для таких целей и я скачивал — но то как он шифрует — эту проверку можно отключить очень быстро (а надежда была — не оправдалась)

    Reply
  54. DrAku1a

    А если такой код попробовать преобразовать обратно — переименовывая переменные в что-то вида «Парам1, Парам2, Парам3» и восстановив структуру кода (Форматировать). По идее — будет вполне читабельно и общий смысл понятен. Вот такой «Анти-обфускатор» ))

    Reply
  55. karpik666

    (55) Agapov_Stas, хм, сейчас посмотрю в чем дело;

    (56) а как бы вы хотели, чтобы программа такой код зашифровала? в данном случае шифруется ведь не скомпилированный код, а просо текст, а у вас экспортная процедура, у которой, если поменять наименование может что-то сломаться в программе, так как эта процедура может вызываться в других местах, стандартная функция ТекущаяДата(), а также функция получения Даты, здесь просто нечему шифроваться.

    (58) DrAku1a, я думал еще сделать деобфускатор, однако все равно наименование переменных и комментарии никак не восстановишь, и разбираться в таком коде та еще морока, я когда-то пытался разобраться в работе конфигурации Широкоформатная печать, хоть там код и был не шифрованным, однако я успел раз 300 обматерить того «разработчика», который писал его.

    (57) Agapov_Stas, для того, что вы хотите нужен шифратор байт-кода, тогда действительно можно зашифровать так, что никто не сможет взломать, хотя точно не знаю, может уже есть какой-то деобфускатор.

    Reply
  56. karpik666

    Напоминаю

    Принимаются предложения и замечания.

    Если что говорите, что необходимо переделать или добавить.

    Reply
  57. Mavin

    (60) Тогда еще один тест, который также не проходила обработка «Обфускация кода 1С». После обфускации модуля обработки, она становится нерабочей.

    Тут речь идет о комментариях в тексте запроса. Сразу отмечу, что удаление комментариев не будет являться решением, поскольку иногда их добавляют с той целью, чтобы потом эти комментарии заменить на что-то нужное с помощью СтрЗаменить.

    Reply
  58. karpik666

    (61) Mavin,

    Процедура Тест() x9cfbec67d813410cbf161778a7400fd8 = Новый Запрос; x9fe556d4a7a84a7e810b99dfb9d9562f = «ВЫБРАТЬ РАЗРЕШЕННЫЕ  //Наименование  Организации.Наименование КАК Наименование,  //Наименование полное  Организации.НаименованиеПолное КАК ПолноеНаименование ИЗ  Справочник.Организации КАК Организации»; x9cfbec67d813410cbf161778a7400fd8.Текст = x9fe556d4a7a84a7e810b99dfb9d9562f; xbfcc5e2671274175b21383b9fdd8a9f4 = x9cfbec67d813410cbf161778a7400fd8.Выполнить();
    x2b50b9ce97754ff396a0ad5206686d38 = xbfcc5e2671274175b21383b9fdd8a9f4.Выбрать();
    Если x2b50b9ce97754ff396a0ad5206686d38.Следующий() Тогда Сообщить(x2b50b9ce97754ff396a0ad5206686d38.Наименование);
    Сообщить(x2b50b9ce97754ff396a0ad5206686d38.ПолноеНаименование); КонецЕсли; КонецПроцедуры
    

    Вроде нормально строку распознала, с учетом комментариев

    Reply
  59. karpik666

    (61) Mavin, а если вот так будет?

    Процедура Тест() x916220aab32c40a1b19622bc723f6cca = Новый Запрос; x5cbbbf848af145f3a8df8068ee514b31 = «ВЫБРАТЬ РАЗРЕШЕННЫЕ»+Символы.ПС+» //Наименование»+Символы.ПС+» Организации.Наименование КАК Наименование,»+Символы.ПС+» //Наименование полное»+Символы.ПС+» Организации.НаименованиеПолное КАК ПолноеНаименование»+Символы.ПС+»ИЗ»+Символы.ПС+» Справочник.Организации КАК Организации»;
    x916220aab32c40a1b19622bc723f6cca.Текст = x5cbbbf848af145f3a8df8068ee514b31; x7781e025410e4a0f8d4dba697f964a3a = x916220aab32c40a1b19622bc723f6cca.Выполнить();
    xdc0ca4d0a3444b798b6f28ec65b7f97d = x7781e025410e4a0f8d4dba697f964a3a.Выбрать();
    Если xdc0ca4d0a3444b798b6f28ec65b7f97d.Следующий() Тогда Сообщить(xdc0ca4d0a3444b798b6f28ec65b7f97d.Наименование);
    Сообщить(xdc0ca4d0a3444b798b6f28ec65b7f97d.ПолноеНаименование); КонецЕсли; КонецПроцедуры
    

    В принципе так нормально учитываются все переносы строк.

    Reply
  60. Mavin

    (63) да, это рабочий вариант будет.

    Reply
  61. karpik666

    У кого-нибудь есть идеи для поиска двойных кавычек в текстовой строке. Сейчас используется такой шаблон «(«»[#k8SjZc9Dxk»»

    ]*)((«»»»){1,})([#k8SjZc9Dxk»»

    ]*»»)», и в нем я нахожу двочные кавычки, а затем их выделяю специальными символами, чтобы потом заменить, однако некоторые строки он не обрабатывает.

    Reply
  62. karpik666

    Обновлено 31.03.2016

    Заменил переносы строк на «+Символы.ПС +», теперь корректно обрабатываются запросы. содержащие комментарии

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

    все слова кроме строк приводятся к нижнему регистру.

    Reply
  63. nSpirit2

    (63)

    Процедура Тест()
    Запрос = Новый Запрос;
    ТекстЗапроса = «ВЫБРАТЬ РАЗРЕШЕННЫЕ
    | Организации.Наименование КАК Наименование,
    | Организации.НаименованиеПолное КАК ПолноеНаименование
    |ИЗ
    | Справочник.Организации КАК Организации»;
    Запрос.Текст = ТекстЗапроса;
    Резальтат = Запрос.Выполнить();
    Выборка = Резальтат.Выбрать();
    Если Выборка.Следующий() Тогда
    Сообщить(Выборка.Наименование);
    Сообщить(Выборка.ПолноеНаименование);
    КонецЕсли;
    КонецПроцедуры
    

    Показать

    А в чем сложность то с этим бороться? С тех пор как 1с добавили рефакторинг в конфигуратор заменять имена переменных прям очень не очень защита.

    Или оно что то еще может кроме переименования и замены форматирования ?

    Reply
  64. karpik666

    (67)

    Что делает:

    Удаляет комментарии.

    Удаляет области

    Заменяет не экспортные функции на guid.

    Заменяет не экспортные переменные и параметры на guid.

    Если необходимо шифрует с помощью capicom.dll строковые данные, каждый раз ключ разный.

    Директивы компиляции и инструкции препроцессора, всегда с новой строки

    В принципе пока больше и ничего, Та же нетленка https://netlenka1c.ru/ делает тоже самое.

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

    Reply
  65. nSpirit2

    (68) Ну нетленка много чего делает. Фэйковые переходы ложные условия, вообще запутывание цепочки выполнения кода что делает его структурный анализ более сложным.

    Ну а так желаю вам удачи в вашем начинании. 🙂

    Reply
  66. karpik666

    (69) nSpirit2, https://netlenka1c.ru/Home/Description Обфускация контроля потока — это только 1 пункт, а остальное уже реализовано и в данной обработке, но есть конечно к чему стремиться.

    Reply
  67. dance000

    (23) wolfsoft,

    Да чего уж там умельцы, достаточно посмотреть на свой код пятилетней давности )))

    Reply
  68. Программулькин

    а как обратно код получить?

    Reply
  69. karpik666

    (72) Программулькин, никак=) на такие случаи должны быть исходники, конечно можно позаморачиваться и как сказали в (58) заменить с помощью рефакторинга переменные, и добавить переносы строк, но код все равно будет мало похож на первоначальный. Если бы можно было так легко все вернуть обработно, то такая защита никому и не нужна будет.

    Reply
  70. fzt

    (72) Программулькин, ахаха. Сочувствую? =)

    Reply
  71. Программулькин

    (74) fzt, не, я просто подумал, было бы интересно иметь как доп функцию, по определённому ключу, вернуть все обратно. Ключ, скажем, набор символов из X разрядов.

    Reply
  72. h00k

    (75) Программулькин,

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

    Система контроля версий типа git, mercurial или bazaar поможет получить желаемое.

    Алгоритм примерно такой:

    1.1 сделал обработку,

    1.2 отладил и закоммитил,

    2.1 создал ветку release 1.0,

    2.2 в ней выполнил обфускацию и закоммитил

    2.3 обработку отдал заказчику/ опубликовал.

    Всплыла бага:

    1.1 закрыл ветку release 1.0,

    1.2 переключился на ветку develope,

    1.3 внес исправления и закоммитил,

    2.1 добавил ветку release 1.1,

    2.2 в ней выполнил обфускацию и закоммитил

    2.3 обработку отдал заказчику/ опубликовал.

    А добавление какого либо ключа для обратной расшифровки — это дополнительная уязвимость для и так весьма слабой защиты.

    Reply
  73. корум

    Спасибо обфускатору, мой код стал более понятным и выполняется быстрее! (ц) из сети

    Reply
  74. Umix

    (66)

    Здравствуйте,

    так и не понял как пользоваться(((

    Только текст перегоняет — это пожалуйста, но открыл нужную обработку для защиты — увидел только глобальные переменные…, ничего окромя…

    скопировал текст из форм — да, с ним отработал, вставил обратно в форму — куча ошибок )))

    Поясните может. Может к версии платформы привязан?

    Спасибо.

    Reply
  75. karpik666

    (78) нет, от версии не зависит, пришлите мне код, который вы хотите зашифровать, я посмотрю, может это ошибка обработки.

    Reply
  76. ra1ich

    Хорошая защита своего кода

    Reply
  77. Evil Beaver

    Мне всегда было интересно, для чего закрывать свой код в разработках на 1С? Какова мотивация и преследуемые цели?

    Reply
  78. karpik666

    (81) наверное бояться конкуренции, либо хотят демо версию обработки и зашить в нее таким образом какие-либо ограничения, или хотят насолить коллеге, который придет на их место=) во всяком случае раз используют значит кому-то это нужно=)

    Reply
  79. Evil Beaver

    (82) в том-то и дело, что это какой-то иррациональный страх, либо «из вредности». И то и другое — это неконструктивно, не приносит благ, не создает новой ценности. 1С продает типовые конфигурации в открытом виде и не переживает. Почему же 1С-ник Вася обязательно хочет закрыть свое творение от посторонних глаз? Что им движет в этот момент?

    Reply
  80. karpik666

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

    Reply
  81. Evil Beaver

    (84) Ну так и я о том. Вы зрите в корень — этому подвержены малоопытные разработчики. «Я сделал что-то, мне оно нравится, я за него переживаю, закрою-ка я его от греха, не знаю зачем, вдруг украдут мегаидею».

    Правильный подход (с моей точки зрения):

    * Развить мегаидею до уровня, чтобы с ног валила

    * Написать про нее на ресурсах уровня инфостарта/хабра, застолбив таким образом авторство

    * Выбрать лицензию распространения кода (например, «Все платно, копировать запрещено»)

    * Еще раз отрекламировать свое решение, чтобы было понятно, где его покупать

    Итого получается:

    * все знают кто автор, что умеет делать его продукт, как получить этот продукт себе.

    * при обнаружении злостного копирования — все ходы записаны, нарушение лицензии, суд, сибирь.

    Про защиту идеи:

    * благодаря публичности — многие подтвердят, кто застолбил идею

    * идеи вообще защищаются патентами, а не обфускацией

    * украсть идею, которая воплощена в обфусцированный код — ничего не стоит. Apple придумало телефон без кнопок с тачскрином. Кода никто не видел (закрыт и обфусцирован), но телефонов таких теперь кругом. Идеей воспользовались не имея кода apple в руках, т.е. идею это не защитило от копирования.

    Reply
  82. karpik666

    (85) Apple зато все запатентовала, и теперь получает с этого очень хороший доход. Ну я не думаю, что у неопытного разработчика хватит «опыта», чтобы понять, что его идея — МЕГА, и тут уж идет скорее на всякий случай, да и бить только в одну цель с малым опытом тоже не хочется («А вдруг не срастется?»), скорее такая специализация подходит для более опытных разработчиков, который могут проанализировать рынок, и делать то, что пригодится и нужно, и что ты делаешь не колесо, которым все уже пользуются, а действительно стоящую вещь.

    Reply
  83. RainyAugust22

    (8)

    итет не делиться своими трудами

    спасибо что ты есть, гитхаб

    а если по другому подумать…у фрилансеров бывают недоборосовестнные заказчики.

    Фрилансер сделал заказ, а заказчик пропал и не оплатил.

    Зашифровать код, отправить триал версию, после оплаты полную версию предоставить,

    Вот для этого можно и заюзать данный инструмент!

    Reply
  84. dddxddd

    (87) По русски, филансер — шабашник, а шабашники по определению делают свою работу спустя рукава. Вы всерьез считаете, что шифрование кода спасет фрилансеров?

    Reply
  85. DrAku1a

    (6) Просто, есть программеры со встроенным обфускатором кода ))

    Reply
  86. vipetrov2

    Область применение у этого запутывания очень узкая. На уровне конкурентов маленького городка, где в месячные доходы измеряются в 5-значных числах. Вон пример Майнкрафт, написанный на яве, его люди бесплатно декомпилировали, восстановили имена методов после обфускации явы. И создали оболочку forge, что бы все желающие писали моды. Если ни кто не обходит эту защиту, то значит ни кому исходники не нужны.

    Reply
  87. dj_serega

    (89) Грех плюсик не поставить :-))

    Reply
  88. CSiER

    Комментарии из запросов не удаляются, инструкции препроцессора не обрабатываются.

    Reply
  89. karpik666

    (92) отправьте мне в личку пример кода, который у вас не распознался

    Reply
  90. MaxS

    * Хотелось бы сохранять настройки в файл.

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

    * Добавить индивидуальную настройку для процедур функций «не шифровать строки»

    * Добавить флаг генерировать ненужный код и какой-нибудь числовой показатель для регулирования его объёма.

    А на будущее — полная автоматизация. Выбираем внешнюю обработку-исходник, автоматически по имени подтягиваются настройки, на выходе обработка под ключ — изменены текст модуля и всех форм, добавлен пароль на модуль, пароль генерируется и сохраняется в настройках. Сейчас конфигурация умеет раскладывать обработку в xml и собирать обратно, поэтому можно там брать код и имена реквизитов форм…

    Мне бы это сэкономило время при подготовке демо обработок после выхода новой версии основной обработки. ))

    Reply
  91. karpik666

    (94) пожелания приняты, какие именно настройки хотите сохранять?

    Про автоматизацию было бы конечно круто, но тут мне кажется средствами 1С уже не обойтись.

    Reply
  92. MaxS

    (95) Настройки — Флажки на вкладке Дерево лексического запутывания.

    На счет автоматизации, например, в конфигурации КД3 я сделал средствами 1С выгрузку обработки в xml, замена текста модуля в файле и сборка обработки обратно.

    Reply
  93. karpik666

    (96) ооо, спасибо, буду иметь ввиду

    Reply
  94. Dnki

    (3) «Однако, ваша обработка очень похожа на http://infostart.ru/public/15907/. »

    В свое время скачивал и протопит. Теперь скачал эту.

    В обоих одно зло: небольшие процедуры обрабатывает нормально.

    А чуть больше, так образуются длинные строки (2700 символов) .

    Ставлю «ограничение = 100». Никак не реагирует.

    Такие тексты просто не работают в редакторе. Он тормозит и глючит. (платформа 8.3.9)

    Вторая проблема: мы программисты грешим, когда используем в именах переменных слова языка 1С. У кого нет такого текста?

    Запрос = Новый Запрос;

    Хорошо бы их не предлагать на изменение.

    Третье предложение: дать опцию преобразовывать текст запроса или нет.

    Объясню почему: вот так преобразовалось «КАК ЗарДох»+символы.пс+ »

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

    Reply
  95. karpik666

    (101) да, уже много идей накопилось, сейчас пока руки не дойдут до реализации. Спасибо за обратную связь.

    Reply
  96. d.zhukov

    (8) при чем здесь русский менталитет.. капитализм пришел к нам с запада, раз уж на то пошло)

    Reply
  97. Perfolenta

    (83)

    1С продает типовые конфигурации в открытом виде и не переживает.

    не корректно… у 1С исходники платформы закрыты, а это главное, что она продает…

    Reply
  98. Perfolenta

    (85) пока конкуренты будут вашу идею реализовывать пройдет время, за которое вы сможете заработать и захватить долю рынка… причем вы можете использовать это время еще и для развития идеи, что бы конкуренты всегда отставали на шаг… а если конкуренты получат ваш код сразу, то у вас форы уже нет… поэтому защита кода нужна, если предполагается конкурентная борьба…

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *