Кража, как стимул для творчества

Делись идеей, получай поддержку и критику!

Кража, как стимул для творчества

Postby ESeid on 13 Dec 2013, 01:43

Что общего у программиста LV и программистов Data Base, C#, Perl и даже Web? Я не говорю о склочности характера – это тоже не обязательноый признак профессионала. А вот что у нас всех общее – все мы не любим, когда у нас крадут наши коды. Может, если нас попросить – мы и сами их подарим, но красть у нас?!! Сие есть грех непрощаемый. Однако, как только наша программа впервые была продана – сама ли, или в составе программно-технического комплекса – то есть, когда она стала ТОВАРОМ, вопрос о защите ее от кражи встал в полный рост.
Мой первый "товарный" комплекс был продан в Китай, причем – еще на стадии альфа-тестирования, и вопрос о его защите был более, чем актуальным, исходя из опыта моих товарищей. Понятно, если бы наши аппараты были так же популярны, как Айподы, то и защиту пришлось бы поручить крутым и очень дорогим прфессионалам. Но мы работаем на довольно узком поле биомедицинских исследований, и даже китайский дилер не брался продавать более 100 наших аппаратов в год при их цене в 30,000$. Посему, узнав цену профессионалов, мы посовещались и решили вопрос защиты продукта поручить... Мне. А что? Программу написал, так неужто не защитишь дитя родное? А раз писал на LV, то и естественное решение – защищать на ней же. На этом закончим преамбулу и перейдем к самому процессу.
Итак, мы продали комплекс Заказчику. Один! И для нас идеальное решение – привязать этот комплекс именно к тому компьютеру, на который он и будет установлен. В одном экземпляре, с правом бэкапирования, но без возможности переноса на другой комп. В принципе, можно «привязать» комплекс к серийному номеру Винды, но это решение очевидно и потому будет нам неинтересно. А, так как наш комплекс имеет в своем составе USB- камеру, то и привяжемся мы к физическому номеру устройства, кое стоит в компе.
Но есть и еще один тонкий момент. Комплекс наш, как это принято в био-меде, может быть дан Заказчику или для бесплатного использования в течение 2-3 недель, или вообще отдан в лизинг, скажем, на год... Значит, дожен быть и контроль времени использования.
Ну, и последнее. Относясь к китайским хакерам с уважением, мы понимаем: наша тестовая программа должна не только быть замаскированной, но и не совершать активных действий – если обращаться к неким файлам, то ничего не писать и не менять. Просто открыл-прочел-закрыл, и никаких следов не оставил. А та программа, что эти файлы пишет, останется только у нас. Итак, пишем две программы: шифровальщик – у нас и дешифровальщик – у клиента.

Шифровальщик.
Так как моя LV не понимает по-русски, пояснения к фото буду давать здесь. Блоки обозначены номерами в желтый прямоугольниках.
1. Находим таблицу Windows IP Configuration нашей системы. Не знаю, как в Win 8, но и в XP, и в 7 в ней есть Physical Address, который выражается 7-ю байтами через тире. Вот его мы и возьмем, и превратим в целое 64-разрядное число . У нас есть шифруемое.
2. Возьмем абсолютный адрес нашей программы, включающий имя файла, добавим к ней пару ритуальных слов «All rights reserved» – для солидности, и также превратим ее в аналогичное число. У нас есть ключ шифрования.
3. Взяв интересный инструмент «Rotate», преобразуем шифруемое с помощью ключа.
4. Теперь вычислим время до конца нашей лицензии, задав «Lisense Period» в днях. И эту число превратим в нечто неудобьсказуемое, но уже путем смены мест частей числа. Собрав оба числа вместе, запишем их в наш секретный файл ключа, который мы не только замаскируем расширением под, скажем, библиотеку .dll, но и разместим в каком-нибудь укромном каталоге нашей LV. Итак, первый этап – шифрование – закончен.
Attachments
Шифратор.jpg
ESeid
assistant
assistant
 
Posts: 149
Joined: 30 Mar 2011, 22:41
Medals: 1
Автор (1)
LabVIEW Version: 8.2-2013
Karma: 34

Re: Кража, как стимул для творчества.

Postby ESeid on 13 Dec 2013, 01:51

