От Hello world - к защите конфигураций за 1 минуту

19.05.12

Разработка - Математика и алгоритмы

Вы всегда хотели но боялись создать COM объект? Тогда мы идем к вам! С обычным блокнотом, где будем программировать на c#, и таймером ...

Всё более менее значимое рождается на стыке технологий. Не достаточно обладать знаниями только в одной области, чтобы перестать быть винтиком в большом механизме разработки ПО. Если вы хотите сделать что-то, что заметят, и что сможет повторить не каждый, то самый верный путь – комбинировать подходы из разных областей знаний, и чем неожиданнее, тем может получиться удачнее. Или наоборот… 

 

Секси # 
 

 

Знакомство со всем новым хорошо начинать под чьим-то доминирующим руководством. Мне с quick start помогла моя замечательная коллега, которая знакома с Microsoft Visual C# достаточно хорошо. Пара часов приватного программирования – и я уже опытный. Скажу сразу: первое знакомство оставило самые приятные впечатления. С# оказался доступным, приятным, необычным, волнующим, экстравагантным, э… языком программирования.

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

Для закрепления материала я нашел заказик на c# для какого-то московского ночного клуба. Это дало необходимую практику, потому что учиться чему-то лучше тогда, когда это кто-то спонсирует, чего и всем желаю...

 

Cтарт #

 

Я вспоминаю, как много раз откладывал изучение нового языка и платформы, потому что их тутор оказывался слишком уж правильным и полным. А хочется, прочитав пару страниц, все понять и начать что-то писать. Поэтому, я не буду строго придерживаться установленных определений, я даже не гарантирую, что мое изложение материала правильное. Но я гарантирую, что, прочитав все до конца, вы напишите свою первую программу на C#, причем, в обычном блокноте, и не просто программу, а полнофункциональный com-сервер, который сможете затем запустить из под 1С…

 

