Почему файлы.classes имеют странные имена в файле.jar?

Я декомпилировал файл.jar, используя JD-GUI, и множество пакетов со странными названиями, такими как a, b, c, d, и так далее. То же самое было и с классами, поэтому некоторые из .class файлы также были названы как a.class, b.class и так далее.

Я не верю, что разработчики называют пакеты или файлы Java так, что они не могут узнать позже, что делает каждый файл. Я считаю, что это из-за некоторых других технических проблем. Может кто-то прояснить этот вопрос?

1 ответ

Решение

Jar, который вы декомпилировали, вероятно, защищен с помощью ProGuard:

По умолчанию скомпилированный байт-код по-прежнему содержит много отладочной информации: имена исходных файлов, номера строк, имена полей, имена методов, имена аргументов, имена переменных и т. Д. Эта информация упрощает декомпиляцию байт-кода и обратный инжиниринг целых программ. Иногда это не желательно. Обфускаторы, такие как ProGuard, могут удалять отладочную информацию и заменять все имена бессмысленными последовательностями символов, что значительно усложняет обратную разработку кода. Это дополнительно сжимает код в качестве бонуса. Программа остается функционально эквивалентной, за исключением имен классов, имен методов и номеров строк, указанных в трассировках стека исключений.

Все еще возможно выполнить реинжиниринг программы, но очень часто это незаконно, а затем повторно использовать код (по крайней мере, в Соединенных Штатах, единственной стране, с которой у меня есть опыт), так как это нарушение лицензии. Люди, которые используют такие инструменты, как этот, почти всегда не пишут программное обеспечение с открытым исходным кодом.

Другие вопросы по тегам