Дешифровальщик.
Программа очень похожа на шифровальщик, и это естественно. То есть, 1, 2 и 3 блоки просто совпадают.
Различие начинается в 4 блоке, где мы из нашего секретного файла ключа читаем составной ключ, делим его в 5 блоке на ключ «железа» и лицензионный срок, и в 6 блоке сравниваем этот срок с текущей датой. Итак, у нас возможны несколько вариантов событий:
1. IP совпал, срок лицензии не превышен – никаких проблем, работаем.
2. IP не совпал – выдаем сообщение: «Valid license not found. Please, contact sales representative.» и грубо закрываем программу.
3. IP совпал, но превышен срок лицензии – выдаем сообщение «License is expiried. Please, contact sales representative.» - и, опять же, закрываем программу.
Естественно, что Дешифровальщик, входящий в состав программы, находящейся у Клиента, должен быть оформлен в виде отдельного VI, закрытого паролем. Способы искажения номеров и дат приведены здесь для примера – пытливый ум может без проблем придумать гораздо более извращенные методы искажения, чем я. Но и этот метод оценен экспертами в полугодовую стойкость к взлому, и это совсем неплохо и позволяет надеяться, что даже китайцы поймут, что дешевле его купить, чем сломать....
Ну, а такие вкусности, как место расположения секретного файла, да еще один файл с путем доступа к нему, да еще какие-нибудь изыски - это оставлю на фантазию каждого автора.
Естественно, все понимают, что я привел не законченные VI, а фрагменты кода. Потому как у каждого - свои секреты... :wink:
Attachments
Дешифратор.jpg
ESeid
assistant
assistant
 
Posts: 149
Joined: 30 Mar 2011, 22:41
Medals: 1
Автор (1)
LabVIEW Version: 8.2-2013
Karma: 34

Re: Кража, как стимул для творчества.

Postby Pavel Krivozubov on 13 Dec 2013, 08:58

Класс, а можно выложить сами VI-айки?
User avatar
Pavel Krivozubov
professor
professor
 
Posts: 4385
Joined: 07 Feb 2008, 16:39
Location: г. Электросталь
Medals: 3
Activity (2) Bronze (1)
LabVIEW Version: 7.0 - 2013
Karma: 218
hardware I/O PDA VIP vision bloggers internet teachers students freelance

Re: Кража, как стимул для творчества.

Postby Borjomy_1 on 13 Dec 2013, 09:06

Момент номер раз: когда создается исполняемый exe файл (наверняка вы не в исходниках собираетесь программное обеспечение на изделие отдавать), все диаграммы из него по умолчанию удаляются, поэтому пароль на vi бесмысленен. Если в исходниках - тем более, ибо легко взламывается.
Момент номер два: уверен, при необходимости можно в exe файле заменить vi на свою собственную. Ушлые товарищи просто меняют проблеммную VI и в путь.

Отсюда следует вывод: систему верификации лицензии надо делать в VI, который обеспечивает основной алгоритм. Мое предложение хранить отдельно файл лицензии, который зашифрован каким-нибудь стандартным симметричным или ассиметричным алгоритмом. В файле лицензии хранить информацию о IP и прочих уникальных идентификаторах. При запуске VI разбирать файл лицензии (желательно не в структуру класть, а динамически, через case). И динамически определять совпадение ожидаемого. По результатам разрешать работу системы выдачи результатов алгоритма или разрешать работу.

Если очень хочется, файл лицензии цеплять к какому-нибудь исполняемому или служебному файлу, который и так грузится при запуске приложения, с тем, чтобы через тот-же filemon его открытие не вызывало подозрения. По хэшу определенного фрагмента хвоста файла проверять наличие "добавки" и вырезать ее.

IP тоже, кстати, не панацея. Берется вторая сетевая карточка, первая настраивается на известный адрес, а со второй работают. Отрицательный момент: система становится неработоспособной при включенном DHCP.
Borjomy_1
expert
expert
 
Posts: 1833
Joined: 28 Jun 2012, 09:32
Location: город семи холмов
Medals: 3
Activity (1) Professionalism (1) Silver (1)
LabVIEW Version: 4-8.6,9-14
Karma: 319
VIP

Re: Кража, как стимул для творчества.

Postby ESeid on 13 Dec 2013, 10:28