И так, для работы нам потребуются:

  1. Блокнот. Т.е., программа NotePad, кто еще не понял (кто сейчас задумался, где её взять – ставим минус к этой статье!)
  2. .Net Framework 2.0 или выше (в состав его уже входит компилятор c#)

Обычно фреймворк тот или иной у большинства юзеров на компьютере уже имеется, поэтому ничего устанавливать не придется. Для софт меньшинств – ссылка: 

Скачать .NET Framework 3.5

 

C #

 

Для начала работы с C# про него нужно знать несколько фактов:

1. Это объектно-ориентированный язык, а значит, объект и станет главным понятием при программировании на нем. Иными словами, вся программа – это определение какого-то объекта, в состав которого входят другие объекты, в состав которых входят третьи, и т.д.

Выглядит это так:

 

namespace Work
{
   class Program
   {
      …
      class MyClass1
      {
         …
      }
      …
      class MyClass2
      {
         …
      }
      …
   }
}

 

2. C# - это просто еще один язык программирования, и без огромного набора объектов из библиотеки .Net Framework, которые можно очень легко подключать и использовать, C# был бы практически не интересен.

Для подключения чего-то из библиотек .Net мы просто добавляем в начало нашей программы определение пространства имен (namespase), где в .Net это что-то лежит:

using System;
using System.IO;
using Directory;
И т.д.

Конечно, нужно знать, где и что в библиотеках .Net лежит. Для этого пользуем справочники по >net Framework и свой накопленный в процессе опыт. 

Nubic #

 

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

А = 2012;

Когда мы определяем объект, то привязываем к «переменной» еще и методы, как с данными, что в ней хранятся, работать.

А.УстановитьГод(2012);

Т.е., объект – это логически оправданное объединение данных (кучи переменных, или полей, или еще говорят - свойств) и методов работы с ними (при этом, все свойства объекта по определению видны в его методах).

 

Hello, world #

 

И так, у нас C# есть, блокнот есть, с объектами мы определились, пора уже что-нибудь написать…

Мы будем использовать вывод информации в консоль (т.е., не в windows-окно). Объект Console, связанный с таким выводом на экран, находится в библиотеках .Net в пространстве имен System. Т.е., первая строка нашей программы должна сделать доступным это пространство имен. И, собственно, нам потребуется только один метод объекта Console, а именно Write().

using System;
namespace Work
{
    public class Program
    {
       static void Main() // основная рабочая функция
       {
          Console.Write("Hello, world!"); // Пишем
          Console.ReadLine(); // Ждем нажатия Enter
       }
    }
}

 

 

Это должно у нас получиться в блокноте. Сохраняем в myprogram.cs. Компилируем с помощью компилятора c#

csc.exe myprogram.cs

Если не запустилось, то ищем csc.exe. Обычно оно лежит в C:\WINDOWS\Microsoft.NET\Framework\ v3.5\ Для простоты можно скопировать наш файл туда и там выполнить компиляцию. (Увернулся от летящего помидора…)

Запускаем в режиме эмуляции DOS. Радуемся жизни.

 

Hello, class #

 

Все то же самое, но пробуем создать и использовать свой класс: 

 

using System;
namespace Work
{
    public class Program
    {
       static void Main() // основная рабочая функция
       {
          AClass A=new AClass(); // Создаем экземпляр своего класса
          A.Greeting("Олег"); // Обращаемся к его методу
       }

       private class AClass // Определяем наш класс
       {
          public void Greeting(string Name) // Определяем его метод Greeting
          {
             Console.Write("Hello,"+Name); // Пишем
             Console.ReadLine(); // Ждем нажатия Enter
          }
       }
    }
}
 
Hello, DLL #

 

DLL – это динамическая библиотека функций и объектов, которые можно использовать в других программах.

В нашей DLL мы определяем некий метод, который хотим использовать для суммирования двух чисел. При этом, результат хотим сохранить внутри нашего DLL, и когда нужно- восстановить.

 

using System;
using System.Runtime.InteropServices;

namespace Work
{
    public interface MyInterface // Интерфейс нашей библиотеки
    {
       int Summa(int a, int b); // В нашем распоряжении – два метода. Тут мы их просто опишем
       int Memory();
    }

    [ClassInterface(ClassInterfaceType.AutoDual)]
    public class Server: MyInterface // Класс – потомок интерфейса.

// Значит, он должен содержать методы, описанные в интерфейсе
    {
       int buf;

       public int Summa(int a, int b) // А тут мы определяем описанные в интерфейсе методы
       {
          int res=a+b;
          buf=res;
          return res;
       }

       public int Memory()
       {
          return buf;
       }

    }
}

 

 

Ничего сложного. Язык интуитивно понятен.

Правда, теперь команда компиляции будет несколько иной:

csc.exe \target:library myprogram.cs

Появилась myprogram.dll. Регистрируем ее в системном реестре.

regasm myprogram.dll /cosebase

Если кому интересно, что такое это регасм – отвечу: это нечто, что наш dll делает видимым для других программ. Кому такого объяснения мало – прыгаем сюда и читаем много всего о regasm


Hello, 1С #

 

На самом деле, мы только что создали свой первый com-сервер на c#. Осталось проверить, как он работает в 1С.

Открываем конфигуратор, создаем внешнюю обработку и по нажатию клавиши выполняем:

Объект=Новый COMОбъект(“Work.Server”);
Сообщить(Объект.Summa(2,3));
Сообщить(Объект.Memory());

Проверяем, пляшем.

 
Crypto 1С #

 

Практическое применение com-технологий одинэсник может найти, например, в защите своих авторских прав. Как в прошлом примере мы передавали на вход нашего метода «Summa» числа, так я могу, например, передать объект «Запрос», инициализировать и выполнить его внутри dll, потом стереть текст запроса и возвратить только результат.

Таким образом, пользователь не увидит, что делает мой запрос, и без моей dll программа работать не будет. Осталось добавить некий подсчет числа запусков, или контроль даты запуска, и вот вам защита триал-версии!

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

Этот метод защиты ООО «О-Планет» давно и успешно использует в наших коммерческих решениях под «восьмерку», и при желании мы готовы бесплатно поделиться нашими наработками. ;)

 

