Skip to content

☕ ANTLR visitor that obfuscates a subset of Java code

Notifications You must be signed in to change notification settings

IlyaBizyaev/JavaObfuscator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 

Repository files navigation

Лабораторная работа №3. Использование автоматических генераторов анализаторов Bison и ANTLR

Вариант 6. Обфускация [Java, ANTLR]

Илья Бизяев, курс «Методы трансляции», ИТМО, 2019

Формулировка задания

Выберите подмножества языка C++, Java или Pascal и напишите обфускатор для программ данного подмножества. Обфускатор должен заменять имена переменных на случайные строки из символов I, 1, O и 0, которые являются корректными идентификаторами и в случае одинаково выглядящих символов I – 1 и O – 0, соответственно, выглядеть одинаково. Также обфускатор должен вставлять в различные места программы незначащие действия с переменными, которые затрудняют понимание программы, в том числе добавлять новые переменные. Пример:

var
    a, b : integer;
begin
    read(a, b);
    writeln(a + b);
end.

Вывод:

var
    I010, IOI0 : integer;
    I01O : integer;
begin
    read(I010, IOI0);
    I01O := IOI0;
    writeln(I010 + IOI0);
end.

Решение

Данное решение представляет собой обфускатор подмножества языка Java. Поддерживается базовый синтаксис объявлений, инициализация массивов, доступ к методам и полям классов, унарные и бинарные операторы, строковые и десятичные числовые литералы, ветвление с помощью if/else, циклы while.

Сборка и использование программы

Структура программы

  • Main.java — точка входа программы. Принимает 2 аргумента командной строки: путь к исходному файлу и путь для записи результата обфускации.
  • JavaObfuscatingVisitor.java — собственно обфускатор, реализованный в виде шаблона visitor. Заменяет имена локальных переменных, добавляет лишние переменные и операции над ними; попутно форматирует код.
  • JavaBasic.g4 — грамматика указанного подмножества Java. Корневое правило — compilationUnit.

Перед сборкой необходимо сгенерировать лексер, парсер и интерфейс visitor с помощью ANTLR.

Зависимости
Решение использует только стандартную библиотеку Java и ANTLR 4, протестировано с Java 11 и ANTLR 4.8.

About

☕ ANTLR visitor that obfuscates a subset of Java code

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published