Borjomy_1, предложенные мной решения - только стимул к творчеству, а конкретное решение зависит только от размера паранойи разработчика. :wink: Предлагаемый вами вариант наверняка не хуже, однако мой прошел "проверку временем": продавец молчал почти 8 месяцев после получения, прежде чем попросил прислать еще комплексы. Надо понимать, он делал именно "проверку на взлом", ритуальную для Китая, :wink: и только, убедившись в ее бесперспективности, решил, что покупать будет дешевле, чем воровать. :wink:
Я, к сожалению, не могу выложить сюда полные, рабочие, VI, потому что они, как вы справедливо заметили, выполняют еще и целый ряд других функций - именно для того, чтобы их исключение или замена сделали комплекс неработоспсобным. Но присоединяю нарисованные коды - они сами по себе вполне работоспособны.
Attachments
Shifr.vi
(20.7 KiB) Downloaded 146 times
Deshifr.vi
(24.87 KiB) Downloaded 116 times
ESeid
assistant
assistant
 
Posts: 149
Joined: 30 Mar 2011, 22:41
Medals: 1
Автор (1)
LabVIEW Version: 8.2-2013
Karma: 34

Re: Кража, как стимул для творчества.

Postby AndreyDmitriev on 13 Dec 2013, 14:11

Коллега ESeid, я как обычно со здоровой критикой.

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

По сути:
Вы, как мне кажется, слегка путаете понятия IP адрес и MAC адрес. То, что используете вы - именно МАС. Недостатков тут два - во-первых, после выхода из строя адаптера программа станет неработоспособной, и заказчику придётся обратиться к вам за новой лицензией, а во-вторых, он меняется на раз (TMAC).
Временное ограничение, понятное дело, обходится простым отматыванием часов назад (тем паче, что если проверка произходит только при запуске, то после запуска можно вернуть часы взад и всё продолжит работу). Наверняка есть программы, автоматизирующие этот процесс, просто искать лень. Чуть покопавшись, можно изменить ваш файл лицензии так, что программа всегда будет запускаться - перестановка двух слов - это совсем уж примитивно.
"Шифровка" с Rotate тоже сделана "на коленке" - обычно в таких случаях используется стандартный алгоритм хеширования, скажем тот же MD5. К MAC адресу добавляется "соль", после чего считается хеш сумма, которая и хранится в файле.
"Прятать" файл лиценции в DLL - это вообще никуда не годится. DLL предназначен, как вы понимаете, не для этого. Если вы храните в файле лицензии хеш, то вам вообще прятать этот файл никуда не надо - даёте ему расширение .lic и кладёте его на самое видно видное место. Отследить, какие файлы читаются при запуске весьма несложно.

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

Вообще говоря сама LabVIEW защищена примерно таким образом - для компьютера генерируется уникальный ID (и там используются в том числе MAC адреса карт), затем из него и серийника генерится ключ, который вводится в License Manager, а лицензия сохраняется в *.lic файл. Мы ставим системы, в составе которых есть IMAQ Vision, рантайм которого требует как раз такой лицензии - и это добавляет изрядную головную боль отделу сервиса, когда после замены компонентов у заказчика слетает эта лиценция (ну, впрочем, она там "интеллигентно" слетает - даёт семь дней триала).

А совсем уж по сути для такого способа защиты есть только один аргумент - если ПО находится в составе установки, где есть железо стоимостью тысячи долларов - то уже само это является некоей защитой (если программа без железа работать не может). Ну и если уж упираться в защиту - то почему было просто не воспользоваться "железным" ключом за тридцатник (что составляет 0.1 % от общей стоимости). Их дофига есть на рынке (я пользуюсь matrixx). Этот ключ совсем несложен в смысле интегрирования в свою программу. Приятным бонусом является то, что в него можно записывать свои данные, чем можно воспользоваться для конфигурирования программы для разных заказчиков. При заказе от сотни там вообще цена около 20 долларов, (это на фоне 30000 - вообще ничто). Купите пару горстей таких ключей и сделайте нормальную защиту. Тем самым вы отвяжете вашу программу от компьютера, и когда у заказчика компьютер выйдет из строя, он просто переставит ключ в новый и продолжит работу.

Где-то так.
User avatar
AndreyDmitriev
VIP
VIP
 
Posts: 1225
Joined: 03 Feb 2010, 00:42
Location: Германия
Medals: 6
Activity (1) Professionalism (1) Tutorials (1) Gold (1) Black (2)
LabVIEW Version: 6.1 - 2016
Karma: 433

Re: Кража, как стимул для творчества

Postby ESeid on 13 Dec 2013, 16:20

AndreyDmitriev, нет в вашем посте ни одного слова, с которым бы я не согласился. Просто дело в том, что и программу эту, и защиту, я делал в 2005-2007 году, когда "железка" защиты должна была нам обойтись в 250-300 долларов. Ну, и с тех пор не было стимула для его изменения: во-первых, потому, что пришло понимание:
если ПО находится в составе установки, где есть железо стоимостью тысячи долларов - то уже само это является некоей защитой (если программа без железа работать не может).

