Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/ilyabizyaev/javaobfuscator

☕ ANTLR visitor that obfuscates a subset of Java code
https://github.com/ilyabizyaev/javaobfuscator

antlr java obfuscation

Last synced: 14 days ago
JSON representation

☕ ANTLR visitor that obfuscates a subset of Java code

Awesome Lists containing this project

README

        

# Лабораторная работа №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](src/ru/itmo/bizyaev/Main.java) — точка входа программы. Принимает 2 аргумента командной строки: путь
к исходному файлу и путь для записи результата обфускации.
* [JavaObfuscatingVisitor.java](src/ru/itmo/bizyaev/JavaObfuscatingVisitor.java) — собственно обфускатор,
реализованный в виде шаблона visitor. Заменяет имена локальных переменных, добавляет лишние переменные и операции
над ними; попутно форматирует код.
* [JavaBasic.g4](src/ru/itmo/bizyaev/JavaBasic.g4) — грамматика указанного подмножества Java. Корневое правило —
`compilationUnit`.

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

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