Запутывание программы Java влияют на ее производительность (исключая переименование вещей)?
Нет. Обфускация просто заменяет ваш разумно названный код на безнадежный. В некоторых случаях (например, при использовании ProGuard наш код может быть даже «оптимизирован», удалив все бесполезные блоки кода (например, if (false)
и похожие операторы).
РЕДАКТИРОВАТЬ). (чтобы прояснить идеи Магеша).
При использовании обфускатора (а НЕ обфускации вручную, что не является хорошей идеей) он загрузит ваши классы и встроит некоторые методы или блоки кода (например, вышеупомянутый, если ) для упрощения кода для полученных больших блоков кода, как следствие, меньше вызовов методов, требующих меньшего использования стека, а затем закрепления приложения.
Другая вещь, которую обычно выполняет обфускатор, переименовывает все переменные из mySmartVariable
в a $ a $ a
, что делает невозможным декомпиляцию (поскольку декомпилятор java считает ] $
как символ, используемый для обозначения внутренних и анонимных классов, а не переменных).
Определенно да: за исключением простейшего случая, когда зашифровываются только имена идентификаторов, вопрос только в том, насколько сильно пострадает производительность. Более подробная информация, например здесь , общая информация о методах обфускации доступна в статье Обфусцированный код Википедии.
В целом, обфускация путем переименования переменных, методов и имен классов в более бессмысленные имена не влияет на производительность. Некоторые производители программного обеспечения для обфускации даже утверждают, что помимо обфускации, прирост производительности достигает 30%. Хотя я никогда не тестировал эти утверждения, не видел их доказательств и поэтому считаю, что в них трудно поверить.
Однако следует помнить, что некоторые программы также позволяют обфускацию потока: добавление бессмысленных циклов управления к утверждениям, чтобы код было труднее проследить. Это оказывает негативное влияние на производительность, хотя и небольшое.
Если вы добавляете избыточный код, который никогда не проходит, нет. Если вы добавите логику, которую необходимо выполнять при нормальном выполнении кода, то да, это повлияет на производительность. Насколько сильно зависит от того, какую нелогичную структуру вы попытались добавить, чтобы запутать пиратов программного обеспечения.
Иногда да. В Java ME («версия Java для мобильных телефонов») обфускация работает с скомпилированным байтовым кодом и (среди прочего) заменяет имена короткими, автоматически сгенерированными. Это делает байт-код короче, что, по крайней мере, ускоряет загрузку приложения по сети.