хотя программа вполне может работать и без железа: она ищет его при включении, и, если не находит, переходит к работе в режима обработки записанных файлов и анализа.
А во-вторых, новые версии программы я делаю быстрей, чем успевают сломать старые, :wink: и покупатель их получает бесплатно. У него есть интерес соблюдать лицензионные соглашения и не играться в "полицейских и воров".
Тем самым вы отвяжете вашу программу от компьютера, и когда у заказчика компьютер выйдет из строя, он просто переставит ключ в новый и продолжит работу.

А вот этого мы всемерно избегаем. Потому что комплекс весьма требователен к железу, и мы поставляем его уже с ноутом, в котором размещены и лицензии LabVIEW, и наша разработка, и куча сервисных программ. Надо еще учесть, что наши покупатели - это не программисты, все-таки, а биологи, и их способности к работе с программами, тем более - к установке-переустановке их, нами проверены неоднократно. И всегда с одним результатом.;)
ESeid
assistant
assistant
 
Posts: 149
Joined: 30 Mar 2011, 22:41
Medals: 1
Автор (1)
LabVIEW Version: 8.2-2013
Karma: 34

Да будет свет!

Postby ESeid on 19 Dec 2013, 12:29

Будем считать, что мы уже защитили свой проект от кражи. Дело осталось за малым – за, собственно, проектом. И начнем мы его, естественно, с Начала - с сотворения Света.
И сказал Бог: - Да будет Свет! – И стал свет.
Ни тебе Технического Задания, ни Технического Обоснования, ни рассчета мощности, ни самого кошмарного – ОБОСНОВАНИЯ ЦЕНЫ. Хорошо быть Богом…
Инженеру-разработчику медицинской техники все это значительно сложней. Нет, каждому, даже атеисту, понятно: чтобы что-то увидеть – нужно это “что-то” осветить. Не освЯтить, а освЕтить. И лучше – тем светом, который даст максимальную информацию об обьекте. Мы не будем сейчас выяснять вопрос, каким светом нужно освещать некий био-медицинский объект исследования: мы – не оптики. Пока. По-крайней мере, до тех пор, пока в Проекте есть деньги на оптика. Потому что, когда они кончатся, то оптиком придется стать каждому. Как и математиком, впрочем. И очень ярко вспомнятся институтские лекции по высшей математике и физической оптике, проведенные в увлекательном процессе ухаживания за подружкой по факультету, имя которой сейчас так сразу и не вспомнить… Впрочем, сейчас не об этом.
Итак, примем, как данность: чтобы получить некие данные – сигналы или изображения, нам нужно объект осветить. А для этого нужно включить источник света – лампу, лед или лазер. Еще неплохо было бы его направить на объект, но это пока – желание. А вот включение – возможность. Как вы понимаете, мы не будем рассматривать идею банального щелканья выключателем: мы инженеры-проектировщики на LabVIEW, или электрики из ПТУ? Особенно, если источников света у нас – от 2 до 8. Тащить пучок проводов от коробки с выключателями к настольному прибору – не эстетично, не практично и никто не купит. Мы и так уже связаны с нашим измерительным блоком кабелем USB, по которому общаемся с видео- или фото-камерой, или с неким измерительным блоком, который мы обсудим позже. Логично было бы по этому же кабелю и подать наши команды на блок освещения, да и другие команды – тоже.
Что же можно скомандовать осветителю? Выбор источника и приказ: “вкл/выкл”. Вопрос регулирования мощности мы пока тоже оставим за кадром, как и вопрос поворота источника света на некий угол. После некоего напряжения мысли возникает довольно очевидное решение, что выбор источника и команду на включение можно совместить. И это естественно: мы же выбираем его для ВКЛЮЧЕНИЯ, а не для групповой терапии. Ну, а раз включать мы будем несколько источников, да еще и данные туда-сюда гонять по кабелю, то вполне можем назвать наше гипотетическое устройство коммутатором.
Теперь добавим сюда требование малого размера и малого потребления, и, самое важное – МАЛОЙ ЦЕНЫ. Потому что каталоги полны самыми лучшими и самыми новыми устройствами, умеющими все, и даже обладающими почти человеческим интеллектом. Они хороши всем, кроме одного – ЦЕНЫ. А, если стоимость выключателя для люстры достигнет хотя бы 1% от стоимости Проекта – то в наличии этого самого интеллекта откажут нам, разработчикам… Итак, ТехЗадание и даже частичноТехОбоснование мы как-то более-менее сформулировали, теперь начнем решать эту задачу.
Исходя из всего сказаного, (а также того, что описываю я проект, созданный лет 7-8 назад), и был выбран модуль FT245BM - USB TO 8-BIT PARALLEL FIFO INTERFACE MODULE.
Лирическое отступление.
Я прошу прощения за будущее довольно частое использование английских слов, но, в свое оправдание, скажу только, что многих терминов я просто не знаю по-русски. И еще скажу, что английский язык, как это не печально для русско-язычных инженеров, есть и долго еще будет языком международного инженерного общения, как ранее латынь была языком научным. И знать его, английский, не нужно, а НЕОБХОДИМО. И мало где теперь срабатывает лукавая фраза: “Понимаю со словарем.” Увы, во всех иноземных странах существуют всего три градации знания языка: mother, fluent, no understand. И человек, претендующий на весьма высокое звание “инженер”, знать английский на уровне fluent просто обязан.

