2010-03-16 4 views

ответ

1

Нет. Обфускация просто заменяет ваш разумно названный код на erneadable. В некоторых случаях (в качестве примера при использовании ProGuard, наш код может даже быть «оптимизированы», удалив все ненужные блоки кода (например, if(false) и Двойник заявления).

EDIT (уточнить идеи Magesh) .

При использовании обфускатора (и НЕ обфускации вручную, что не является хорошей идеей), он будет загружать ваши классы и встроить некоторые методы или кодовые блоки (например, вышеупомянутые if), чтобы упростить код для полученных больших блоков В результате существует меньше вызовов методов, требующих меньше использования стека, а затем скрепления приложения.

Другое дело obfuscator обычно делает это для переименования всех переменных из mySmartVariable в a$a$a, что делает невозможным декомпилирование (поскольку декомпилятор java считает $ символом, используемым для идентификации внутренних и анонимных классов, а не переменных).

+0

, но добавление пустых методов может привести к его замедлению вправо? – 2010-03-16 13:11:28

+1

@Magesh Удаляет, не добавляет бесполезных блоков кода. –

+1

@ Джеймс, не всегда, см. Мой ответ. Некоторое программное обеспечение добавляет бессмысленные потоки управления, поэтому код намного сложнее читать, например. обфускация потока. Это действительно влияет на производительность, хотя и мала. – Razzie

6

Определенно да: за исключением простейшего случая, когда только имена идентификаторов скремблируются, это зависит только от того, насколько влияет производительность. Более подробно, например, here, общая информация об методах обфускации доступна в статье Википедии Obfuscated code.

0

Если вы добавили избыточный код, который никогда не проходил, нет. Если вы добавите логику, которая должна быть пройдена при нормальном выполнении вашего кода, тогда да, это повлияет на производительность. Насколько зависит от того, какую нелогичную структуру вы пытались добавить в путаницу, будут программные пираты.

0

Иногда, да. В Java ME («версия мобильного телефона» Java), обфускация работает на скомпилированном байт-коде и, между прочим, заменяет имена короткими, автогенерируемыми. Это приводит к сокращению байтового кода, что, по крайней мере, ускоряет загрузку приложения по сети.

6

В общем, обфускация путем переименования переменных, методов и классов в более бессмысленные имена не влияет на производительность. Некоторые производители программного обеспечения для обфускации даже утверждают, что помимо обфускации также увеличивается производительность на 30%. Хотя я никогда не тестировал эти утверждения, никогда не видел их доказанными, и поэтому им трудно поверить.

Однако имейте в виду, что некоторое программное обеспечение также позволяет обфускации потока: добавление бессмысленных циклов управления к операторам, поэтому сложнее выполнить код. То, что делает, отрицательно влияет на производительность, хотя и небольшая.

+0

Интересный момент (действительно, не шутка здесь), Razzie. Интересно, что представляет интерес, поскольку, когда вы включаете обфускацию, вы считаете свой код враждебными руками, которые могут использовать инструменты анализа кода для удаления пустых методов и встроенных 1-так называемых методов ... – Riduidel

+4

Хорошие обфускаторы могут создавать совершенно нечитаемый код, используя goto's и другой мусор, в результате чего код, который очень сложно декомпилировать (хорошо). Тем не менее, это связано с штрафом за производительность. Взгляните на http://www.excelsior-usa.com/articles/java-obfuscators.html#performance, интересное чтение. – Razzie

Смежные вопросы