{"id":16156352,"url":"https://github.com/ilyabizyaev/javaobfuscator","last_synced_at":"2025-04-07T01:17:23.975Z","repository":{"id":163656774,"uuid":"234523657","full_name":"IlyaBizyaev/JavaObfuscator","owner":"IlyaBizyaev","description":"☕ ANTLR visitor that obfuscates a subset of Java code","archived":false,"fork":false,"pushed_at":"2020-07-31T08:06:12.000Z","size":21,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-13T06:43:04.894Z","etag":null,"topics":["antlr","java","obfuscation"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/IlyaBizyaev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-01-17T10:13:20.000Z","updated_at":"2024-02-13T11:40:34.000Z","dependencies_parsed_at":null,"dependency_job_id":"844f703d-3c99-432a-8a3c-dd193fd401e6","html_url":"https://github.com/IlyaBizyaev/JavaObfuscator","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IlyaBizyaev%2FJavaObfuscator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IlyaBizyaev%2FJavaObfuscator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IlyaBizyaev%2FJavaObfuscator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IlyaBizyaev%2FJavaObfuscator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/IlyaBizyaev","download_url":"https://codeload.github.com/IlyaBizyaev/JavaObfuscator/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247574092,"owners_count":20960497,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["antlr","java","obfuscation"],"created_at":"2024-10-10T01:44:41.363Z","updated_at":"2025-04-07T01:17:23.951Z","avatar_url":"https://github.com/IlyaBizyaev.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Лабораторная работа №3. Использование автоматических генераторов анализаторов Bison и ANTLR\n## Вариант 6. Обфускация [Java, ANTLR]\n\n*Илья Бизяев, курс «Методы трансляции», ИТМО, 2019*\n\n### Формулировка задания\nВыберите подмножества языка C++, Java или Pascal и напишите\nобфускатор для программ данного подмножества. Обфускатор должен\nзаменять имена переменных на случайные строки из символов I, 1,\nO и 0, которые являются корректными идентификаторами и в случае\nодинаково выглядящих символов I – 1 и O – 0, соответственно, выглядеть\nодинаково. Также обфускатор должен вставлять в различные места\nпрограммы незначащие действия с переменными, которые затрудняют\nпонимание программы, в том числе добавлять новые переменные.\nПример:\n```\nvar\n    a, b : integer;\nbegin\n    read(a, b);\n    writeln(a + b);\nend.\n```\nВывод:\n```\nvar\n    I010, IOI0 : integer;\n    I01O : integer;\nbegin\n    read(I010, IOI0);\n    I01O := IOI0;\n    writeln(I010 + IOI0);\nend.\n```\n### Решение\nДанное решение представляет собой обфускатор подмножества языка Java. Поддерживается базовый синтаксис объявлений,\nинициализация массивов, доступ к методам и полям классов, унарные и бинарные операторы, строковые и десятичные\nчисловые литералы, ветвление с помощью `if`/`else`, циклы `while`.\n\n\n### Сборка и использование программы\n**Структура программы**\n\n* [Main.java](src/ru/itmo/bizyaev/Main.java) — точка входа программы. Принимает 2 аргумента командной строки: путь\nк исходному файлу и путь для записи результата обфускации.\n* [JavaObfuscatingVisitor.java](src/ru/itmo/bizyaev/JavaObfuscatingVisitor.java) — собственно обфускатор,\nреализованный в виде шаблона visitor. Заменяет имена локальных переменных, добавляет лишние переменные и операции\nнад ними; попутно форматирует код.\n* [JavaBasic.g4](src/ru/itmo/bizyaev/JavaBasic.g4) — грамматика указанного подмножества Java. Корневое правило —\n`compilationUnit`.\n\nПеред сборкой необходимо сгенерировать лексер, парсер и интерфейс visitor с помощью ANTLR.\n\n**Зависимости**  \nРешение использует только стандартную библиотеку Java и ANTLR 4, протестировано с Java 11 и ANTLR 4.8.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Filyabizyaev%2Fjavaobfuscator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Filyabizyaev%2Fjavaobfuscator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Filyabizyaev%2Fjavaobfuscator/lists"}