Вернемся к нашему модулю FT245BM. Управление им делится на часть аппаратную и прогреммную. Аппаратную часть мы сейчас особенно рассматривать не будем, иначе наша беседа превратится в диссертацию, а просто приведем схему реализации коммутатора на 3 источника света и камеру.
А вот программной частью займемся подробней.
Итак, что нужно, чтобы работать по порту USB с неким устройством?
1. Выбрать устройство.
2. Инициализировать его.
3. Подать команду на исполнение.
4. Закрыть усторйство.
Все это можно сделать различными VI, и иногда даже полезно их иметь. Но – не в нашем случае. Почему? Да потому, что, когда у нас не одно, а несколько однотипных устройств, да еще и работающих по очереди, нет ничего легче, как что-то упустить из этой последовательности, а уж забыть в конце закрыть устройство – сам Бог велел. Да и ситуацию аварийного, нештаного, отключения, нельзя упускать из виду. А, если учесть интересную особенность USB-устройств и портов: оставаться в том состоянии, в котором их оставили, то легко можно себе представить, как один не отключенный вовремя фонарик “подвесит” всю шину, и сбросить ее будет непросто: иногда приходится перегружать комп. Поэтому мы все пункты нашего меню работы с USB совместим в одном VI, и обеспечиваться их выполнение будет так и тогда, когда должно, а не когда мы об этом вспомнили. Это напоминает обед в столовой, где вы все блюда сразу установили на свой поднос, и нет нужды каждый раз бегать и стоять в очереди то за забытым салатом, то за невзятым компотом…
Итак, мы уже установили драйверы “D2XX”, желательно – последнюю версию, скачанную из инета, и можем написать свой VI.
На мой взгляд, в нем совершенно четко указаны все “этапы большого пути” по работе устройства, но, если есть вопросы, то готов ответить. Как написано, подача на вход комбинации “1” – включает белый LED (“W”), “2” - “R” (красный лазер) “4” - “IR”(инфракрасный лазер). Почему комбинации выбраны именно так? Да потому, что в некоторых случаях нам нужно подать СМЕШАННЫЙ СВЕТ. В VI легко увидеть избыточность структуры, и даже некоторые, вроде бы, совсем не нужные участки: скажем, непрерывный опрос статуса или выходные, никуда не подсоединяемые коннекторы… Конечно, приятно чувствовать себя умней разработчика, но мой совет: не надо спешить слишком оптимизировать все коды, что попались вам в руки. Потому что, когда вы начнете отладку только что построенного прибора, то никакая информация о состоянии не будет для вас лишней, особенно – в пошаговом режиме. А убрать после отладки уже ненужные “диагностические примочки” – что может быть проще?
И, совсем напоследок: в предложенной схеме оказалась небольшая, но принципиальная ошибка, которая была использована разработчиками в целях диагностики и подготовки прибора к работе. Желающие могут попытаться ее найти. :wink:
Attachments
FT245.jpg
Light FT245 SubVI.jpg
Light FT245 SubVI.vi
(17.81 KiB) Downloaded 119 times
ESeid
assistant
assistant
 
Posts: 149
Joined: 30 Mar 2011, 22:41
Medals: 1
Автор (1)
LabVIEW Version: 8.2-2013
Karma: 34


Return to Проекты

Who is online

Users browsing this forum: No registered users and 5 guests

cron