Как защитить код c
Перейти к содержимому

Как защитить код c

  • автор:

Защита от повторного включения заголовка

В проекте на C, код которого я недавно стал смотреть, используется защита от повторного включения заголовка:

#ifndef H_HEADER #define H_HEADER // Header itself #endif 

Для унаследованного кода (где все и так работает), это нормально. Но для новых исходников хотелось бы что-нибудь проще. Есть ли аналог/заменитель в C?

Отслеживать
задан 14 дек 2010 в 14:15
34.5k 27 27 золотых знаков 98 98 серебряных знаков 214 214 бронзовых знаков

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

В C есть специальная директива

#pragma once 

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

Отслеживать
ответ дан 17 дек 2010 в 10:46
34.5k 27 27 золотых знаков 98 98 серебряных знаков 214 214 бронзовых знаков

Насколько мне известно, #pragma once — это специфика Microsoft VC++, следовательно в Unix мире не может быть использована.

17 дек 2010 в 10:55

#pragma once не входит в стандарт C и не все компиляторы ее поддерживают; полностью портируемый код должен избегать ее. Тем не менее, GCC поддерживает эту директиву, поэтому и на Unix она доступна.

Рекомендации по безопасности для C++

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

Средства безопасности в Visual C++

Эти функции безопасности встроены в компилятор Microsoft C++ и компоновщик:

/guard (Включить функцию управления Flow Guard)
Приводит компилятору анализировать поток управления для непрямых целевых объектов вызовов во время компиляции, а затем вставлять код для проверки целевых объектов во время выполнения.

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

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

/NXCOMPAT , /NXCOMPAT (совместим с предотвращением выполнения данных) Эти параметры компилятора и компоновщика позволяют обеспечить совместимость защиты от выполнения данных (DEP). Функция DEP защищает ЦП от исполнения страниц, не содержащих кода.

/analyze (Анализ кода)
Этот параметр компилятора запускает анализ кода с целью выявления потенциальных проблем безопасности, таких как переполнение буфера, отмена инициализации памяти, разыменование нулевого указателя и утечки памяти. По умолчанию этот параметр выключен. Дополнительные сведения см. в разделе «Анализ кода для C/C++».

/DYNAMICBASE (Использование случайности макета адресного пространства)
Этот параметр компоновщика позволяет собрать исполняемый образ, который можно загрузить в другое расположение в памяти в начале выполнения. Этот параметр также делает расположение стека в памяти значительно менее прогнозируемым.

Среда выполнения повышенной безопасности

В библиотеку времени выполнения C (CRT) были добавлены безопасные версии функций, которые могут создать угрозу безопасности, например функция копирования непроверенной строки strcpy . Поскольку устаревшие, небезопасные версии этих функций использовать не рекомендуется, во время компиляции они выводят предупреждения. Рекомендуется использовать безопасные версии этих функций CRT, а не подавлять вывод предупреждений компилятора. Дополнительные сведения см. в разделе Функции безопасности в CRT.

Библиотека SafeInt

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

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

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

Checked Iterators

Проверяемый итератор обеспечивает принудительное соблюдение ограничений контейнера. По умолчанию при превышении ограничений проверяемого итератора создается исключение, и выполнение программы прекращается. Итератор проверка предоставляет другие уровни ответа, зависящие от значений, назначенных препроцессору, таких как _SECURE_SCL_THROWS и _ITERATOR_DEBUG_LEVEL . Например, в _ITERATOR_DEBUG_LEVEL=2 проверка итератор предоставляет комплексные проверка правильности в режиме отладки, которые становятся доступными с помощью утверждений. Дополнительные сведения см. в разделе «Проверенные итераторы » и _ITERATOR_DEBUG_LEVEL .

Анализ управляемого кода

Инструмент анализа управляемого кода, также известный как FxCop, выполняет проверку сборок на соответствие рекомендациям, изложенным в Правилах разработки приложений платформы .NET Framework. FxCop анализирует код и метаданные в каждой сборке и выявляет дефекты по следующим направлениям:

  • Разработка библиотек
  • Локализация
  • Соглашения об именах
  • Производительность
  • Безопасность

Средство проверки приложений Windows

Средство проверки приложений (AppVerifier) поможет определить потенциальные проблемы совместимости приложений, стабильности и безопасности.

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

Можно использовать AppVerifier в следующих целях:

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

Учетные записи пользователей Windows

Для разработчиков и в конечном счете пользователей использование учетных записей Windows, относящихся к группе «Администраторы», создает повышенный риск для безопасности. Дополнительные сведения см. в разделе «Запуск от имени члена группы пользователей» и «Как управление учетными записями пользователей» (UAC) влияет на ваше приложение.

Руководство по спекулятивным каналам выполнения на стороне

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

PyArmor: как запутать код, чтобы защитить программное обеспечение

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

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

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

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

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

Библиотека PyArmor имеет несколько вариантов работы – через консоль, а также с использованием localhost GUI – графического пользовательского интерфейса.

Установка и использование библиотеки pyarmor

В консоли необходимо выполнить следующую команду, чтобы установить модуль:

pip install pyarmor

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

pip install pyarmor—webui

Библиотеки успешно установлены, теперь можно приступить непосредственно к самому шифрованию скрипта.

В первую очередь необходимо создать отдельную папку, в которой будет храниться скрипт с кодом «my_script.py».

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

def math_primer1(x, y): return x + y * x * y def math_primer2(x, y): return x * y ** (x + y) if __name__ == «__main__»: result1 = math_primer2(2, 3) result2 = math_primer1(1, 2) print(result1, result2)

Теперь зашифрую этот код, выполнив в консоли несколько команд.

Для начала необходимо изменить путь до директории в которой лежит файл через:

cd [Полный путь до файла my_script.py]

Затем необходимо выполнить команду обфускации:

Как защитить код?

Написал бота на python, хочу продвинуть в массовое пользование. Но как защитить сам код? И как сделать какое-либо оформление чтобы все было в виде приложения?

  • Вопрос задан более трёх лет назад
  • 464 просмотра

Комментировать

Решения вопроса 1

hottabxp

Сергей Карбивничий @hottabxp Куратор тега Python

Сначала мы жили бедно, а потом нас обокрали..

Но как защитить сам код?

Я даже боюсь представить, что там за секретный код, судя по вашим предыдущим вопросам)):

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

Как спарсить json ответ?

Как добавить объект в список json?

Как сделать кнопку с ссылкой в telebot python?

Ответ написан более трёх лет назад

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

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