Сцуко #

 

Поражает то, что с каждым разом видишь все больше и больше заказов сделать что-то на .Net с помощью VC#. Кажется, мелкомягкие на этот раз постарались: платформа получилась для разработчика проще, чем конфигуратор 1С, намного проще, чем Delphi а с учетом того, что это все-таки и С, и полноценное ООП – еще и продвинутее их обоих. К тому же, имеется бесплатные полнофункциональные версии ПО. А значит, и стоимость конечного продукта не зависит от числа приобретенных платформ, что очень радует.

На месте разрабов 1С я бы версию 1С:Предприятие 9 сделал ни как отдельную платформу, а как библиотеку классов для Microsoft Visual C#. Не 1С, так кто-то другой однажды такое сделает, и у 1С определенно настанут сложные времена…

 

См. также

Метод Дугласа-Пойкера для эффективного хранения метрик

Математика и алгоритмы Платформа 1C v8.2 Конфигурации 1cv8 Россия Абонемент ($m)

На написание данной работы меня вдохновила работа @glassman «Переход на ClickHouse для анализа метрик». Автор анализирует большой объем данных, много миллионов строк, и убедительно доказывает, что ClickHouse справляется лучше PostgreSQL. Я же покажу как можно сократить объем данных в 49.9 раз при этом: 1. Сохранить значения локальных экстремумов 2. Отклонения от реальных значений имеют наперед заданную допустимую погрешность.

1 стартмани

30.01.2024    1886    stopa85    12    

34

Алгоритм симплекс-метода для решения задачи раскроя

Математика и алгоритмы Бесплатно (free)

Разработка алгоритма, построенного на модели симплекс-метода, для нахождения оптимального раскроя.

19.10.2023    4687    user1959478    50    

34

Регулярные выражения на 1С

Математика и алгоритмы Инструментарий разработчика Платформа 1С v8.3 Мобильная платформа Россия Абонемент ($m)

Что ж... лучше поздно, чем никогда. Подсистема 1С для работы с регулярными выражениями: разбор выражения, проверка на соответствие шаблону, поиск вхождений в тексте.

1 стартмани

09.06.2023    7686    4    SpaceOfMyHead    17    

56

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

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

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

10 стартмани

16.06.2022    10515    82    ZhokhovM    12    

41

Модель распределения суммы по базе

Математика и алгоритмы Платформа 1С v8.3 Россия Абонемент ($m)

Обычно под распределением понимают определение сумм пропорционально коэффициентам. Предлагаю включить сюда также распределение по порядку (FIFO, LIFO) и повысить уровень размерности до 2-х. 1-ое означает, что распределение может быть не только пропорциональным, но и по порядку, а 2-ое - это вариант реализации матричного распределения: по строкам и столбцам. Возможно вас заинтересует также необычное решение этой задачи через создание DSL на базе реализации текучего интерфейса

1 стартмани

21.03.2022    7952    7    kalyaka    11    

44

Изменения формата файлов конфигурации (CF) в 8.3.16

Математика и алгоритмы Платформа 1С v8.3 Бесплатно (free)

Дополнение по формату файлов конфигурации (*.cf) в версии 8.3.16.

16.12.2021    4565    fishca    13    

36

Интересная задача на Yandex cup 2021

Математика и алгоритмы Бесплатно (free)

Мое решение задачи на Yandex cup 2021 (frontend). Лабиринт. JavaScript.

12.10.2021    8956    John_d    73    

46
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
71. agulaev 33 27.05.12 23:34 Сейчас в теме
(70) vladen, Все работает! (проверь пути, кавычки и слеши)
Автору - Зачет! Познавательно.
+
72. kmar 28.05.12 04:27 Сейчас в теме
Интереснейшая статья, почитать можно.
+
90. fixin 4253 29.05.12 11:03 Сейчас в теме
Предлагаю переместиться с нашим интересным холиваром сюда: http://forum.infostart.ru/forum1/topic62249/
MaxDavid; +1
102. пользователь 05.06.12 13:13
Сообщение было скрыто модератором.
...
103. ValeriVP 1308 06.06.12 16:20 Сейчас в теме
кто о чем, а лысый о расческе :)

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

