Код защита

Кража информации сотрудниками по УК РФ

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

Что делать, если у вас украли личные данные?

Личными данными человека являются:

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

Федеральный закон «О персональных данных» от 27.07.2006 г. № 152-ФЗ (далее — Закон № 152-ФЗ) обязывает всех, кто работает с чужими данными, спрашивать разрешение на это. Так, например, гражданину предлагают подписать согласие:

  • при трудоустройстве;
  • при взятии в банке кредита;
  • при прохождении медицинского осмотра;
  • при открытой регистрации на сайте в сети интернет и т.д.

Обратите внимание!

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

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

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

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

Куда обращаться?

При краже и использовании ваших персональных данных обращаться следует в Роскомнадзор. Это можно сделать:

  • направив заявление в электронной форме;
  • направив заявление почтой;
  • на личном приеме у руководителя (его зама) местного Управления Роскомнадзора.

Непосредственно хищениями данная структура не занимается, но проводит проверки исполнения требований Закона № 152-ФЗ, в том числе в части использования личной информации сторонними лицами.

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

Обратиться с заявлением о нарушении своих прав в рамках Закона № 152-ФЗ можно и в прокуратуру. Будет организована проверка, в которой, возможно, обяжут участвовать и Роскомнадзор. При выявленных нарушениях материалы дела будут переданы в суд.

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

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

От выявленного преступника потерпевшая сторона вправе потребовать возмещения ущерба (в том числе морального вреда). Для этого самостоятельно потребуется обратиться с исковым заявлением в суд.

Статья за кражу личных данных

Статья 24 Закона № 152-ФЗ указывает, что те, кто нарушил его нормы, несут наказание. За кражу в России установлена уголовная ответственность.

В ситуациях, когда дело касается хищения персональных данных, применяются нормы ст. 137 УК РФ, содержащей санкции за нарушение неприкосновенности частной жизни. Когда кража происходит путем взлома электронной почты, вскрытия почтовых конвертов с личной перепиской и т.д., применяется ст. 138 УК РФ.

Неправомерные действия лиц могут не содержать состава уголовного преступления, однако нарушать требования Закона № 152-ФЗ. Такие ситуации дают возможность утечки чужой личной информации, а потому тоже наказываются, но в рамках административных мер. Ответственность за нарушение порядка сбора, хранения, использования, распространения сведений предусматривает ст. 13.11 КоАП РФ.

Наказание

За незаконный сбор личной информации о частной жизни человека преступник может понести наказание в виде:

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

Если чужая частная информация собиралась преступником с использованием своего служебного положения, к нему может быть применено наказание в виде:

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

Получение чужих персональных данных путем нарушения тайны переписки может быть наказано:

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

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

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

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

  • на граждан — в размере от трехсот до пятисот рублей;
  • на должностных лиц — от пятисот до одной тысячи рублей;
  • на юридических лиц — от пяти тысяч до десяти тысяч рублей.

Как не стать жертвой кражи персональных данных?

Чтобы не стать жертвой воров, следует придерживаться некоторых правил:

  • никому не отдавать свой паспорт, иные документы, удостоверяющие личность;
  • не пересылать простыми почтовыми отправлениями важные документы, информацию;
  • чаще менять пароли к ящику электронной почты;
  • хранить важную информацию не в интернете или на домашнем компьютере, а, например, на флешке, диске.

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

Защищаем приложение, написанное на C#

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

К сожалению, дотнетовские программы, равно как джавовские, довольно-таки просто «вскрыть». Виной всему байт-код, позволяющий специальными программами легко дизассемблировать и воссоздать первоначальный код. Далеко ходить не нужно за примерами, так как даже VS поставляется с дизассемблером ILDasm.

Декомпилированный код

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

Методы защиты C# приложения

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

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

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

Исследование с помощью dotPeek

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

  • Декомпиляция сборок .NET версий в исходный код C# и IL-код

Для отображения декомпилированного кода dotPeek использует большинство функций, привычных пользователям Microsoft Visual Studio: открытие декомпилированных файлов в отдельных вкладках, подсветка синтаксиса, сворачивание блоков кода, нумерация строк и многое другое.

