Почему файлы.classes имеют странные имена в файле.jar?
Я декомпилировал файл.jar, используя JD-GUI, и множество пакетов со странными названиями, такими как a
, b
, c
, d
, и так далее. То же самое было и с классами, поэтому некоторые из .class
файлы также были названы как a.class
, b.class
и так далее.
Я не верю, что разработчики называют пакеты или файлы Java так, что они не могут узнать позже, что делает каждый файл. Я считаю, что это из-за некоторых других технических проблем. Может кто-то прояснить этот вопрос?
1 ответ
Jar, который вы декомпилировали, вероятно, защищен с помощью ProGuard:
По умолчанию скомпилированный байт-код по-прежнему содержит много отладочной информации: имена исходных файлов, номера строк, имена полей, имена методов, имена аргументов, имена переменных и т. Д. Эта информация упрощает декомпиляцию байт-кода и обратный инжиниринг целых программ. Иногда это не желательно. Обфускаторы, такие как ProGuard, могут удалять отладочную информацию и заменять все имена бессмысленными последовательностями символов, что значительно усложняет обратную разработку кода. Это дополнительно сжимает код в качестве бонуса. Программа остается функционально эквивалентной, за исключением имен классов, имен методов и номеров строк, указанных в трассировках стека исключений.
Все еще возможно выполнить реинжиниринг программы, но очень часто это незаконно, а затем повторно использовать код (по крайней мере, в Соединенных Штатах, единственной стране, с которой у меня есть опыт), так как это нарушение лицензии. Люди, которые используют такие инструменты, как этот, почти всегда не пишут программное обеспечение с открытым исходным кодом.