...между делом ... кто-то приз обещал...

я решил описать, как НЕ СЛЕДУЕТ защищать конфигурации. Тут про это есть несколько роликов: http://www.1c-zk2.ru/articles/vskrytie-zasity-konfiguracij-1s


Хотя вообще методика использования разных инструментов в 1С лично для меня очень интересна - это делает возможности 1С практически не ограниченными
fishca; +1
104. O-Planet 6432 06.06.12 23:38 Сейчас в теме
(103) Приз отправлен.

Но поскольку метод взлома не указан, то это все ниачом. Я предложил взломать ЭКСПЕРИМЕНТАЛЬНУЮ версию, которая только отлаживается, ни где официально не презентавалась. Мне и нужно было, чтобы кто-то протестировал. Такое было и для 7.7. Первоначально там присутствовала досадная недоработка: метод, возвращающий код функции использовал тот же алгоритм шифрования, что и метод, возвращающий строку. В результате, достаточно было просто переставить названия методов, чтобы получить код функции. В процессе обсуждения и отладки это все вычистили.

Твой взлом был бы зачетным, если бы ты опроверг жизнеспособность самого подхода. Но есть огромная вероятность, что ты просто воспользовался недостатками текущей реализации, которые легко исправить.
+
105. ValeriVP 1308 07.06.12 11:12 Сейчас в теме
(104) Я предложил тебе описание метода взлома и решение проблем защиты своих решений раз и на всегда. И совсем не дорого. Ты отказался.
Про досадные недоработки - в данном случае ненадежна сама идея защиты. Я уже рассматривал эту идею в свой статье И ещё несколько слов о защите разработок... (п.5).

С учетом особенностей платформы, используя данную технологию, и внеся изменения в систему защиты, можно только лишь в несколько раз замедлить процесс (т.е. например с 20мин до 60мин). Но не более.
25мин - текущее время на анализ и взлом - см. время в постах (45)O-Planet 22.05.12 14:06 и (47)Изменено: Rebelx - 22.05.12 14:30. Это время включает скачивание конфы по 3G, разворачивание, анализ, задавание вопросов про активацию, и получение результата - итого 24мин.
+
106. O-Planet 6432 07.06.12 11:50 Сейчас в теме
(105) Где описание метода взлома? Если бы оно было, то и вопросов никаких не было. Есть у меня Golden Key Prototype, выложенный здесь. Вот там привели описание метода взлома, и я тему оставил, потому что согласен, что тот вариант - тупиковый. В данном случае, твои слова - это просто слова, не подтвержденные ни чем. Я, в качестве аргумента, что метод рабочий, могу сослаться на Golden Key 7.7, который использует аналогичный подход, но взломать его не получилось пока ни у кого. А то, что ломали, как минимум, трое, у меня информация есть.
+
107. ValeriVP 1308 07.06.12 12:43 Сейчас в теме
(106) Я не буду выкладывать в общий доступ описание алгоритмов взлома. Но в данном случае он очень прост. Я готов дать его тебе как бонус к WA:ЗК2.
Поверь, твой протип гораздо надежнее - там надо больше времени на трансляцию html в 1С.