2) Преобразование и экспорт сборок .NET в проекты Microsoft Visual Studio

Если вы хотите не только исследовать сборку, но и внести в нее изменения, dotPeek позволит вам преобразовать и сохранить ее в проект Microsoft Visual Studio и, таким образом, продолжить работу уже с исходным кодом сборки.

Занятная тулза, не так ли? Но самое главное – dotPeek абсолютно бесплатный, в отличие от «дедушки» .NET Reflector, который раньше был едва ли не стандартом де-факто для декомпиляции дотнетовских приложений. Так как вам все равно нужно будет смотреть то, насколько хорошо вы защитили свое приложение, то dotPeek должен быть у вас всегда. Скачать его можно на сайте https://jetbrains.ru/products/dotpeek/

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

  • Как бы это банально не звучало, но для начала сделаем обфускацию приложения. Иными словами, мы максимально запутаем исходный код, но сохраним функциональность. Достаточно действенный способ, если бы не одно «но» — на публичные обфускаторы есть масса деобфускаторов. Кроме того, основная масса обфускаторов платные. Вы без труда найдете обзоры наиболее «распиаренных». Могу лишь сказать, что часто их функционал оставляет желать лучшего. Иногда после такой обфускации программа может даже перестать нормально работать, особенно, если вы прошлись по ней взломанным обфускатором. Конечно, Майкрософт в свои студии разработки вставляла бесплатный Dotfuscator Software Services.

Обладает обычными визардами

  • Вернее, он бесплатный только для личного использования, для бизнеса он стоит ну очень много убитых енотов. Он уже интегрирован в Visual Studio. Честно, помню недовольные отзывы о нем в плане неочевидности и прочего, но как по мне, пользоваться им достаточно просто. Да, есть хромые места, но идеальных обфускаторов, думаю вообще не существует. В любом случае, начните хотя бы с него. По крайней мере, у него есть также и защита от отладки. Для новичков он будет весьма и весьма кстати.

Еще один обфускатор, который лично мне нравится – это пресловутый ConfuserEx. Он опенсорсный и дает весьма сильную защиту. Например, можете увидеть то, как он «путает» код и не дает прочитать его с помощью еще одного исследователя ILSpy.

До обфускации

После

Скачать его можете на https://yck1509.github.io/ConfuserEx/. Тем не менее, его можно все же снять небезызвестным De4dot, при условии, что реверсер его правильно определит, имейте это в виду.

2 ) Крипторы и пакеры. На самом деле, хотя и дают сильную защиту, но большинство проектов попросту брошены или они стоят безумно больших денег. Поэтому на них я останавливаться не стану.

3) Новые студии разработки (начиная с 2015) меня больше радуют. Майкрософт разработала технологию .NET Native, позволяющую скомпилировать дотнетовское приложение в нативный код.

Вот так схематично все происходит

А вот этот момент весьма и весьма интересен, так как для реверсера предстанет весьма любопытный плюсовский код, «приправленный» автоматическим кодом AOT-компилятором .NET. Это очень усложнит задачу по взлому и реверсингу приложения. Фактически, я бы посоветовал его. Но проблема есть и у этого способа – все будет только работать на майкрософтовской платформе.

Резюме

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

C# приложения были изначально уязвимы для реверсинга. В этом плане, они не сильно далеко ушли даже от того же JS, хотя там вообще все очевидно. Обфускация запутает код и инструменты типа dotPeek или ILSpy. Но важно понимать, что все они обрасли дополнительными плагинами, которые позволяют определить защиту и всячески ее снять. Тем не менее, пренебрегать ими не стоит.

Если вы точно знаете, что приложение будет написано только для майкрософтовской платформы, я бы все-таки порекомендовал компилировать его в нативный код с помощью .NET Native.

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

Защита исходных текстов и двоичного кода

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

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

Противодействие изучению исходных текстов

