Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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
- Host: GitHub
- URL: https://github.com/ilyabizyaev/javaobfuscator
- Owner: IlyaBizyaev
- Created: 2020-01-17T10:13:20.000Z (almost 5 years ago)
- Default Branch: master
- Last Pushed: 2020-07-31T08:06:12.000Z (over 4 years ago)
- Last Synced: 2024-11-02T03:42:11.613Z (2 months ago)
- Topics: antlr, java, obfuscation
- Language: Java
- Homepage:
- Size: 20.5 KB
- Stars: 3
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
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.