Если хочешь, можешь объявить конкурс по взлому Golden Key 7.7, но на большую сумму - я потрачу больше времени. Но в успехе я уверен примерно на 75%. Опишишь принципы защиты - я наверное соглашусь даже на пари - если там не используется прямое обращение к функциям dll 1C 7.7.
+
108. O-Planet 6432 07.06.12 12:52 Сейчас в теме
Я, как автор, разрешаю выложить механизм взлома в общий доступ. Тебе это, кстати, будет очень выгодно: у меня не останется защиты для моих разработок, и для меня самым логичным будет приобрести твое решение. Это же касается и 7.7 Ты ведь заинтересован в продвижении своего решения? По поводу 7.7 - там как раз используется прямое обращение к функциям dll ;)
+
109. ValeriVP 1308 07.06.12 13:13 Сейчас в теме
(108) Я не буду выкладывать в общий доступ описание алгоритмов взлома. Тем более, что GoldenKey не единственная реализация данной технологии защиты - см. И ещё несколько слов о защите разработок... (п.5) - я там GoldenKey тоже посчитал.
+
110. O-Planet 6432 07.06.12 13:16 Сейчас в теме
Таким образом, я предполагаю, что общей технологии взлома просто нет.
+
111. ValeriVP 1308 07.06.12 13:36 Сейчас в теме
(110) Есть общая технология взлома для этой технологии защиты.

Т.е. технологию защиты можно описать так:
Выполнение неизвестных запросов внутри внешнего объекта. Задача взлома - получить текст запроса.

При этом конкретная реализация совершенно не важна. От реализации может зависить только время анализа, но не общая идея взлома. Вероятность успеха - 99% при времени анализа до 4ч.
rustork; mmj14; +2
116. mmj14 24 11.06.12 18:54 Сейчас в теме
(111) Спасибо, за подсказку, кажется, понял как производится сиё действо. :) На прямой вопрос вы бы ведь не ответили.
+
112. yamdj 08.06.12 18:32 Сейчас в теме
а как это все вяжется с 1С?
+
113. AlexO 135 10.06.12 16:09 Сейчас в теме
(112) yamdj,
а как это все вяжется с 1С?

да никак :)
ребята развлекаются.
У одного много московских денег, у другого - времени. Вот и договорились :)
+
114. ValeriVP 1308 10.06.12 17:21 Сейчас в теме
(113) вот я только не понял, у кого чего много...
+
115. AlexO 135 10.06.12 18:06 Сейчас в теме
(114) Rebelx,
а, т.е. у вас - и того, и другого? :)
+
117. Archikg 13.06.12 08:27 Сейчас в теме
спасибо за сие описание работы # с 1С, очень искал подобную инфу
по теме: насколько актуальна технология защиты закрытия модуля? я как-то писал модуль из набора математических алгоритмов, чтобы получить конечный код(пароль) для разовой активации конфигурации, сам текст модуля делал максимально запутанным и нечитабельным, а модуль закрыл, так вот интересна криптостойкость подобной выдумалки
+
119. EmpireSer 06.08.12 10:47 Сейчас в теме
Прошу прощения, но я не смог осилить столько комментариев...

Я лично против концептуальной разработки на C# для 1С. Т.е. разрабатывать коммерческие проекты с использованием любого языка из набора .NET - будет плохо для проекта:
1. Отсутствие кросплатформенности. Учитывая, что 1С при развитии так же стремиться мигрироваться на все ОС, игнорировать этот факт - плохо. Конечно можно какие-то плагины для 1С писать на разных языках программирования, но это будет черевато увеличением количества ошибок.
2. C#, VB.NET, F#, управляемый С++ - в них очень легко проанализировать Ваш код, пропатчить его. Даже обусфактором не сильно спасают положение. Единственный возможным способом защитить своё приложение на С# есть его преобразование на не управляемый код.
Хотя это тоже защита с "натяжкой", т.к. это "нависная" защита. С тем же Delphi можно любую нависную защиту усилить собственной.
+
122. O-Planet 6432 12.09.12 03:57 Сейчас в теме
(119) А если "код" - на сервере, а приложение - в окне браузера?
+
123. EmpireSer 13.09.12 09:46 Сейчас в теме
(122) O-Planet
Т.е. гоняем много лишних данных только для защиты? А что будет мешать просмотреть Ваше приложение на клиенте и его пропатчить?
А защита кода путём его размещения на сервере - универсальный метод и от используемого языка программирования не зависит.