Вообще говоря, открытость исходных текстов — понятие расплывчатое. Вопрос: «Является ли бинарная программа в 1 Kбайт более открытой, чем миллион строк исходников без адекватной инфраструктуры и документации?» В самом деле, мало иметь исходный текст — в нем еще предстоит разобраться. Достаточно удалить все или, по крайней мере, большую часть комментариев, дать переменным и функциям бессмысленные, ничего не говорящие имена, как в программе не разберется и сам автор. А наличие и полнота комментариев к исходному тексту в контракте, как правило, не оговаривается. Получается, что контракт может быть формально выполнен, а предоставленный заказчику исходный текст практически бесполезен. «Практически» не означает «полностью»: такой простой прием не позволит обеспечить абсолютную защиту.

Воспрепятствовать анализу можно отделением, абстрагированием алгоритма от языка реализации. Например, реализовать критичные для раскрытия компоненты на машине Тьюринга, а ее поддержку обеспечить на целевом языке. Уровней абстракции может быть несколько — чем их больше, тем труднее осуществлять анализ. Помимо машины Тьюринга для этой цели подходят стрелка Пирса, сети Петри и т.д. Такой подход дает превосходный результат, но требует глубоких математических знаний и значительных накладных расходов — программировать на машине Тьюринга намного сложнее, чем на ассемблере. Отдельный вопрос — эффективность полученной программы. Для многих проектов это неприемлемо, поэтому приходится использовать другие приемы.

Динамическое ветвление

Программу, состоящую из нескольких сотен тысяч строк, невозможно рассматривать как простую совокупность команд. На таком уровне детализации «за деревьями леса не видно». Сначала необходимо проанализировать взаимосвязь отдельных функций друг с другом, выделить интересующие фрагменты и лишь затем изучать реализацию самих функций. Чем выше степень дробления программы, тем труднее анализ. Элементарные функции, состоящие из десятка строк, сами по себе дают мало информации. Для формирования целостной картины необходимо рассмотреть вызывающий их код, поднимаясь по иерархии вызовов до тех пор, пока не удастся реконструировать весь алгоритм целиком или, по крайней мере, охватить его ключевой фрагмент. Чтобы построить дерево вызовов, нужно уметь отслеживать перекрестные ссылки в обоих направлениях: определять, какой функции передается управление данным вызовом, и, наоборот, находить все вызовы, передающие управление данной функции.

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

Здесь стоит сделать одну оговорку. Язык Си не позволяет объявить функцию, возвращающую указатель на функции — это объявление рекурсивное. Приходится объявлять функцию, возвращающую бестиповой указатель void *. Аналогично — если функция в ходе своей работы вызывает какие-то другие функции, лучше делать это не напрямую, а передавать указатели на вызываемые функции как аргументы. Такой подход не только препятствует анализу, но еще и увеличивает гибкость программы, облегчая повторное использование старого кода в новых проектах — при должной культуре программирования каждая функция представляет «вещь в себе» и не привязана ко всем остальным.

Контекстная зависимость

Рассмотрим теперь другой прием, когда алгоритм работы большинства функций зависит от флага — глобальной переменной в пределах одного модуля. Если флаги изменяются в зависимости от результата, возвращаемого функцией, автоматически возникает контекстная зависимость (не слишком сильная, но это лучше, чем ничего). Работа одной функции становится зависимой от других, вызванных до нее. Анализ одной, отдельно взятой функции, становится многовариантным. Чтобы определить, что конкретно она делает, необходимо знать значение флагов, а значит — иметь представление о том, какие функции выполнялись до этого и какие именно данные они обрабатывали.

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

Хуки

Хуки («крючья») — изящный, но ныне практически забытый прием программирования. Его суть заключается в совмещении нескольких разнотипных данных в одном аргументе. Например, если значение аргумента по модулю меньше 0x400000, функция считает его непосредственным значением, в противном случае — указателем на функцию, результат выполнения которой следует поставить на его место. Это увеличивает гибкость программы, но и затрудняет ее анализ, не позволяя быстро определить, происходит ли передача переменной по значению или по указателю. Указатели на переменную, в свою очередь, становятся неотличимы от указателей на функцию. Разумеется, отказ от строгой типизации может приводить к ошибкам, но вероятность их появления в тщательно продуманной программе невелика.

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

Существует еще множество других способов запутать того, кто пытается проанализировать исходный текст. Например, можно использовать совершенно корректные с точки зрения языка, но необычные конструкции, ставящие в тупик незнакомого с ними человека. Классический пример — перестановка индекса и имени массива в Си. С точки зрения языка, выражения «buff» и «666» абсолютно равнозначны, но всякий ли об этом помнит?

