Обфуска́ция или запутывание кода — приведение исходного текста или исполняемого кода программы к виду, сохраняющему её функциональность, но затрудняющему анализ, понимание алгоритмов работы и модификацию при декомпиляции
Рефакторинг кода с целью обойти простой антиплагиат
Аргументы:
- Имя входного файла (относительное или абсолютное)
- -o имя выходного файла. По умолчанию a.cpp (по старой доброй традиции)
Примеры:
python3 app/main.py examples/1.cpp
python3 app/main.py examples/2.cpp -o examples/2_out.cpp
- Считывание из файла
- Парсинг или распознавание. Классы, описывающие синтаксис языковых объектов находятся в файле lang_objects.py и начинаются с префикса С, например CFunction - распознает любую функцию, в тч метод класса
- Превращение сущностей в виде python классов обратно в код, но в измененном виде. За это отвечает метод .refactor()
- Запись выходного файла
- Кастомизировать обфускаию c++ под свои нужды. Работать с программными сущностями намного проще, чем с сырым кодом
- Создать свой парсер любого языка с данным обработчиком. Достаточно заменить обработчики в файле lang_objeccts.py
- Парсинг любых сложных структур описываемых контекстно-свободной грамматикой. Для этого в файле parser_utils.py лежат независящие от синтаксиса функции, создающие базу для модификации
- Генерация кода, на основе разработанной грамматики
Парсер поддерживает основные языковые сущности
- Классы
- Функции
- Импорты
- Выражения
- Условные конструкции
- Объявления переменных
- Структуры
Цель проекта:
- Практика написания простых модулей на python
- Простое решение для помощи людям в лабах по c++ (быстрое первичное изменение рабочего кода, для отправки другим человеком в контест). Обратить внимание, что после этого все равно требуется "причесать" выходной код