А Вы пишете "... к защите конфигураций за 1 минуту, а тут "А если "код" - на сервере..." - тогда при чём тут заморочки с C#?
Если мы говорим только про удобство работы с разными визуально/невизуальными компонентами C# - то это удобство для программиста и не больше того.
Тут тогда можно сказать, что "Защита конфигурации - это полный переход на управляемые формы и вся работа с БД должна быть только в методах на сервере. От клиента и клиенту - только данные". Всё будет на сервере, а сервер можно защитить (в априори).

А если работать с NET платформой, то можно это делать и из языка 1С через 1С.Net:Предприятие - подключите .Net Framework к 1C через Elisy .Net Bridge

P.S. От этого COM уже просто тошнит... Ведь не зря сами Microsoft его "задвинули" и теперь во всю хвалят WCF.
+
120. v.a.ryag 37 11.09.12 21:28 Сейчас в теме
Интересно излагаете, много ваших статеек почитал)
+
121. O-Planet 6432 12.09.12 03:54 Сейчас в теме
(120) Пишу, когда что-то волнует, или заинтересовало. Значит, не меня одного.
+
124. tango 540 13.09.12 10:18 Сейчас в теме
(0)

На месте разрабов 1С я бы

:)

версию 1С:Предприятие 9 сделал ни как отдельную платформу, а как библиотеку классов для Microsoft Visual C#.


продавал бы - как?
+
125. chingiz001 26.09.12 22:41 Сейчас в теме
C:\WINDOWS\Microsoft.NET\Framework\ v3.5\csc.exe нашел. Не очень понял, как с его помощью скопмилировать myprogram.cs
+
131. rustork 24.02.13 04:00 Сейчас в теме
(125) chingiz001,
Два клика левой кнопкой мыши на myprogram.cs - открыть с помощью... - указать C:\WINDOWS\Microsoft.NET\Framework\ v3.5\csc.exe - В папке с myprogram.cs появится myprogram.exe
+
126. wunderland 201 01.10.12 11:44 Сейчас в теме
нормально так, коротко и по делу - однозначно "+"
+
127. maratimus 22 05.10.12 12:58 Сейчас в теме
Считаю, что если и формировать текст запроса во внешней dll, выполнять и очищать его после выполнения, то сам текст запрос можно отловить в трайсе слуля(SQL trace), а потом переформатировать в формат 1С или напрямую посылать запрос к базе данных из 1С, вывод такая защита только усложняет взлом, но не обеспечивает 100% защиты.
Для 100% защиты рекомендую использовать аппаратные ключи в которые записаны части ключевых фунций без возможности сканирования аппаратного средства(микроконтроллеры AVR поддерживают такую технологию).
Но в целом статья понравилась, можно писать свои функции которые невозможно реализовать с помощью 1С (например sleep(timeinms)).
+
128. vladen 83 28.11.12 12:27 Сейчас в теме
кто использует ВизуалСтудио то в свойствах основного файла проекта проследите что бы была строка [assembly: ComVisible(true)] (у меня по умолчанию false поставило).

Автору и милой девушке большое спасибо )
+
129. gavrikprog 117 23.02.13 18:37 Сейчас в теме
130. gavrikprog 117 23.02.13 18:53 Сейчас в теме
Раз уж на это сподобились, напишите как Native Api сделать.
А то у 1С только на c++
+
132. iliabvf 11.01.14 02:18 Сейчас в теме
Спасибо автору за пример, все работает.
Можно сделать не плохую защиту если совместить этот метод + обфускация + ключ защиты.
+
133. Garykom 16 17.07.15 01:16 Сейчас в теме
Мда уж...
защищать с помощью внешней проги (защищенной Themida), выполняющей запросы (текст запроса по id) к 1C через COM
когда сама 1С никаким образом не защищена от перехвата API-вызовов...
да и сама Themida снимается при желании...
+
134. rpgshnik 3645 06.03.17 10:55 Сейчас в теме
Оставьте свое сообщение