В той или иной степени эти, а также другие приемы используются в большинстве свободно распространяемых «открытых текстов». Последнее словосочетание заключено в кавычки для придания ему ироничного оттенка: одно лишь наличие исходного текста еще не обеспечивает открытости, — требуется, по меньшей мере, грамотно продуманная и качественно составленная документация, а еще лучше — опыт работы с этим текстом. Разобраться с исходными текстами редактора emacs или операционной системы Linux не намного проще, чем написать их «с нуля», — слишком уж скупы их разработчики на комментарии, а документация зачастую и вовсе отсутствует.

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

Противодействие анализу двоичного кода

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

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

Сколько бы уровней защиты не предусмотреть, один или миллион, программа может быть взломана — это только вопрос времени и затраченных усилий. Но в отсутствии действенных правовых регуляторов защиты интеллектуальной собственности разработчикам приходится больше полагаться на стойкость своей защиты, чем на закон. Бытует мнение, что если затраты на нейтрализацию защитного механизма будут не ниже стоимости легальной копии, ее никто не будет взламывать. Это неверно. Материальный стимул — не единственное, что движет хакером. Гораздо более сильной мотивацией оказывается интеллектуальная борьба с автором защиты, спортивный азарт, любопытство, повышение своего профессионализма, да и просто интересное времяпровождение. Многие молодые люди могут неделями корпеть над отладчиком, снимая защиту с программы стоимостью в несколько долларов, а то и вовсе распространяемой бесплатно (например, диспетчер файлов FAR для жителей России абсолютно бесплатен, но это не спасает его от взлома).

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

Гарантированно воспрепятствовать анализу кода позволяет только шифрование программы. Но сам процессор не может непосредственно исполнять зашифрованный код, поэтому перед передачей управления его необходимо расшифровать. Если ключ содержится внутри программы, стойкость такой защиты близка к нулю. Все, чего может добиться разработчик, — затруднить поиск и получение этого ключа, тем или иным способом препятствуя отладке и дизассемблированию программы. Другое дело, если ключ содержится вне программы. Тогда стойкость защиты определяется стойкостью используемого криптоалгоритма (конечно, при условии, что ключ перехватить невозможно). Опубликованы и детально описаны многие криптостойкие шифры, взлом которых заведомо недоступен рядовым злоумышленникам.

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

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

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

Алгоритм шифрования должен быть выбран так, чтобы обратная операция была невозможна. При этом установить, какое событие данный обработчик обрабатывает, можно только полным перебором. Для блокирования возможности перебора в язык была введена контекстная зависимость — генерация дополнительной серии ключей, учитывающих некоторое количество предыдущих событий. Это позволило устанавливать обработчики на любые последовательности действий пользователя, например, на открытие файла с именем «Мой файл», запись в него строки «Моя строка» и переименование его в «Не мой файл».

Очевидно, перебор комбинаций всех событий со всеми возможными аргументами займет бесконечное время, а восстановить исходный код программы, защищенной таким образом, удастся не раньше, чем все ее ветви хотя бы однократно получат управление. Однако частота вызова различных ветвей не одинакова, а у некоторых и вовсе очень мала. Например, можно установить на слово «сосна», введенное в текстовом редакторе, свой обработчик, выполняющий некоторые дополнительные проверки на целостность кода программы или на лицензионную чистоту используемого ПО. Взломщик не сможет быстро выяснить, до конца ли взломана программа или нет. Ему придется провести тщательное и кропотливое тестирование, но даже после этого он не будет в этом уверен.

Таким же точно образом осуществляется ограничение срока службы демонстрационных версий. Разумеется, обращаться к часам реального времени бесполезно, их очень легко перевести назад, вводя защиту в заблуждение. Гораздо надежнее опираться на даты открываемых файлов: даже если часы переведены, созданные другими пользователями файлы в большинстве случаев имеют правильное время. Но взломщик не сможет узнать ни алгоритм определения даты, ни саму дату окончания использования продукта. Впрочем, дату в принципе можно найти и полным перебором, но что это дает? Модификации кода воспрепятствовать очень легко: достаточно, чтобы длина зашифрованного текста была чувствительна к любым изменениям исходного. В этом случае взломщик не сможет подправить «нужный» байт в защитном обработчике и вновь зашифровать его. Придется расшифровывать и вносить изменения во все остальные обработчики (при условии, что они контролируют смещение, по которому расположены), а это невозможно, поскольку соответствующие им ключи заранее неизвестны.

Существенными недостатками предлагаемого решения являются низкая производительность и высокая сложность реализации. Если со сложностью реализации можно смириться, то скорость налагает серьезные ограничения на сферу применения. Впрочем, можно значительно оптимизировать алгоритм или оставить все критичные к быстродействию модули незашифрованными (или расшифровывать каждый обработчик только один раз). Интересно другое: действительно ли эта технология позволяет создавать принципиально неизучаемые приложения или в приведенные рассуждения вкралась ошибка?

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

Литература

Николай Безруков, «Разработка программ с открытыми исходниками как особый вид научных исследований»

ТРИ КЛЮЧА

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

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

Статьи за кражу компьютера, кражу программного обеспечения — какое наказание по УК РФ

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

Если лицо похитило компьютерное оборудование, то такое преступление будет квалифицироваться по ст. 158 УК РФ. В случае, если произошло хищение программного обеспечения, то в зависимости от совершенных виновным лицом действий такое деяние может классифицироваться следующим образом:

  • если лицо проникло в помещение, где находятся на хранении носители информации с программным обеспечением, применяется ст. 158 УК РФ — кража;
  • если виновное лицо приобрело за свои денежные средства либо иным образом получило доступ к программному обеспечению, а потом с помощью сети интернет либо иным способом распространило его для неограниченного круга лиц, то применяется ст. 146 УК РФ — нарушение авторских и смежных прав. Не имеет значения, желало ли лицо получить прибыль за свои действия или нет;
  • в случае, если виновное лицо получило доступ к программному обеспечению путем взлома компьютерных сетей, такие деяния могут быть квалифицированы по ст. 272 УК РФ — неправомерный доступ к компьютерной информации, либо по ст. 274 УК РФ — нарушение правил эксплуатации средств хранения, обработки или передачи компьютерной информации и информационно-телекоммуникационных сетей.

Кража компьютерного оборудования

Основным критерием, по которому происходит квалификация хищения компьютерного оборудования по разным частям ст. 158 УК РФ, является его стоимость:

  • при ущербе в 2500 до 5000 тысяч рублей преступление будет квалифицироваться по ч. 1 ст. 158 УК РФ. За него суд может назначить одно из нескольких наказаний:
    • штраф в размере до 80000 рублей или в размере заработной платы на период до 6 месяцев;
    • исправительные работы до 1 года;
    • ограничение свободы до двух лет;
    • принудительные работы до двух лет;
    • арест до 4-х месяцев;
    • лишение свободы до двух лет;
  • при стоимости похищенного от 5000 до 250000 рублей ущерб считается значительным. Такое деяние квалифицируется по ч. 2 ст. 158 УК РФ и предусматривает одно из следующих видов наказаний:
    • штраф до 200000 рублей или в размере зарплаты виновного лица за период до 18 месяцев;
    • обязательные работы до 480 часов;
    • исправительные работы до двух лет;
    • принудительные работы до пяти лет с ограничением свободы до одного года;
    • лишение свободы до пяти лет;
  • при крупном ущербе — от 250000 до 1000000 рублей — преступление будет квалифицировано по ч. 3 ст. 158 УК РФ. Предусмотрены такие виды наказания:
    • штраф в размере от 100000 до 500000 рублей либо в размере заработной платы виновного лица за период от одного года до трех лет;
    • принудительные работы до трех лет;
    • ограничение свободы до шести лет со штрафом в размере 80000 рублей либо без такового;
    • лишение свободы до 6 лет со штрафом в размере до восьмидесяти тысяч рублей или в размере заработной платы или иного дохода осужденного за период до шести месяцев либо без такового, с возможным ограничением свободы до полутора лет;
  • в том случае, если стоимость похищенного превысила 1000000 рублей, то ущерб считается особо крупным. Деяние квалифицируется по ч. 4 ст. 158 УК РФ. УК РФ предусматривает следующие виды наказаний:
    • лишение свободы до 10 лет со штрафом в размере до 1000000 рублей или в размере заработной платы осужденного за период до 5 лет;
    • ограничение свободы до двух лет либо без такового.

Если стоимость похищенного составляет менее 2500 тысяч рублей, то уголовная ответственность не наступает. В таком случае лицо привлекается к административной санкции по ст. 7.27 КоАП РФ за мелкое хищение.

Кроме того, на квалификацию преступления влияют следующие признаки:

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

Пиратское использование (кража) программного обеспечения

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

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

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

Ответственность за подобные деяния установлена в ст. 146 УК РФ.

Наказание может составлять:

  • в случае присвоения или плагиата компьютерной программы по ч. 1 ст. 146 УК РФ наказывается штрафом в размере до двухсот тысяч рублей или в размере заработной платы за период до восемнадцати месяцев, обязательными работами до четырехсот восьмидесяти часов, исправительными работами до одного года либо арестом на срок до шести месяцев;
  • если из-за нарушения авторского права правообладателю причинен ущерб в размере более 100000 рублей то за такое деяние предусмотрена уголовная ответственность в виде штрафа в размере до 200000 рублей либо в размере дохода осужденного за период до 18 месяцев, обязательные работы до четырехсот восьмидесяти часов, исправительные работы на срок до двух лет, принудительные работы до двух лет или лишение свободы на тот же срок.

Хакерство

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

  • штраф в размере до 200 тысяч рублей;
  • исправительные работы до одного года;
  • ограничение свободы до двух лет;
  • принудительные работы до двух лет;
  • лишение свободы до двух лет.

Если лицо руководствовалось корыстными мотивами, либо преступление причинило правообладателю значительный ущерб (более 100000 рублей), то такое деяние будет квалифицировано по ч. 2 ст. 272 УК РФ. Предусмотрены следующие виды санкций:

  • штраф в размере от 100 до 300 тысяч рублей или заработной платы осужденного на период от 12 до 24 месяцев;
  • ограничение свободы на срок до двух лет или исправительные работы на тот же срок;
  • лишение свободы до четырех лет.

Программные вирусы

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

Ответственность за создание подобных программ предусмотрена ст. 273 УК РФ.

Наказание напрямую зависит от последствий:

  • в обычном случае преступление будет квалифицировано по ч. 1 ст. 273 УК РФ, которая предусматривает наказание в виде ограничения свободы на срок до 4 лет, принудительные работы на срок до 4 лет, лишение свободы на тот же срок либо штраф в размере до 400 тысяч рублей;
  • если подобная программа создана группой лиц по предварительному сговору, в результате ее использования причинен крупный ущерб в размере более 100000 рублей, либо при создании лицо преследовало цель неправомерного получения прибыли, то ответственность за такое деяние наступает по ч. 2 ст. 273 УК РФ. Могут быть применены: лишение свободы на срок до 4 лет, принудительные работы на срок до пяти лет с лишением права занимать определенные должности, штраф от 100 до 200 тысяч рублей или в размере дохода осужденного за период от одного года до двух лет;
  • в случае наступления тяжких последствий от действия вредоносной программы к лицу может быть применено наказание в виде лишения свободы на срок до 7 лет.

Компьютерное мошенничество

В отличие от ряда зарубежных стран (США, Великобритания, Франция) в уголовном законодательстве РФ понятие компьютерного мошенничества не содержится. На практике под ним понимают совершение лицом действий, направленных на завладение денежными средствами потерпевшего путем обмана либо злоупотребления доверием.

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

На практике деяния, относимые к мошенничеству, совершенному с использованием компьютеров, в зависимости от характера квалифицируются по следующим статьям УК РФ:

  • мошенничество (ст. 159 УК РФ);
  • присвоение либо растрата чужого имущества (ст. 160 УК РФ);
  • причинение имущественного ущерба путем обмана или злоупотребления доверием (ст. 165 УК РФ);
  • неправомерный оборот средств (ст. 187 УК РФ).

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

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

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

Добавить комментарий

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